tools/tests: small end-to-end test suite for importing/pruning

As bigger changes lie ahead, we want a small end-to-end test suite
that ensures that our importing and tracing does not fall apart. With
this change, we add the infrastructure and two test-cases (fib, qsort)
including ELFs, traces, and injection results.

In order to run the basic-pruner test cases, one needs to setup a
MySQL table and set the CMake option ENABLE_DATABASE_TESTS.
This commit is contained in:
Christian Dietrich
2020-11-24 19:12:36 +01:00
committed by Horst Schirmeier
parent df44da9f33
commit f92b930acb
65 changed files with 198613 additions and 0 deletions

View File

@ -13,16 +13,21 @@ option(BUILD_DATA_AGGREGATOR "Build the data aggregation tools?" OFF)
include_directories(${CMAKE_CURRENT_BINARY_DIR}/../src/core)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src/core)
set(TEST_DRIVER_ARGS )
if(BUILD_IMPORT_TRACE)
add_subdirectory(import-trace)
set(TEST_DRIVER_ARGS ${TEST_DRIVER_ARGS} --import-trace $<TARGET_FILE:import-trace>)
endif(BUILD_IMPORT_TRACE)
if(BUILD_PRUNE_TRACE)
add_subdirectory(prune-trace)
set(TEST_DRIVER_ARGS ${TEST_DRIVER_ARGS} --prune-trace $<TARGET_FILE:prune-trace>)
endif(BUILD_PRUNE_TRACE)
if(BUILD_DUMP_TRACE)
add_subdirectory(dump-trace)
set(TEST_DRIVER_ARGS ${TEST_DRIVER_ARGS} --dump-trace $<TARGET_FILE:dump-trace>)
endif(BUILD_DUMP_TRACE)
if(BUILD_CONVERT_TRACE)
@ -44,3 +49,5 @@ endif(BUILD_FAULTSPACEPLOT)
if(BUILD_DATA_AGGREGATOR)
add_subdirectory(analysis/data-aggregator)
endif(BUILD_DATA_AGGREGATOR)
add_subdirectory(tests)

View File

@ -0,0 +1,35 @@
option(ENABLE_DATABASE_TESTS "Perform tests that require a MySQL Database?" OFF)
# CREATE DATABASE fail_test;
# GRANT ALL ON fail_test.* TO 'fail_test'@'localhost' IDENTIFIED BY 'fail_test' WITH GRANT OPTION;
set(TEST_MYSQL_HOST "localhost" CACHE STRING "")
set(TEST_MYSQL_USER "fail_test" CACHE STRING "")
set(TEST_MYSQL_PASSWORD "fail_test" CACHE STRING "")
set(TEST_MYSQL_DATABASE "fail_test" CACHE STRING "")
set(TEST_MYSQL_PORT "3306" CACHE STRING "")
if(ENABLE_DATABASE_TESTS)
configure_file("my.cnf.in" "my.cnf")
set(TEST_DRIVER_ARGS ${TEST_DRIVER_ARGS} --my-cnf ${CMAKE_CURRENT_BINARY_DIR}/my.cnf)
foreach(BENCHMARK fib qsort)
add_test(
NAME dump-trace-${BENCHMARK}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ./run ${TEST_DRIVER_ARGS} dump-trace ${BENCHMARK}
)
set_tests_properties(dump-trace-${BENCHMARK} PROPERTIES SKIP_RETURN_CODE 127)
add_test(
NAME basic-pruner-${BENCHMARK}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ./run ${TEST_DRIVER_ARGS} basic-pruner ${BENCHMARK}
)
set_tests_properties(basic-pruner-${BENCHMARK} PROPERTIES SKIP_RETURN_CODE 127)
endforeach()
endif()

58
tools/tests/export-injection Executable file
View File

@ -0,0 +1,58 @@
#!/usr/bin/python3
import subprocess
import sys
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("variant_id")
args = parser.parse_args()
SELECT = f"""select t.instr1, t.instr2, (t.time2-t.time1+1), t.data_address, r.bitoffset, r.resulttype
from trace t
join variant v
on t.variant_id = v.id
join fspgroup g
on t.variant_id = g.variant_id
and t.instr2 = g.instr2
and t.data_address = g.data_address
join fsppilot p
on t.variant_id = p.variant_id
and g.fspmethod_id = p.fspmethod_id
and g.pilot_id = p.id
left outer join result_GenericExperimentMessage r
on r.pilot_id = p.id
where t.variant_id={args.variant_id}
and g.fspmethod_id = (select id from fspmethod where method = "basic")
;"""
proc = subprocess.Popen(["mysql", "-N"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding="utf-8")
proc.stdin.write(SELECT)
proc.stdin.close()
classes = set()
insert = []
for line in proc.stdout.readlines():
index,resulttype = line.strip().rsplit("\t",1)
index = index.replace("\t", ",")
classes.add(resulttype)
insert.append(f"({index}, '{resulttype}')")
classes = ",".join([repr(x) for x in classes])
print("DROP TABLE IF EXISTS injection;")
print(f"""CREATE TABLE injection (
`instr1` int(10) unsigned NOT NULL,
`instr2` int(10) unsigned NOT NULL,
`duration` int(10) unsigned NOT NULL,
`data_address` int(10) unsigned NOT NULL,
`bitoffset` int(10) unsigned NOT NULL,
`resulttype` enum({classes}) NOT NULL,
PRIMARY KEY (`data_address`,`instr2`,`bitoffset`)
);
""")
print("INSERT INTO injection VALUES")
print(",".join(insert))
print(";")

View File

@ -0,0 +1,7 @@
set timeout=0
set default=0
menuentry "CoRedOS" {
multiboot /boot/system.elf
boot
}

Binary file not shown.

File diff suppressed because one or more lines are too long

192577
tools/tests/fib/results.tsv Normal file

File diff suppressed because it is too large Load Diff

133
tools/tests/fib/state/cmos Normal file
View File

@ -0,0 +1,133 @@
cmos = {
mem_address = 0x5d
ram = {
0x00 = 0x15
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x07
0x07 = 0x01
0x08 = 0x01
0x09 = 0x00
0x0a = 0x26
0x0b = 0x02
0x0c = 0x00
0x0d = 0x80
0x0e = 0x00
0x0f = 0x00
0x10 = 0x00
0x11 = 0x00
0x12 = 0x00
0x13 = 0x00
0x14 = 0x06
0x15 = 0x80
0x16 = 0x02
0x17 = 0x00
0x18 = 0x3c
0x19 = 0x00
0x1a = 0x00
0x1b = 0x00
0x1c = 0x00
0x1d = 0x00
0x1e = 0x00
0x1f = 0x00
0x20 = 0x00
0x21 = 0x00
0x22 = 0x00
0x23 = 0x00
0x24 = 0x00
0x25 = 0x00
0x26 = 0x00
0x27 = 0x00
0x28 = 0x00
0x29 = 0x00
0x2a = 0x00
0x2b = 0x00
0x2c = 0x00
0x2d = 0x00
0x2e = 0x00
0x2f = 0xc4
0x30 = 0x00
0x31 = 0x3c
0x32 = 0x20
0x33 = 0x00
0x34 = 0x00
0x35 = 0x00
0x36 = 0x00
0x37 = 0x20
0x38 = 0x00
0x39 = 0x00
0x3a = 0x00
0x3b = 0x00
0x3c = 0x00
0x3d = 0x03
0x3e = 0x00
0x3f = 0x00
0x40 = 0x00
0x41 = 0x00
0x42 = 0x00
0x43 = 0x00
0x44 = 0x00
0x45 = 0x00
0x46 = 0x00
0x47 = 0x00
0x48 = 0x00
0x49 = 0x00
0x4a = 0x00
0x4b = 0x00
0x4c = 0x00
0x4d = 0x00
0x4e = 0x00
0x4f = 0x00
0x50 = 0x00
0x51 = 0x00
0x52 = 0x00
0x53 = 0x00
0x54 = 0x00
0x55 = 0x00
0x56 = 0x00
0x57 = 0x00
0x58 = 0x00
0x59 = 0x00
0x5a = 0x00
0x5b = 0x00
0x5c = 0x00
0x5d = 0x00
0x5e = 0x00
0x5f = 0x00
0x60 = 0x00
0x61 = 0x00
0x62 = 0x00
0x63 = 0x00
0x64 = 0x00
0x65 = 0x00
0x66 = 0x00
0x67 = 0x00
0x68 = 0x00
0x69 = 0x00
0x6a = 0x00
0x6b = 0x00
0x6c = 0x00
0x6d = 0x00
0x6e = 0x00
0x6f = 0x00
0x70 = 0x00
0x71 = 0x00
0x72 = 0x00
0x73 = 0x00
0x74 = 0x00
0x75 = 0x00
0x76 = 0x00
0x77 = 0x00
0x78 = 0x00
0x79 = 0x00
0x7a = 0x00
0x7b = 0x00
0x7c = 0x00
0x7d = 0x00
0x7e = 0x00
0x7f = 0x00
}
}

View File

@ -0,0 +1,57 @@
# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, gameport=1, pci_ide=0, acpi=0, ioapic=1
config_interface: textconfig
display_library: nogui
memory: host=16, guest=16
romimage: file="BIOS-bochs-latest"
vgaromimage: file="vgabios.bin"
boot: cdrom
floppy_bootsig_check: disabled=0
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-slave: type=cdrom, path="img/micro/fib/system.iso", status=inserted, biosdetect=auto, model="Generic 1234"
ata1: enabled=0
ata2: enabled=0
ata3: enabled=0
parport1: enabled=0
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=0
vga_update_interval: 300000
vga: extension=vbe
cpu: count=1, ips=5000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpuid: cpuid_limit_winnt=0, mmx=1, sse=sse4_2, xapic=1, sep=1, aes=1, xsave=1, movbe=1, 1g_pages=0, pcid=0 fsgsbase=0, mwait=1, mwait_is_nop=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=946681200
# no cmosimage
ne2k: card=0, enabled=0
ne2k: card=1, enabled=0
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=report
error: action=report
info: action=ignore
debug: action=ignore
pass: action=ignore
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

1154
tools/tests/fib/state/cpu0 Normal file

File diff suppressed because it is too large Load Diff

144
tools/tests/fib/state/dma Normal file
View File

@ -0,0 +1,144 @@
dma = {
0 = {
flip_flop = false
status_reg = 0x00
command_reg = 0x00
ctrl_disabled = false
0 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
1 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
2 = {
DRQ = false
DACK = false
mask = false
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
3 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
}
1 = {
flip_flop = false
status_reg = 0x00
command_reg = 0x00
ctrl_disabled = false
0 = {
DRQ = false
DACK = false
mask = false
mode_type = 3
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
1 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
2 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
3 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
}
ext_page = {
0x80 = 0x00
0x81 = 0x00
0x82 = 0x00
0x83 = 0x00
0x84 = 0x00
0x85 = 0x00
0x86 = 0x00
0x87 = 0x00
0x88 = 0x00
0x89 = 0x00
0x8a = 0x00
0x8b = 0x00
0x8c = 0x00
0x8d = 0x00
0x8e = 0x00
0x8f = 0x00
}
}

Binary file not shown.

View File

@ -0,0 +1,87 @@
floppy = {
data_rate = 2
command = {
0 = 0x00
1 = 0x00
2 = 0x00
3 = 0x00
4 = 0x00
5 = 0x00
6 = 0x00
7 = 0x18
8 = 0x55
9 = 0xfa
}
command_index = 0
command_size = 0
command_complete = true
pending_command = 0xfe
multi_track = false
pending_irq = false
reset_sensei = 0
format_count = 170
format_fillbyte = 0x5c
result = {
0 = 0x6d
1 = 0xe2
2 = 0x7f
3 = 0x00
4 = 0x00
5 = 0x04
6 = 0x10
7 = 0x20
8 = 0x00
9 = 0x00
}
result_index = 0
result_size = 0
DOR = 0x00
TDR = 0x00
TC = false
main_status_reg = 0x00
status_reg0 = 0x00
status_reg1 = 0x00
status_reg2 = 0x00
status_reg3 = 0x00
floppy_buffer_index = 0
lock = false
SRT = 0x00
HUT = 0x00
HLT = 0x00
config = 0x00
pretrk = 0
perp_mode = 0
buffer = floppy.buffer
drive0 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
drive1 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
drive2 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
drive3 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
}

Binary file not shown.

View File

@ -0,0 +1,8 @@
gameport = {
port = 0xf0
delay_x = 0
delay_y = 0
timer_x = false
timer_y = false
write_usec = 0
}

View File

@ -0,0 +1,53 @@
hard_drive = {
0 = {
drive0 = {
buffer = drive0.buffer
status = {
busy = false
drive_ready = true
write_fault = false
seek_complete = true
drq = false
corrected_data = false
index_pulse = false
index_pulse_count = 1
err = false
}
error_register = 0x00
head_no = 0x00
sector_count = 0x03
sector_no = 0x00
cylinder_no = 0x4000
buffer_size = 0x00000800
buffer_index = 0x00000800
drq_index = 0x00000000
current_command = 0xa0
multiple_sectors = 0x00
lba_mode = 0x00
packet_dma = 0x00000000
control_reset = false
control_disable_irq = false
reset_in_progress = 0x00
features = 0x00
mdma_mode = 0x00
udma_mode = 0x00
hob_feature = 0x00
hob_nsector = 0x03
hob_sector = 0x00
hob_lcyl = 0x00
hob_hcyl = 0x40
num_sectors = 0x00000000
cdrom_locked = false
}
drive_select = 1
}
1 = {
drive_select = 0
}
2 = {
drive_select = 0
}
3 = {
drive_select = 0
}
}

View File

@ -0,0 +1,103 @@
ioapic = {
ioregsel = 0x00000000
intin = 0x00000001
irr = 0x00000001
ioredtbl = {
0x00 = {
lo = 0x00010000
hi = 0x00000000
}
0x01 = {
lo = 0x00010000
hi = 0x00000000
}
0x02 = {
lo = 0x00010000
hi = 0x00000000
}
0x03 = {
lo = 0x00010000
hi = 0x00000000
}
0x04 = {
lo = 0x00010000
hi = 0x00000000
}
0x05 = {
lo = 0x00010000
hi = 0x00000000
}
0x06 = {
lo = 0x00010000
hi = 0x00000000
}
0x07 = {
lo = 0x00010000
hi = 0x00000000
}
0x08 = {
lo = 0x00010000
hi = 0x00000000
}
0x09 = {
lo = 0x00010000
hi = 0x00000000
}
0x0a = {
lo = 0x00010000
hi = 0x00000000
}
0x0b = {
lo = 0x00010000
hi = 0x00000000
}
0x0c = {
lo = 0x00010000
hi = 0x00000000
}
0x0d = {
lo = 0x00010000
hi = 0x00000000
}
0x0e = {
lo = 0x00010000
hi = 0x00000000
}
0x0f = {
lo = 0x00010000
hi = 0x00000000
}
0x10 = {
lo = 0x00010000
hi = 0x00000000
}
0x11 = {
lo = 0x00010000
hi = 0x00000000
}
0x12 = {
lo = 0x00010000
hi = 0x00000000
}
0x13 = {
lo = 0x00010000
hi = 0x00000000
}
0x14 = {
lo = 0x00010000
hi = 0x00000000
}
0x15 = {
lo = 0x00010000
hi = 0x00000000
}
0x16 = {
lo = 0x00010000
hi = 0x00000000
}
0x17 = {
lo = 0x00010000
hi = 0x00000000
}
}
}

View File

@ -0,0 +1,132 @@
keyboard = {
controller = {
tim = false
auxb = false
c_d = false
sysf = false
inpb = false
outb = false
kbd_clock_enabled = true
aux_clock_enabled = false
allow_irq1 = true
allow_irq12 = false
kbd_output_buffer = 0xfa
aux_output_buffer = 0x00
last_comm = 0x60
expecting_port60h = 0
expecting_mouse_parameter = 0
last_mouse_command = 0x55
timer_pending = 0
irq1_requested = false
irq12_requested = false
scancodes_translate = true
expecting_scancodes_set = false
current_scancodes_set = 1
bat_in_progress = false
}
mouse = {
sample_rate = 100
resolution_cpmm = 4
scaling = 1
mode = 10
saved_mode = 251
enable = false
button_status = 224
delayed_dx = 0
delayed_dy = 0
delayed_dz = 0
im_request = 0
im_mode = false
}
kbd_internal_buffer = {
num_elements = 0
buffer = {
0 = 0xfa
1 = 0xfa
2 = 0x00
3 = 0x00
4 = 0x00
5 = 0x00
6 = 0x00
7 = 0x00
8 = 0x00
9 = 0x00
10 = 0x00
11 = 0x00
12 = 0x00
13 = 0x00
14 = 0x00
15 = 0x00
}
head = 2
expecting_typematic = false
expecting_led_write = false
delay = 1
repeat_rate = 11
led_status = 0
scanning_enabled = true
}
mouse_internal_buffer = {
num_elements = 0
buffer = {
0 = 0x00
1 = 0x00
2 = 0x00
3 = 0x00
4 = 0x00
5 = 0x00
6 = 0x00
7 = 0x00
8 = 0x00
9 = 0x00
10 = 0x00
11 = 0x00
12 = 0x00
13 = 0x00
14 = 0x00
15 = 0x00
16 = 0x00
17 = 0x00
18 = 0x00
19 = 0x00
20 = 0x00
21 = 0x00
22 = 0x00
23 = 0x00
24 = 0x00
25 = 0x00
26 = 0x00
27 = 0x00
28 = 0x00
29 = 0x00
30 = 0x00
31 = 0x00
32 = 0x00
33 = 0x00
34 = 0x00
35 = 0x00
36 = 0x00
37 = 0x00
38 = 0x00
39 = 0x00
40 = 0x00
41 = 0x00
42 = 0x00
43 = 0x00
44 = 0x00
45 = 0x00
46 = 0x00
47 = 0x00
}
head = 0
}
controller_Q = {
0 = 0x00
1 = 0x00
2 = 0x00
3 = 0x00
4 = 0x00
}
controller_Qsize = 0
controller_Qsource = 0
}

View File

View File

@ -0,0 +1,24 @@
memory = {
ram = memory.ram
len = 16777216
allocated = 16777216
used_blocks = 5
mapping = {
blk0 = 0
blk1 = 1
blk2 = 4
blk3 = 4294967295
blk4 = 4294967295
blk5 = 4294967295
blk6 = 4294967295
blk7 = 4294967295
blk8 = 4294967295
blk9 = 4294967295
blk10 = 4294967295
blk11 = 4294967295
blk12 = 4294967295
blk13 = 4294967295
blk14 = 3
blk15 = 2
}
}

Binary file not shown.

View File

@ -0,0 +1,110 @@
pc_system = {
enable_a20 = true
a20_mask = 0xffffffffffffffff
currCountdown = 199
currCountdownPeriod = 250
ticksTotal = 79478750
lastTimeUsec = 0
usecSinceLast = 0
HRQ = false
timer = {
0 = {
inUse = true
period = 4294967295
timeToFire = 4294967295
active = true
continuous = true
}
1 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
2 = {
inUse = true
period = 17985
timeToFire = 79484613
active = true
continuous = false
}
3 = {
inUse = true
period = 5000000
timeToFire = 5000000
active = false
continuous = true
}
4 = {
inUse = true
period = 5000000
timeToFire = 80000000
active = true
continuous = true
}
5 = {
inUse = true
period = 1220
timeToFire = 75001220
active = false
continuous = false
}
6 = {
inUse = true
period = 1250
timeToFire = 1250
active = false
continuous = false
}
7 = {
inUse = true
period = 1500000
timeToFire = 79500000
active = true
continuous = true
}
8 = {
inUse = true
period = 500
timeToFire = 79479000
active = true
continuous = true
}
9 = {
inUse = true
period = 1250
timeToFire = 79480000
active = true
continuous = true
}
10 = {
inUse = true
period = 500000
timeToFire = 79728858
active = true
continuous = false
}
11 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
12 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
13 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
}
}

40
tools/tests/fib/state/pic Normal file
View File

@ -0,0 +1,40 @@
pic = {
master = {
interrupt_offset = 0x08
auto_eoi = 0x00
imr = 0xb8
isr = 0x00
irr = 0x00
read_reg_select = 0
irq = 0x00
lowest_priority = 0x07
INT = false
IRQ_in = 0x01
in_init = false
requires_4 = true
byte_expected = 4
special_mask = false
polled = false
rotate_on_autoeoi = false
edge_level = 0x00
}
slave = {
interrupt_offset = 0x70
auto_eoi = 0x00
imr = 0x8f
isr = 0x00
irr = 0x00
read_reg_select = 0
irq = 0x00
lowest_priority = 0x07
INT = false
IRQ_in = 0x00
in_init = false
requires_4 = true
byte_expected = 4
special_mask = false
polled = false
rotate_on_autoeoi = false
edge_level = 0x00
}
}

82
tools/tests/fib/state/pit Normal file
View File

@ -0,0 +1,82 @@
pit = {
speaker_data_on = 0x00
refresh_clock_div2 = false
last_usec = 15893325
last_next_event_time = 42949
total_ticks = 1065898
total_usec = 893325
counter = {
0 = {
GATE = true
OUTpin = true
count = 42950
outlatch = 0
inlatch = 0
status_latch = 0
rw_mode = 3
mode = 2
bcd_mode = false
null_count = false
count_LSB_latched = false
count_MSB_latched = false
status_latched = false
count_binary = 42950
triggerGATE = false
write_state = 2
read_state = 2
count_written = true
first_pass = false
state_bit_1 = false
state_bit_2 = false
next_change_time = 42949
}
1 = {
GATE = true
OUTpin = true
count = 41827
outlatch = 0
inlatch = 0
status_latch = 0
rw_mode = 1
mode = 4
bcd_mode = false
null_count = false
count_LSB_latched = false
count_MSB_latched = false
status_latched = false
count_binary = 41827
triggerGATE = false
write_state = 0
read_state = 0
count_written = true
first_pass = false
state_bit_1 = false
state_bit_2 = false
next_change_time = 0
}
2 = {
GATE = false
OUTpin = true
count = 65534
outlatch = 0
inlatch = 65535
status_latch = 0
rw_mode = 3
mode = 0
bcd_mode = false
null_count = false
count_LSB_latched = false
count_MSB_latched = false
status_latched = false
count_binary = 65534
triggerGATE = false
write_state = 2
read_state = 2
count_written = true
first_pass = true
state_bit_1 = false
state_bit_2 = false
next_change_time = 0
}
}
}

View File

@ -0,0 +1,488 @@
serial = {
0 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 115200
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x01
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = true
tsr_empty = true
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = true
dsr = true
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x01
divisor_msb = 0x00
}
1 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 0
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x00
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = false
tsr_empty = false
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = false
dsr = false
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x00
divisor_msb = 0x00
}
2 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 0
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x00
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = false
tsr_empty = false
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = false
dsr = false
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x00
divisor_msb = 0x00
}
3 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 0
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x00
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = false
tsr_empty = false
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = false
dsr = false
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x00
divisor_msb = 0x00
}
detect_mouse = 0
mouse_delayed_dx = 0
mouse_delayed_dy = 0
mouse_delayed_dz = 0
mouse_internal_buffer = {
num_elements = 0
buffer = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
0x10 = 0x00
0x11 = 0x00
0x12 = 0x00
0x13 = 0x00
0x14 = 0x00
0x15 = 0x00
0x16 = 0x00
0x17 = 0x00
0x18 = 0x00
0x19 = 0x00
0x1a = 0x00
0x1b = 0x00
0x1c = 0x00
0x1d = 0x00
0x1e = 0x00
0x1f = 0x00
0x20 = 0x00
0x21 = 0x00
0x22 = 0x00
0x23 = 0x00
0x24 = 0x00
0x25 = 0x00
0x26 = 0x00
0x27 = 0x00
0x28 = 0x00
0x29 = 0x00
0x2a = 0x00
0x2b = 0x00
0x2c = 0x00
0x2d = 0x00
0x2e = 0x00
0x2f = 0x00
}
head = 0
}
}

147
tools/tests/fib/state/vga Normal file
View File

@ -0,0 +1,147 @@
vga = {
misc_output = {
color_emulation = true
enable_ram = true
clock_select = 1
select_high_bank = true
horiz_sync_pol = true
vert_sync_pol = false
}
CRTC = {
address = 0x0f
reg = {
0x00 = 0x5f
0x01 = 0x4f
0x02 = 0x50
0x03 = 0x82
0x04 = 0x55
0x05 = 0x81
0x06 = 0xbf
0x07 = 0x1f
0x08 = 0x00
0x09 = 0x4f
0x0a = 0x0e
0x0b = 0x0f
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0xa0
0x10 = 0x9c
0x11 = 0x8e
0x12 = 0x8f
0x13 = 0x28
0x14 = 0x1f
0x15 = 0x96
0x16 = 0xb9
0x17 = 0xa3
0x18 = 0xff
}
write_protect = true
}
attribute_ctrl = {
flip_flop = false
address = 0x00000000
video_enabled = true
palette_reg = {
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
0x03 = 0x03
0x04 = 0x04
0x05 = 0x05
0x06 = 0x14
0x07 = 0x07
0x08 = 0x38
0x09 = 0x39
0x0a = 0x3a
0x0b = 0x3b
0x0c = 0x3c
0x0d = 0x3d
0x0e = 0x3e
0x0f = 0x3f
}
overscan_color = 0x00
color_plane_enable = 0x0f
horiz_pel_panning = 0x08
color_select = 0x00
mode_ctrl = {
graphics_alpha = false
display_type = false
enable_line_graphics = true
blink_intensity = true
pixel_panning_compat = false
pixel_clock_select = false
internal_palette_size = false
}
}
pel = {
write_data_register = 0x00
write_data_cycle = 0
read_data_register = 0x00
read_data_cycle = 0
dac_state = 0
mask = 0xff
}
pel_data = vga.pel_data
graphics_ctrl = {
index = 5
set_reset = 0
enable_set_reset = 0
color_compare = 0
data_rotate = 0
raster_op = 0
read_map_select = 0
write_mode = 0
read_mode = 0
odd_even = true
chain_odd_even = true
shift_reg = 0
graphics_alpha = false
memory_mapping = 3
color_dont_care = 0x0f
bitmask = 0xff
latch0 = 0x00
latch1 = 0x00
latch2 = 0x00
latch3 = 0x00
}
sequencer = {
index = 3
map_mask = 3
reset1 = true
reset2 = true
reg1 = 0x00
char_map_select = 0
extended_mem = true
odd_even = false
chain_four = false
}
enabled = true
line_offset = 160
line_compare = 1023
vertical_display_end = 399
charmap_address = 0
x_dotclockdiv2 = false
y_doublescan = true
last_bpp = 8
memory = vga.memory
vbe = {
cur_dispi = 0xb0c5
xres = 640
yres = 480
bpp = 8
bank = 0
enabled = false
curindex = 4
visible_screen_size = 0
offset_x = 0
offset_y = 0
virtual_xres = 640
virtual_yres = 480
virtual_start = 0
bpp_multiplier = 1
lfb_enabled = false
get_capabilities = false
dac_8bit = false
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,34 @@
virt_timer = {
timer = {
0 = {
inUse = true
period = 2147483647
timeToFire = 2147483647
active = true
continuous = true
}
1 = {
inUse = true
period = 3599
timeToFire = 15896924
active = true
continuous = false
}
}
current_timers_time = 15893325
timers_next_event_time = 3599
last_sequential_time = 0
virtual_next_event_time = 3599
current_virtual_time = 15893325
last_real_time = 1578924690899518
total_real_usec = 0
last_realtime_delta = 0
last_usec = 0
usec_per_second = 1000000
stored_delta = 0
last_system_usec = 0
em_last_realtime = 0
total_ticks = 0
last_realtime_ticks = 0
ticks_per_second = 1000000
}

BIN
tools/tests/fib/system.elf Executable file

Binary file not shown.

BIN
tools/tests/fib/system.iso Normal file

Binary file not shown.

View File

@ -0,0 +1,7 @@
#instructions: 3127
#memLocations: 172
#memR: 711
#memR_bytes: 2844
#memW: 711
#memW_bytes: 2844
duration: 3127

BIN
tools/tests/fib/trace.pb Normal file

Binary file not shown.

6
tools/tests/my.cnf.in Normal file
View File

@ -0,0 +1,6 @@
[client]
user=@TEST_MYSQL_USER@
password=@TEST_MYSQL_PASSWORD@
host=@TEST_MYSQL_HOST@
port=@TEST_MYSQL_PORT@
database=@TEST_MYSQL_DATABASE@

View File

@ -0,0 +1,22 @@
b os_main
b start_trace
q
b os_main
b start_trace
c
c
c
s
q
c
list
symbol-file system.elf
list
q
q
c
bt
x 0x00100048
b partition
c
q

View File

@ -0,0 +1,7 @@
set timeout=0
set default=0
menuentry "CoRedOS" {
multiboot /boot/system.elf
boot
}

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,133 @@
cmos = {
mem_address = 0x5d
ram = {
0x00 = 0x16
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x07
0x07 = 0x01
0x08 = 0x01
0x09 = 0x00
0x0a = 0x26
0x0b = 0x02
0x0c = 0x00
0x0d = 0x80
0x0e = 0x00
0x0f = 0x00
0x10 = 0x00
0x11 = 0x00
0x12 = 0x00
0x13 = 0x00
0x14 = 0x06
0x15 = 0x80
0x16 = 0x02
0x17 = 0x00
0x18 = 0x3c
0x19 = 0x00
0x1a = 0x00
0x1b = 0x00
0x1c = 0x00
0x1d = 0x00
0x1e = 0x00
0x1f = 0x00
0x20 = 0x00
0x21 = 0x00
0x22 = 0x00
0x23 = 0x00
0x24 = 0x00
0x25 = 0x00
0x26 = 0x00
0x27 = 0x00
0x28 = 0x00
0x29 = 0x00
0x2a = 0x00
0x2b = 0x00
0x2c = 0x00
0x2d = 0x00
0x2e = 0x00
0x2f = 0xc4
0x30 = 0x00
0x31 = 0x3c
0x32 = 0x20
0x33 = 0x00
0x34 = 0x00
0x35 = 0x00
0x36 = 0x00
0x37 = 0x20
0x38 = 0x00
0x39 = 0x00
0x3a = 0x00
0x3b = 0x00
0x3c = 0x00
0x3d = 0x03
0x3e = 0x00
0x3f = 0x00
0x40 = 0x00
0x41 = 0x00
0x42 = 0x00
0x43 = 0x00
0x44 = 0x00
0x45 = 0x00
0x46 = 0x00
0x47 = 0x00
0x48 = 0x00
0x49 = 0x00
0x4a = 0x00
0x4b = 0x00
0x4c = 0x00
0x4d = 0x00
0x4e = 0x00
0x4f = 0x00
0x50 = 0x00
0x51 = 0x00
0x52 = 0x00
0x53 = 0x00
0x54 = 0x00
0x55 = 0x00
0x56 = 0x00
0x57 = 0x00
0x58 = 0x00
0x59 = 0x00
0x5a = 0x00
0x5b = 0x00
0x5c = 0x00
0x5d = 0x00
0x5e = 0x00
0x5f = 0x00
0x60 = 0x00
0x61 = 0x00
0x62 = 0x00
0x63 = 0x00
0x64 = 0x00
0x65 = 0x00
0x66 = 0x00
0x67 = 0x00
0x68 = 0x00
0x69 = 0x00
0x6a = 0x00
0x6b = 0x00
0x6c = 0x00
0x6d = 0x00
0x6e = 0x00
0x6f = 0x00
0x70 = 0x00
0x71 = 0x00
0x72 = 0x00
0x73 = 0x00
0x74 = 0x00
0x75 = 0x00
0x76 = 0x00
0x77 = 0x00
0x78 = 0x00
0x79 = 0x00
0x7a = 0x00
0x7b = 0x00
0x7c = 0x00
0x7d = 0x00
0x7e = 0x00
0x7f = 0x00
}
}

View File

@ -0,0 +1,57 @@
# configuration file generated by Bochs
plugin_ctrl: unmapped=1, biosdev=1, speaker=1, extfpuirq=1, gameport=1, pci_ide=0, acpi=0, ioapic=1
config_interface: textconfig
display_library: nogui
memory: host=16, guest=16
romimage: file="BIOS-bochs-latest"
vgaromimage: file="vgabios.bin"
boot: cdrom
floppy_bootsig_check: disabled=0
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-slave: type=cdrom, path="img/micro/qsort/system.iso", status=inserted, biosdetect=auto, model="Generic 1234"
ata1: enabled=0
ata2: enabled=0
ata3: enabled=0
parport1: enabled=0
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=0
vga_update_interval: 300000
vga: extension=vbe
cpu: count=1, ips=5000000, reset_on_triple_fault=1, ignore_bad_msrs=1, msrs="msrs.def"
cpuid: cpuid_limit_winnt=0, mmx=1, sse=sse4_2, xapic=1, sep=1, aes=1, xsave=1, movbe=1, 1g_pages=0, pcid=0 fsgsbase=0, mwait=1, mwait_is_nop=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=946681200
# no cmosimage
ne2k: card=0, enabled=0
ne2k: card=1, enabled=0
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=report
error: action=report
info: action=ignore
debug: action=ignore
pass: action=ignore
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

1154
tools/tests/qsort/state/cpu0 Normal file

File diff suppressed because it is too large Load Diff

144
tools/tests/qsort/state/dma Normal file
View File

@ -0,0 +1,144 @@
dma = {
0 = {
flip_flop = false
status_reg = 0x00
command_reg = 0x00
ctrl_disabled = false
0 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
1 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
2 = {
DRQ = false
DACK = false
mask = false
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
3 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
}
1 = {
flip_flop = false
status_reg = 0x00
command_reg = 0x00
ctrl_disabled = false
0 = {
DRQ = false
DACK = false
mask = false
mode_type = 3
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
1 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
2 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
3 = {
DRQ = false
DACK = false
mask = true
mode_type = 0
address_decrement = 0
autoinit_enable = 0
transfer_type = 0
base_address = 0x0000
current_address = 0x0000
base_count = 0x0000
current_count = 0x0000
page_reg = 0x00
}
}
ext_page = {
0x80 = 0x00
0x81 = 0x00
0x82 = 0x00
0x83 = 0x00
0x84 = 0x00
0x85 = 0x00
0x86 = 0x00
0x87 = 0x00
0x88 = 0x00
0x89 = 0x00
0x8a = 0x00
0x8b = 0x00
0x8c = 0x00
0x8d = 0x00
0x8e = 0x00
0x8f = 0x00
}
}

Binary file not shown.

View File

@ -0,0 +1,87 @@
floppy = {
data_rate = 2
command = {
0 = 0x00
1 = 0x00
2 = 0x00
3 = 0x00
4 = 0x00
5 = 0x00
6 = 0x00
7 = 0x28
8 = 0xe5
9 = 0x03
}
command_index = 0
command_size = 0
command_complete = true
pending_command = 0xfe
multi_track = false
pending_irq = false
reset_sensei = 0
format_count = 229
format_fillbyte = 0x03
result = {
0 = 0x86
1 = 0x4b
2 = 0x56
3 = 0x00
4 = 0x00
5 = 0xfc
6 = 0x10
7 = 0x20
8 = 0x00
9 = 0x00
}
result_index = 0
result_size = 0
DOR = 0x00
TDR = 0x00
TC = true
main_status_reg = 0x00
status_reg0 = 0x00
status_reg1 = 0x00
status_reg2 = 0x00
status_reg3 = 0x00
floppy_buffer_index = 0
lock = false
SRT = 0x00
HUT = 0x00
HLT = 0x00
config = 0x00
pretrk = 0
perp_mode = 0
buffer = floppy.buffer
drive0 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
drive1 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
drive2 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
drive3 = {
cylinder = 0
head = 0
sector = 0
eot = 0
media_present = false
DIR = 0x80
}
}

Binary file not shown.

View File

@ -0,0 +1,8 @@
gameport = {
port = 0xf0
delay_x = 0
delay_y = 0
timer_x = false
timer_y = false
write_usec = 0
}

View File

@ -0,0 +1,53 @@
hard_drive = {
0 = {
drive0 = {
buffer = drive0.buffer
status = {
busy = false
drive_ready = true
write_fault = false
seek_complete = true
drq = false
corrected_data = false
index_pulse = false
index_pulse_count = 9
err = false
}
error_register = 0x00
head_no = 0x00
sector_count = 0x03
sector_no = 0x00
cylinder_no = 0x4000
buffer_size = 0x00000800
buffer_index = 0x00000800
drq_index = 0x00000000
current_command = 0xa0
multiple_sectors = 0x00
lba_mode = 0x00
packet_dma = 0x00000000
control_reset = false
control_disable_irq = false
reset_in_progress = 0x00
features = 0x00
mdma_mode = 0x00
udma_mode = 0x00
hob_feature = 0x00
hob_nsector = 0x03
hob_sector = 0x00
hob_lcyl = 0x00
hob_hcyl = 0x40
num_sectors = 0x00000000
cdrom_locked = false
}
drive_select = 1
}
1 = {
drive_select = 0
}
2 = {
drive_select = 0
}
3 = {
drive_select = 0
}
}

View File

@ -0,0 +1,103 @@
ioapic = {
ioregsel = 0x00000000
intin = 0x00000001
irr = 0x00000001
ioredtbl = {
0x00 = {
lo = 0x00010000
hi = 0x00000000
}
0x01 = {
lo = 0x00010000
hi = 0x00000000
}
0x02 = {
lo = 0x00010000
hi = 0x00000000
}
0x03 = {
lo = 0x00010000
hi = 0x00000000
}
0x04 = {
lo = 0x00010000
hi = 0x00000000
}
0x05 = {
lo = 0x00010000
hi = 0x00000000
}
0x06 = {
lo = 0x00010000
hi = 0x00000000
}
0x07 = {
lo = 0x00010000
hi = 0x00000000
}
0x08 = {
lo = 0x00010000
hi = 0x00000000
}
0x09 = {
lo = 0x00010000
hi = 0x00000000
}
0x0a = {
lo = 0x00010000
hi = 0x00000000
}
0x0b = {
lo = 0x00010000
hi = 0x00000000
}
0x0c = {
lo = 0x00010000
hi = 0x00000000
}
0x0d = {
lo = 0x00010000
hi = 0x00000000
}
0x0e = {
lo = 0x00010000
hi = 0x00000000
}
0x0f = {
lo = 0x00010000
hi = 0x00000000
}
0x10 = {
lo = 0x00010000
hi = 0x00000000
}
0x11 = {
lo = 0x00010000
hi = 0x00000000
}
0x12 = {
lo = 0x00010000
hi = 0x00000000
}
0x13 = {
lo = 0x00010000
hi = 0x00000000
}
0x14 = {
lo = 0x00010000
hi = 0x00000000
}
0x15 = {
lo = 0x00010000
hi = 0x00000000
}
0x16 = {
lo = 0x00010000
hi = 0x00000000
}
0x17 = {
lo = 0x00010000
hi = 0x00000000
}
}
}

View File

@ -0,0 +1,132 @@
keyboard = {
controller = {
tim = false
auxb = false
c_d = false
sysf = false
inpb = false
outb = false
kbd_clock_enabled = true
aux_clock_enabled = false
allow_irq1 = true
allow_irq12 = false
kbd_output_buffer = 0xfa
aux_output_buffer = 0x00
last_comm = 0x60
expecting_port60h = 0
expecting_mouse_parameter = 0
last_mouse_command = 0x56
timer_pending = 0
irq1_requested = false
irq12_requested = false
scancodes_translate = true
expecting_scancodes_set = false
current_scancodes_set = 1
bat_in_progress = false
}
mouse = {
sample_rate = 100
resolution_cpmm = 4
scaling = 1
mode = 10
saved_mode = 139
enable = false
button_status = 224
delayed_dx = 0
delayed_dy = 0
delayed_dz = 0
im_request = 0
im_mode = false
}
kbd_internal_buffer = {
num_elements = 0
buffer = {
0 = 0xfa
1 = 0xfa
2 = 0x00
3 = 0x00
4 = 0x00
5 = 0x00
6 = 0x00
7 = 0x00
8 = 0x00
9 = 0x00
10 = 0x00
11 = 0x00
12 = 0x00
13 = 0x00
14 = 0x00
15 = 0x00
}
head = 2
expecting_typematic = false
expecting_led_write = false
delay = 1
repeat_rate = 11
led_status = 0
scanning_enabled = true
}
mouse_internal_buffer = {
num_elements = 0
buffer = {
0 = 0x00
1 = 0x00
2 = 0x00
3 = 0x00
4 = 0x00
5 = 0x00
6 = 0x00
7 = 0x00
8 = 0x00
9 = 0x00
10 = 0x00
11 = 0x00
12 = 0x00
13 = 0x00
14 = 0x00
15 = 0x00
16 = 0x00
17 = 0x00
18 = 0x00
19 = 0x00
20 = 0x00
21 = 0x00
22 = 0x00
23 = 0x00
24 = 0x00
25 = 0x00
26 = 0x00
27 = 0x00
28 = 0x00
29 = 0x00
30 = 0x00
31 = 0x00
32 = 0x00
33 = 0x00
34 = 0x00
35 = 0x00
36 = 0x00
37 = 0x00
38 = 0x00
39 = 0x00
40 = 0x00
41 = 0x00
42 = 0x00
43 = 0x00
44 = 0x00
45 = 0x00
46 = 0x00
47 = 0x00
}
head = 0
}
controller_Q = {
0 = 0x00
1 = 0x00
2 = 0x00
3 = 0x00
4 = 0x00
}
controller_Qsize = 0
controller_Qsource = 0
}

View File

View File

@ -0,0 +1,24 @@
memory = {
ram = memory.ram
len = 16777216
allocated = 16777216
used_blocks = 5
mapping = {
blk0 = 0
blk1 = 1
blk2 = 4
blk3 = 4294967295
blk4 = 4294967295
blk5 = 4294967295
blk6 = 4294967295
blk7 = 4294967295
blk8 = 4294967295
blk9 = 4294967295
blk10 = 4294967295
blk11 = 4294967295
blk12 = 4294967295
blk13 = 4294967295
blk14 = 3
blk15 = 2
}
}

Binary file not shown.

View File

@ -0,0 +1,110 @@
pc_system = {
enable_a20 = true
a20_mask = 0xffffffffffffffff
currCountdown = 42
currCountdownPeriod = 500
ticksTotal = 80001500
lastTimeUsec = 0
usecSinceLast = 0
HRQ = false
timer = {
0 = {
inUse = true
period = 4294967295
timeToFire = 4294967295
active = true
continuous = true
}
1 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
2 = {
inUse = true
period = 17985
timeToFire = 80015867
active = true
continuous = false
}
3 = {
inUse = true
period = 5000000
timeToFire = 5000000
active = false
continuous = true
}
4 = {
inUse = true
period = 5000000
timeToFire = 85000000
active = true
continuous = true
}
5 = {
inUse = true
period = 1220
timeToFire = 80001220
active = false
continuous = false
}
6 = {
inUse = true
period = 1250
timeToFire = 1250
active = false
continuous = false
}
7 = {
inUse = true
period = 1500000
timeToFire = 81000000
active = true
continuous = true
}
8 = {
inUse = true
period = 500
timeToFire = 80002000
active = true
continuous = true
}
9 = {
inUse = true
period = 1250
timeToFire = 80002500
active = true
continuous = true
}
10 = {
inUse = true
period = 500000
timeToFire = 80177346
active = true
continuous = false
}
11 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
12 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
13 = {
inUse = true
period = 1
timeToFire = 1
active = false
continuous = false
}
}
}

View File

@ -0,0 +1,40 @@
pic = {
master = {
interrupt_offset = 0x08
auto_eoi = 0x00
imr = 0xb8
isr = 0x00
irr = 0x01
read_reg_select = 0
irq = 0x00
lowest_priority = 0x07
INT = true
IRQ_in = 0x01
in_init = false
requires_4 = true
byte_expected = 4
special_mask = false
polled = false
rotate_on_autoeoi = false
edge_level = 0x00
}
slave = {
interrupt_offset = 0x70
auto_eoi = 0x00
imr = 0x8f
isr = 0x00
irr = 0x00
read_reg_select = 0
irq = 0x00
lowest_priority = 0x07
INT = false
IRQ_in = 0x00
in_init = false
requires_4 = true
byte_expected = 4
special_mask = false
polled = false
rotate_on_autoeoi = false
edge_level = 0x00
}
}

View File

@ -0,0 +1,82 @@
pit = {
speaker_data_on = 0x00
refresh_clock_div2 = true
last_usec = 15999576
last_next_event_time = 47244
total_ticks = 1192675
total_usec = 999576
counter = {
0 = {
GATE = true
OUTpin = true
count = 47245
outlatch = 0
inlatch = 0
status_latch = 0
rw_mode = 3
mode = 2
bcd_mode = false
null_count = false
count_LSB_latched = false
count_MSB_latched = false
status_latched = false
count_binary = 47245
triggerGATE = false
write_state = 2
read_state = 2
count_written = true
first_pass = false
state_bit_1 = false
state_bit_2 = false
next_change_time = 47244
}
1 = {
GATE = true
OUTpin = true
count = 46122
outlatch = 0
inlatch = 0
status_latch = 0
rw_mode = 1
mode = 4
bcd_mode = false
null_count = false
count_LSB_latched = false
count_MSB_latched = false
status_latched = false
count_binary = 46122
triggerGATE = false
write_state = 0
read_state = 0
count_written = true
first_pass = false
state_bit_1 = false
state_bit_2 = false
next_change_time = 0
}
2 = {
GATE = false
OUTpin = true
count = 65535
outlatch = 0
inlatch = 65535
status_latch = 0
rw_mode = 3
mode = 0
bcd_mode = false
null_count = false
count_LSB_latched = false
count_MSB_latched = false
status_latched = false
count_binary = 65535
triggerGATE = false
write_state = 2
read_state = 2
count_written = true
first_pass = true
state_bit_1 = false
state_bit_2 = false
next_change_time = 0
}
}
}

View File

@ -0,0 +1,488 @@
serial = {
0 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 115200
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x01
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = true
tsr_empty = true
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = true
dsr = true
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x01
divisor_msb = 0x00
}
1 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 0
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x00
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = false
tsr_empty = false
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = false
dsr = false
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x00
divisor_msb = 0x00
}
2 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 0
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x00
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = false
tsr_empty = false
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = false
dsr = false
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x00
divisor_msb = 0x00
}
3 = {
ls_interrupt = false
ms_interrupt = false
rx_interrupt = false
tx_interrupt = false
fifo_interrupt = false
ls_ipending = false
ms_ipending = false
rx_ipending = false
fifo_ipending = false
rx_fifo_end = 0
tx_fifo_end = 0
baudrate = 0
rx_pollstate = 0
rxbuffer = 0x00
thrbuffer = 0x00
int_enable = {
rxdata_enable = false
txhold_enable = false
rxlstat_enable = false
modstat_enable = false
}
int_ident = {
ipending = false
int_ID = 0x00
}
fifo_cntl = {
enable = false
rxtrigger = 0x00
}
line_cntl = {
wordlen_sel = 0x00
stopbits = false
parity_enable = false
evenparity_sel = false
stick_parity = false
break_cntl = false
dlab = false
}
modem_cntl = {
dtr = false
rts = false
out1 = false
out2 = false
local_loopback = false
}
line_status = {
rxdata_ready = false
overrun_error = false
parity_error = false
framing_error = false
break_int = false
thr_empty = false
tsr_empty = false
fifo_error = false
}
modem_status = {
delta_cts = false
delta_dsr = false
ri_trailedge = false
delta_dcd = false
cts = false
dsr = false
ri = false
dcd = false
}
scratch = 0x00
tsrbuffer = 0x00
rx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
tx_fifo = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
}
divisor_lsb = 0x00
divisor_msb = 0x00
}
detect_mouse = 0
mouse_delayed_dx = 0
mouse_delayed_dy = 0
mouse_delayed_dz = 0
mouse_internal_buffer = {
num_elements = 0
buffer = {
0x00 = 0x00
0x01 = 0x00
0x02 = 0x00
0x03 = 0x00
0x04 = 0x00
0x05 = 0x00
0x06 = 0x00
0x07 = 0x00
0x08 = 0x00
0x09 = 0x00
0x0a = 0x00
0x0b = 0x00
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0x00
0x10 = 0x00
0x11 = 0x00
0x12 = 0x00
0x13 = 0x00
0x14 = 0x00
0x15 = 0x00
0x16 = 0x00
0x17 = 0x00
0x18 = 0x00
0x19 = 0x00
0x1a = 0x00
0x1b = 0x00
0x1c = 0x00
0x1d = 0x00
0x1e = 0x00
0x1f = 0x00
0x20 = 0x00
0x21 = 0x00
0x22 = 0x00
0x23 = 0x00
0x24 = 0x00
0x25 = 0x00
0x26 = 0x00
0x27 = 0x00
0x28 = 0x00
0x29 = 0x00
0x2a = 0x00
0x2b = 0x00
0x2c = 0x00
0x2d = 0x00
0x2e = 0x00
0x2f = 0x00
}
head = 0
}
}

147
tools/tests/qsort/state/vga Normal file
View File

@ -0,0 +1,147 @@
vga = {
misc_output = {
color_emulation = true
enable_ram = true
clock_select = 1
select_high_bank = true
horiz_sync_pol = true
vert_sync_pol = false
}
CRTC = {
address = 0x0f
reg = {
0x00 = 0x5f
0x01 = 0x4f
0x02 = 0x50
0x03 = 0x82
0x04 = 0x55
0x05 = 0x81
0x06 = 0xbf
0x07 = 0x1f
0x08 = 0x00
0x09 = 0x4f
0x0a = 0x0e
0x0b = 0x0f
0x0c = 0x00
0x0d = 0x00
0x0e = 0x00
0x0f = 0xa0
0x10 = 0x9c
0x11 = 0x8e
0x12 = 0x8f
0x13 = 0x28
0x14 = 0x1f
0x15 = 0x96
0x16 = 0xb9
0x17 = 0xa3
0x18 = 0xff
}
write_protect = true
}
attribute_ctrl = {
flip_flop = false
address = 0x00000000
video_enabled = true
palette_reg = {
0x00 = 0x00
0x01 = 0x01
0x02 = 0x02
0x03 = 0x03
0x04 = 0x04
0x05 = 0x05
0x06 = 0x14
0x07 = 0x07
0x08 = 0x38
0x09 = 0x39
0x0a = 0x3a
0x0b = 0x3b
0x0c = 0x3c
0x0d = 0x3d
0x0e = 0x3e
0x0f = 0x3f
}
overscan_color = 0x00
color_plane_enable = 0x0f
horiz_pel_panning = 0x08
color_select = 0x00
mode_ctrl = {
graphics_alpha = false
display_type = false
enable_line_graphics = true
blink_intensity = true
pixel_panning_compat = false
pixel_clock_select = false
internal_palette_size = false
}
}
pel = {
write_data_register = 0x00
write_data_cycle = 0
read_data_register = 0x00
read_data_cycle = 0
dac_state = 0
mask = 0xff
}
pel_data = vga.pel_data
graphics_ctrl = {
index = 5
set_reset = 0
enable_set_reset = 0
color_compare = 0
data_rotate = 0
raster_op = 0
read_map_select = 0
write_mode = 0
read_mode = 0
odd_even = true
chain_odd_even = true
shift_reg = 0
graphics_alpha = false
memory_mapping = 3
color_dont_care = 0x0f
bitmask = 0xff
latch0 = 0x00
latch1 = 0x00
latch2 = 0x00
latch3 = 0x00
}
sequencer = {
index = 3
map_mask = 3
reset1 = true
reset2 = true
reg1 = 0x00
char_map_select = 0
extended_mem = true
odd_even = false
chain_four = false
}
enabled = true
line_offset = 160
line_compare = 1023
vertical_display_end = 399
charmap_address = 0
x_dotclockdiv2 = false
y_doublescan = true
last_bpp = 8
memory = vga.memory
vbe = {
cur_dispi = 0xb0c5
xres = 640
yres = 480
bpp = 8
bank = 0
enabled = false
curindex = 4
visible_screen_size = 0
offset_x = 0
offset_y = 0
virtual_xres = 640
virtual_yres = 480
virtual_start = 0
bpp_multiplier = 1
lfb_enabled = false
get_capabilities = false
dac_8bit = false
}
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,34 @@
virt_timer = {
timer = {
0 = {
inUse = true
period = 2147483647
timeToFire = 2147483647
active = true
continuous = true
}
1 = {
inUse = true
period = 3599
timeToFire = 16003175
active = true
continuous = false
}
}
current_timers_time = 15999576
timers_next_event_time = 3599
last_sequential_time = 0
virtual_next_event_time = 3599
current_virtual_time = 15999576
last_real_time = 1578924768451212
total_real_usec = 0
last_realtime_delta = 0
last_usec = 0
usec_per_second = 1000000
stored_delta = 0
last_system_usec = 0
em_last_realtime = 0
total_ticks = 0
last_realtime_ticks = 0
ticks_per_second = 1000000
}

BIN
tools/tests/qsort/system.elf Executable file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,7 @@
#instructions: 925
#memLocations: 360
#memR: 340
#memR_bytes: 1360
#memW: 292
#memW_bytes: 1168
duration: 925

BIN
tools/tests/qsort/trace.pb Normal file

Binary file not shown.

260
tools/tests/run Executable file
View File

@ -0,0 +1,260 @@
#!/usr/bin/python3
import subprocess
import logging
import tempfile
import os
class SkipTestException(RuntimeError): ...
def arg_string(arg, exception=SkipTestException):
if not arg:
raise exception("no argument %s was given." % name)
return arg
def arg_file(arg, fmt_str="%s", exception=SkipTestException):
if not arg:
raise exception("no argument %s was given." % name)
fn = fmt_str % arg
if not os.path.exists(fn):
raise exception("no file %s was found (dervied from %s)." % (fn, arg))
return fn
def check_call(cmd, **kwargs):
logging.debug("Executing: '%s'", "' '".join(cmd))
subprocess.check_call(cmd, **kwargs)
def check_output(cmd):
logging.debug("Executing: '%s'", "' '".join(cmd))
output = subprocess.check_output(cmd).decode()
return output
def dump_trace():
"""This calls dump-trace --stats and compares the result to a pre-recorderd output"""
global args
dump_trace = arg_string(args.dump_trace)
trace_pb = arg_file(args.benchmark, "%s/trace.pb")
trace_pb_stats = arg_file(args.benchmark, "%s/trace.dump-trace-stats")
with open(trace_pb_stats) as fd:
trace_pb_stats = fd.read()
cmd = [dump_trace, '--stats', trace_pb]
logging.info("Executing: '%s'", "' '".join(cmd))
stats = subprocess.check_output(cmd).decode()
if stats != trace_pb_stats:
logging.error("Mismatch with the prerecorded trace stats file:")
print(trace_pb_stats, stats)
return -1
# Database related
def mysql(statement):
global args
my_cnf = arg_file(args.my_cnf)
cmd = ["mysql", "--defaults-file="+my_cnf, "-e", statement]
output = check_output(cmd)
header = None
for line in output.strip().split("\n"):
fields = line.split("\t")
if not header:
header = fields
else:
yield dict(zip(header,fields))
def import_trace():
global args
import_trace = arg_string(args.import_trace)
trace_pb = arg_file(args.benchmark, "%s/trace.pb")
my_cnf = arg_file(args.my_cnf)
trace_pb_stats = arg_file(args.benchmark, "%s/trace.dump-trace-stats")
with open(trace_pb_stats) as fd:
trace_pb_stats = [x.split(":") for x in fd.read().strip().split("\n")]
trace_pb_stats = {x[0].strip(): x[1].strip() for x in trace_pb_stats}
list(mysql("DROP TABLE IF EXISTS variant"))
list(mysql("DROP TABLE IF EXISTS trace"))
for location, extra_argv in [
("memory", ["-i", "mem"]),
("register", ["-i", "regs", "--flags"])]:
cmd = [import_trace,
"--database-option-file", my_cnf,
"-t", trace_pb,
"-e", arg_file(args.benchmark, "%s/system.elf"),
"-v", args.benchmark,
"-b", location,
] + extra_argv
check_call(cmd)
result = mysql(f"""SELECT v.id as variant_id,
min(instr1) as min_instr,
max(instr2) as max_instr,
min(time1) as min_time,
max(time2) as max_time
FROM trace t
JOIN variant v ON v.id = t.variant_id
WHERE v.variant = "{args.benchmark}" and v.benchmark = "{location}"
""")
trace_stats = next(result)
# Check if the number of imported instructions is equal to the result
# of dump-trace --stats
trace_instrs = int(trace_stats["max_instr"]) - int(trace_stats['min_instr']) + 1
stats_instrs = int(trace_pb_stats["#instructions"])
assert trace_instrs == stats_instrs,\
f"Number of instructions differs for {args.benchmark}/{location}"
trace_time = int(trace_stats["max_time"]) - int(trace_stats['min_time']) + 1
stats_time = int(trace_pb_stats["duration"])
assert trace_time == stats_time,\
f"Lenght of imported trace differs for {args.benchmark}/{location}"
# Infer the number of fault locations
result = mysql(f"""SELECT DISTINCT data_address, width
FROM trace t
JOIN variant v ON v.id = t.variant_id
WHERE v.variant = "{args.benchmark}" and v.benchmark = "{location}"
""")
bits = set()
for r in result:
for offset in range(0, int(r['width'])):
for bit in range(0, 8):
bits.add((int(r['data_address']) + offset, bit))
logging.info(f"{len(bits)} fault locations ({location})")
if location == "memory":
assert len(bits) == int(trace_pb_stats["#memLocations"]) * 8,\
"Number of fault locations (memory) is not equal to dump-trace"
result = mysql(f"""SELECT sum((t.time2 - t.time1 + 1) * width * 8) as fault_space_size
FROM trace t
JOIN variant v ON v.id = t.variant_id
WHERE v.variant = "{args.benchmark}" and v.benchmark = "{location}"
""")
fault_space_size = int(next(result)['fault_space_size'])
assert fault_space_size == len(bits) * trace_time,\
f"Equivalence Sets do not add up to a square fault space (location={location})"
def basic_pruner():
# Import Trace has alrady happened
prune_trace = arg_string(args.prune_trace)
my_cnf = arg_file(args.my_cnf)
list(mysql("DROP TABLE IF EXISTS fspgroup"))
list(mysql("DROP TABLE IF EXISTS fsppilot"))
for variant in mysql("select * from variant"):
cmd = [prune_trace, "--database-option-file", my_cnf,
"-v", variant['variant'], "-b", variant['benchmark'],
"-p", "BasicPruner"
]
check_output(cmd)
# Is every trace event covered by a fsppilot?
sql = f"""SELECT p.id is null as no_pilot, count(*) as intervals, sum((t.time2 - t.time1 + 1) * t.width * 8) as area,
count(distinct p.id) as pilots
FROM trace t
LEFT OUTER JOIN fspgroup g
on t.variant_id = g.variant_id
and t.instr2 = g.instr2
and t.data_address = g.data_address
LEFT OUTER JOIN fsppilot p
on t.variant_id = p.variant_id
and g.fspmethod_id = p.fspmethod_id
and g.pilot_id = p.id
WHERE t.variant_id = {variant['id']}
GROUP by p.id is null
"""
for result in mysql(sql):
if result['no_pilot'] != '0':
assert False, "Found Equivalence intervals without pilots"
else:
logging.info(f"{variant['benchmark']}: {result['pilots']} fsppilots, {result['intervals']} intervals, {result['area']}")
# Check if pruning results match the injection table
sql = f"""SELECT t.instr2, t.data_address, i1.bitoffset, i1.resulttype as `should`, i2.resulttype as `is`
FROM trace t
JOIN injection i1 on t.instr2 = i1.instr2 and t.data_address = i1.data_address
JOIN fspgroup g
on t.variant_id = g.variant_id
and t.instr2 = g.instr2
and t.data_address = g.data_address
JOIN fsppilot p
on t.variant_id = p.variant_id
and g.fspmethod_id = p.fspmethod_id
and g.pilot_id = p.id
JOIN injection i2
on p.instr2 = i2.instr2 and p.data_address = i2.data_address
WHERE t.variant_id = {variant['id']} and i1.bitoffset = i2.bitoffset and i1.resulttype != i2.resulttype"""
differ = False
for row in mysql(sql):
logger.info("mismatch: %s", row.values)
differ = True
assert not differ, "There was a result mismatch for the basic pruner"
def import_injection():
my_cnf = arg_file(args.my_cnf)
injection = arg_file(args.benchmark, "%s/injection.sql")
logging.info("Import injection results")
with open(injection, "rb", 0) as fd:
check_call(["mysql", "--defaults-file=" + my_cnf], stdin=fd)
if __name__ == "__main__":
import argparse
import sys
tests = {
'dump-trace': [dump_trace],
'basic-pruner': [import_trace, import_injection, basic_pruner],
}
parser = argparse.ArgumentParser("FAIL* Test Driver")
parser.add_argument("--dump-trace", help="dump-trace binary")
parser.add_argument("--import-trace", help="import-trace binary")
parser.add_argument("--prune-trace", help="prune-trace binary")
parser.add_argument("--my-cnf", help="MYSQL configuration file")
parser.add_argument("-v", "--verbose", action="store_true", default=False,
help="be verbose")
parser.add_argument("test_mode", help="Which test to execute?",
choices=tests.keys())
parser.add_argument("benchmark", help="Benchmark")
global args
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.DEBUG)
else:
logging.basicConfig(level=logging.INFO)
# Dispatch to a given test mode
try:
for func in tests[args.test_mode]:
func()
except SkipTestException as e:
print("Skipping Test, because:", e)
sys.exit(127)