Use magic string to exit on sonata-simulator. This means we no longer need the brittle and broken model output files and can simplify the run-sonata-sim script considerably. The testing-model-output xmake option is also redundant.
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cfc36a8..3530074 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml
@@ -27,7 +27,7 @@ build-flags: --debug-loader=n --debug-scheduler=n --debug-allocator=n -m release --stack-usage-check-allocator=y --stack-usage-check-scheduler=y - board: sonata-simulator build-type: release - build-flags: --debug-loader=n --debug-scheduler=n --debug-allocator=n -m release --stack-usage-check-allocator=y --stack-usage-check-scheduler=y --testing-model-output=y + build-flags: --debug-loader=n --debug-scheduler=n --debug-allocator=n -m release --stack-usage-check-allocator=y --stack-usage-check-scheduler=y sonata: true fail-fast: false runs-on: ubuntu-latest
diff --git a/scripts/model_output/sonata-simulator/examples/audit.txt b/scripts/model_output/sonata-simulator/examples/audit.txt deleted file mode 100644 index f2abe0c..0000000 --- a/scripts/model_output/sonata-simulator/examples/audit.txt +++ /dev/null
@@ -1,3 +0,0 @@ -[35mProducer[0m: Encrypting message 'Hello, World!' -[35mEntry compartment[0m: Received encrypted message: 'Ifmmp-!Xpsme"' (13 bytes) -[35mConsumer[0m: Decrypted message: 'Hello, World!'
diff --git a/scripts/model_output/sonata-simulator/examples/error_handling.txt b/scripts/model_output/sonata-simulator/examples/error_handling.txt deleted file mode 100644 index ed3cf77..0000000 --- a/scripts/model_output/sonata-simulator/examples/error_handling.txt +++ /dev/null
@@ -1,5 +0,0 @@ -[35mUART compartment[0m: Message provided by caller: hello -[35mUART compartment[0m: Detected BoundsViolation(0x1) trying to write to UART. Register CS0(0x8) contained invalid value: 0x101b10 (v:1 0x101b0b-0x101b10 l:0x5 o:0x0 p: - RWcgml -- ---) -[35mUART compartment[0m: Message provided by caller: -[35mUART compartment[0m: Detected PermitLoadViolation(0x12) trying to write to UART. Register CS0(0x8) contained invalid value: 0x101b0b (v:1 0x101b0b-0x101b10 l:0x5 o:0x0 p: - -W---- -- ---) -[35mUART compartment[0m: Message provided by caller: Non-malicious string
diff --git a/scripts/model_output/sonata-simulator/examples/hello_compartment.txt b/scripts/model_output/sonata-simulator/examples/hello_compartment.txt deleted file mode 100644 index 31e3a2a..0000000 --- a/scripts/model_output/sonata-simulator/examples/hello_compartment.txt +++ /dev/null
@@ -1,2 +0,0 @@ -[35mUART compartment[0m: Hello world -[35mUART compartment[0m: Hello from the stack
diff --git a/scripts/model_output/sonata-simulator/examples/hello_safe_compartment.txt b/scripts/model_output/sonata-simulator/examples/hello_safe_compartment.txt deleted file mode 100644 index 0ec9819..0000000 --- a/scripts/model_output/sonata-simulator/examples/hello_safe_compartment.txt +++ /dev/null Binary files differ
diff --git a/scripts/model_output/sonata-simulator/examples/hello_world.txt b/scripts/model_output/sonata-simulator/examples/hello_world.txt deleted file mode 100644 index bcb68d3..0000000 --- a/scripts/model_output/sonata-simulator/examples/hello_world.txt +++ /dev/null
@@ -1 +0,0 @@ -[35mHello world compartment[0m: Hello world
diff --git a/scripts/model_output/sonata-simulator/examples/javascript.txt b/scripts/model_output/sonata-simulator/examples/javascript.txt deleted file mode 100644 index 6fc8329..0000000 --- a/scripts/model_output/sonata-simulator/examples/javascript.txt +++ /dev/null
@@ -1,10 +0,0 @@ -Hello, World! -array[0] = 2 -array[1] = 4 -array[2] = 6 -array[3] = 8 -array[4] = 10 -[35mJavaScript hello compartment[0m: Microvium is using 0x1a6 bytes of memory, including 0x60 bytes of heap -[35mJavaScript hello compartment[0m: Running GC -[35mJavaScript hello compartment[0m: Microvium is using 0x86 bytes of memory, including 0x14 bytes of heap -[35mJavaScript hello compartment[0m: Peak heap used: 0x60 bytes, peak stack used: 0x32 bytes
diff --git a/scripts/model_output/sonata-simulator/examples/memory_safety.txt b/scripts/model_output/sonata-simulator/examples/memory_safety.txt deleted file mode 100644 index 4ebed1f..0000000 --- a/scripts/model_output/sonata-simulator/examples/memory_safety.txt +++ /dev/null
@@ -1,17 +0,0 @@ -[35mMemory safety compartment[0m: Demonstrate memory safety -[35mMemory safety compartment[0m: Trigger stack linear overflow -[35mMemory safety compartment[0m: Detected error in instruction 0x107cac (v:0 0x107820-0x108820 l:0x1000 o:0x0 p: G R-cgm- X- ---) -[35mMemory safety compartment[0m: Detected BoundsViolation(0x1): Register CA1(0xb) contained invalid value: 0x101ad0 (v:1 0x101ad0-0x101b10 l:0x40 o:0x0 p: - RWcgml -- ---) -[35mMemory safety compartment[0m: Trigger heap linear overflow -[35mMemory safety compartment[0m: Detected error in instruction 0x107ab2 (v:0 0x107820-0x108820 l:0x1000 o:0x0 p: G R-cgm- X- ---) -[35mMemory safety compartment[0m: Detected BoundsViolation(0x1): Register CA0(0xa) contained invalid value: 0x109910 (v:1 0x109910-0x109a10 l:0x100 o:0x0 p: G RWcgm- -- ---) -[35mMemory safety compartment[0m: Trigger heap nonlinear overflow -[35mMemory safety compartment[0m: Detected error in instruction 0x107b0c (v:0 0x107820-0x108820 l:0x1000 o:0x0 p: G R-cgm- X- ---) -[35mMemory safety compartment[0m: Detected BoundsViolation(0x1): Register CA0(0xa) contained invalid value: 0x109a18 (v:1 0x109a18-0x109b18 l:0x100 o:0x0 p: G RWcgm- -- ---) -[35mMemory safety compartment[0m: Trigger heap use after free -[35mMemory safety compartment[0m: Detected error in instruction 0x107a58 (v:0 0x107820-0x108820 l:0x1000 o:0x0 p: G R-cgm- X- ---) -[35mMemory safety compartment[0m: Detected TagViolation(0x2): Register CA0(0xa) contained invalid value: 0x109b20 (v:0 0x109b20-0x109c20 l:0x100 o:0x0 p: G RWcgm- -- ---) -[35mMemory safety compartment[0m: Trigger storing a stack pointer 0x101ad0 (v:1 0x101ad0-0x101ae0 l:0x10 o:0x0 p: - RWcgml -- ---) into global -[35mMemory safety compartment[0m: tmp: 0x101ad0 (v:0 0x101ad0-0x101ae0 l:0x10 o:0x0 p: - RWcgml -- ---) -[35mMemory safety compartment[0m: Detected error in instruction 0x107a28 (v:0 0x107820-0x108820 l:0x1000 o:0x0 p: G R-cgm- X- ---) -[35mMemory safety compartment[0m: Detected TagViolation(0x2): Register CS0(0x8) contained invalid value: 0x101ad0 (v:0 0x101ad0-0x101ae0 l:0x10 o:0x0 p: - RWcgml -- ---)
diff --git a/scripts/model_output/sonata-simulator/examples/producer-consumer.txt b/scripts/model_output/sonata-simulator/examples/producer-consumer.txt deleted file mode 100644 index 7a77111..0000000 --- a/scripts/model_output/sonata-simulator/examples/producer-consumer.txt +++ /dev/null
@@ -1,203 +0,0 @@ -[35mConsumer[0m: Queue set to 0x10a720 (v:1 0x10a720-0x10a778 l:0x58 o:0xb p: G RWcgm- -- ---) -[35mProducer[0m: Starting producer loop -[35mConsumer[0m: Waiting for messages -[35mConsumer[0m: Read 1 from queue -[35mConsumer[0m: Read 2 from queue -[35mConsumer[0m: Read 3 from queue -[35mConsumer[0m: Read 4 from queue -[35mConsumer[0m: Read 5 from queue -[35mConsumer[0m: Read 6 from queue -[35mConsumer[0m: Read 7 from queue -[35mConsumer[0m: Read 8 from queue -[35mConsumer[0m: Read 9 from queue -[35mConsumer[0m: Read 10 from queue -[35mConsumer[0m: Read 11 from queue -[35mConsumer[0m: Read 12 from queue -[35mConsumer[0m: Read 13 from queue -[35mConsumer[0m: Read 14 from queue -[35mConsumer[0m: Read 15 from queue -[35mConsumer[0m: Read 16 from queue -[35mConsumer[0m: Read 17 from queue -[35mConsumer[0m: Read 18 from queue -[35mConsumer[0m: Read 19 from queue -[35mConsumer[0m: Read 20 from queue -[35mConsumer[0m: Read 21 from queue -[35mConsumer[0m: Read 22 from queue -[35mConsumer[0m: Read 23 from queue -[35mConsumer[0m: Read 24 from queue -[35mConsumer[0m: Read 25 from queue -[35mConsumer[0m: Read 26 from queue -[35mConsumer[0m: Read 27 from queue -[35mConsumer[0m: Read 28 from queue -[35mConsumer[0m: Read 29 from queue -[35mConsumer[0m: Read 30 from queue -[35mConsumer[0m: Read 31 from queue -[35mConsumer[0m: Read 32 from queue -[35mConsumer[0m: Read 33 from queue -[35mConsumer[0m: Read 34 from queue -[35mConsumer[0m: Read 35 from queue -[35mConsumer[0m: Read 36 from queue -[35mConsumer[0m: Read 37 from queue -[35mConsumer[0m: Read 38 from queue -[35mConsumer[0m: Read 39 from queue -[35mConsumer[0m: Read 40 from queue -[35mConsumer[0m: Read 41 from queue -[35mConsumer[0m: Read 42 from queue -[35mConsumer[0m: Read 43 from queue -[35mConsumer[0m: Read 44 from queue -[35mConsumer[0m: Read 45 from queue -[35mConsumer[0m: Read 46 from queue -[35mConsumer[0m: Read 47 from queue -[35mConsumer[0m: Read 48 from queue -[35mConsumer[0m: Read 49 from queue -[35mConsumer[0m: Read 50 from queue -[35mConsumer[0m: Read 51 from queue -[35mConsumer[0m: Read 52 from queue -[35mConsumer[0m: Read 53 from queue -[35mConsumer[0m: Read 54 from queue -[35mConsumer[0m: Read 55 from queue -[35mConsumer[0m: Read 56 from queue -[35mConsumer[0m: Read 57 from queue -[35mConsumer[0m: Read 58 from queue -[35mConsumer[0m: Read 59 from queue -[35mConsumer[0m: Read 60 from queue -[35mConsumer[0m: Read 61 from queue -[35mConsumer[0m: Read 62 from queue -[35mConsumer[0m: Read 63 from queue -[35mConsumer[0m: Read 64 from queue -[35mConsumer[0m: Read 65 from queue -[35mConsumer[0m: Read 66 from queue -[35mConsumer[0m: Read 67 from queue -[35mConsumer[0m: Read 68 from queue -[35mConsumer[0m: Read 69 from queue -[35mConsumer[0m: Read 70 from queue -[35mConsumer[0m: Read 71 from queue -[35mConsumer[0m: Read 72 from queue -[35mConsumer[0m: Read 73 from queue -[35mConsumer[0m: Read 74 from queue -[35mConsumer[0m: Read 75 from queue -[35mConsumer[0m: Read 76 from queue -[35mConsumer[0m: Read 77 from queue -[35mConsumer[0m: Read 78 from queue -[35mConsumer[0m: Read 79 from queue -[35mConsumer[0m: Read 80 from queue -[35mConsumer[0m: Read 81 from queue -[35mConsumer[0m: Read 82 from queue -[35mConsumer[0m: Read 83 from queue -[35mConsumer[0m: Read 84 from queue -[35mConsumer[0m: Read 85 from queue -[35mConsumer[0m: Read 86 from queue -[35mConsumer[0m: Read 87 from queue -[35mConsumer[0m: Read 88 from queue -[35mConsumer[0m: Read 89 from queue -[35mConsumer[0m: Read 90 from queue -[35mConsumer[0m: Read 91 from queue -[35mConsumer[0m: Read 92 from queue -[35mConsumer[0m: Read 93 from queue -[35mConsumer[0m: Read 94 from queue -[35mConsumer[0m: Read 95 from queue -[35mConsumer[0m: Read 96 from queue -[35mConsumer[0m: Read 97 from queue -[35mConsumer[0m: Read 98 from queue -[35mConsumer[0m: Read 99 from queue -[35mConsumer[0m: Read 100 from queue -[35mConsumer[0m: Read 101 from queue -[35mConsumer[0m: Read 102 from queue -[35mConsumer[0m: Read 103 from queue -[35mConsumer[0m: Read 104 from queue -[35mConsumer[0m: Read 105 from queue -[35mConsumer[0m: Read 106 from queue -[35mConsumer[0m: Read 107 from queue -[35mConsumer[0m: Read 108 from queue -[35mConsumer[0m: Read 109 from queue -[35mConsumer[0m: Read 110 from queue -[35mConsumer[0m: Read 111 from queue -[35mConsumer[0m: Read 112 from queue -[35mConsumer[0m: Read 113 from queue -[35mConsumer[0m: Read 114 from queue -[35mConsumer[0m: Read 115 from queue -[35mConsumer[0m: Read 116 from queue -[35mConsumer[0m: Read 117 from queue -[35mConsumer[0m: Read 118 from queue -[35mConsumer[0m: Read 119 from queue -[35mConsumer[0m: Read 120 from queue -[35mConsumer[0m: Read 121 from queue -[35mConsumer[0m: Read 122 from queue -[35mConsumer[0m: Read 123 from queue -[35mConsumer[0m: Read 124 from queue -[35mConsumer[0m: Read 125 from queue -[35mConsumer[0m: Read 126 from queue -[35mConsumer[0m: Read 127 from queue -[35mConsumer[0m: Read 128 from queue -[35mConsumer[0m: Read 129 from queue -[35mConsumer[0m: Read 130 from queue -[35mConsumer[0m: Read 131 from queue -[35mConsumer[0m: Read 132 from queue -[35mConsumer[0m: Read 133 from queue -[35mConsumer[0m: Read 134 from queue -[35mConsumer[0m: Read 135 from queue -[35mConsumer[0m: Read 136 from queue -[35mConsumer[0m: Read 137 from queue -[35mConsumer[0m: Read 138 from queue -[35mConsumer[0m: Read 139 from queue -[35mConsumer[0m: Read 140 from queue -[35mConsumer[0m: Read 141 from queue -[35mConsumer[0m: Read 142 from queue -[35mConsumer[0m: Read 143 from queue -[35mConsumer[0m: Read 144 from queue -[35mConsumer[0m: Read 145 from queue -[35mConsumer[0m: Read 146 from queue -[35mConsumer[0m: Read 147 from queue -[35mConsumer[0m: Read 148 from queue -[35mConsumer[0m: Read 149 from queue -[35mConsumer[0m: Read 150 from queue -[35mConsumer[0m: Read 151 from queue -[35mConsumer[0m: Read 152 from queue -[35mConsumer[0m: Read 153 from queue -[35mConsumer[0m: Read 154 from queue -[35mConsumer[0m: Read 155 from queue -[35mConsumer[0m: Read 156 from queue -[35mConsumer[0m: Read 157 from queue -[35mConsumer[0m: Read 158 from queue -[35mConsumer[0m: Read 159 from queue -[35mConsumer[0m: Read 160 from queue -[35mConsumer[0m: Read 161 from queue -[35mConsumer[0m: Read 162 from queue -[35mConsumer[0m: Read 163 from queue -[35mConsumer[0m: Read 164 from queue -[35mConsumer[0m: Read 165 from queue -[35mConsumer[0m: Read 166 from queue -[35mConsumer[0m: Read 167 from queue -[35mConsumer[0m: Read 168 from queue -[35mConsumer[0m: Read 169 from queue -[35mConsumer[0m: Read 170 from queue -[35mConsumer[0m: Read 171 from queue -[35mConsumer[0m: Read 172 from queue -[35mConsumer[0m: Read 173 from queue -[35mConsumer[0m: Read 174 from queue -[35mConsumer[0m: Read 175 from queue -[35mConsumer[0m: Read 176 from queue -[35mConsumer[0m: Read 177 from queue -[35mConsumer[0m: Read 178 from queue -[35mConsumer[0m: Read 179 from queue -[35mConsumer[0m: Read 180 from queue -[35mConsumer[0m: Read 181 from queue -[35mConsumer[0m: Read 182 from queue -[35mProducer[0m: Producer sent all messages to consumer -[35mConsumer[0m: Read 183 from queue -[35mConsumer[0m: Read 184 from queue -[35mConsumer[0m: Read 185 from queue -[35mConsumer[0m: Read 186 from queue -[35mConsumer[0m: Read 187 from queue -[35mConsumer[0m: Read 188 from queue -[35mConsumer[0m: Read 189 from queue -[35mConsumer[0m: Read 190 from queue -[35mConsumer[0m: Read 191 from queue -[35mConsumer[0m: Read 192 from queue -[35mConsumer[0m: Read 193 from queue -[35mConsumer[0m: Read 194 from queue -[35mConsumer[0m: Read 195 from queue -[35mConsumer[0m: Read 196 from queue -[35mConsumer[0m: Read 197 from queue -[35mConsumer[0m: Read 198 from queue -[35mConsumer[0m: Read 199 from queue
diff --git a/scripts/model_output/sonata-simulator/examples/sealing.txt b/scripts/model_output/sonata-simulator/examples/sealing.txt deleted file mode 100644 index f6d7fd9..0000000 --- a/scripts/model_output/sonata-simulator/examples/sealing.txt +++ /dev/null
@@ -1,5 +0,0 @@ -[35mIdentifier service[0m: Allocated identifier, sealed capability: 0x109410 (v:1 0x109410-0x109420 l:0x10 o:0xb p: G RWcgm- -- ---) -unsealed capability: 0x109418 (v:1 0x109418-0x109420 l:0x8 o:0x0 p: G RWcgm- -- ---) -[35mCaller compartment[0m: Allocated identifier to hold the value 42: 0x109410 (v:1 0x109410-0x109420 l:0x10 o:0xb p: G RWcgm- -- ---) -[35mCaller compartment[0m: Value is 42 -[35mCaller compartment[0m: Dangling pointer: 0x109410 (v:0 0x109410-0x109420 l:0x10 o:0xb p: G RWcgm- -- ---)
diff --git a/scripts/model_output/sonata-simulator/examples/temporal_safety.txt b/scripts/model_output/sonata-simulator/examples/temporal_safety.txt deleted file mode 100644 index 37f990e..0000000 --- a/scripts/model_output/sonata-simulator/examples/temporal_safety.txt +++ /dev/null
@@ -1,52 +0,0 @@ -[35mAllocating compartment[0m: ----- Simple Case ----- -[35mAllocating compartment[0m: Allocated: 0x109910 (v:1 0x109910-0x109940 l:0x30 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Use after free: 0x109910 (v:0 0x109910-0x109940 l:0x30 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: ----- Sub object ----- -[35mAllocating compartment[0m: Allocated : 0x109948 (v:1 0x109948-0x1099b0 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x109961 (v:1 0x109961-0x109993 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 3984 -[35mAllocating compartment[0m: After free of sub object -[35mAllocating compartment[0m: Allocated : 0x109948 (v:1 0x109948-0x1099b0 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x109961 (v:1 0x109961-0x109993 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 3984 -[35mAllocating compartment[0m: After free of allocation -[35mAllocating compartment[0m: Allocated : 0x109948 (v:0 0x109948-0x1099b0 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x109961 (v:0 0x109961-0x109993 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 4096 -[35mAllocating compartment[0m: ----- Sub object with a claim ----- -[35mAllocating compartment[0m: Allocated : 0x1099b8 (v:1 0x1099b8-0x109a20 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x1099d1 (v:1 0x1099d1-0x109a03 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 3984 -[35mAllocating compartment[0m: heap quota after claim: 3968 -[35mAllocating compartment[0m: After free of allocation -[35mAllocating compartment[0m: Allocated : 0x1099b8 (v:1 0x1099b8-0x109a20 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x1099d1 (v:1 0x1099d1-0x109a03 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 3968 -[35mAllocating compartment[0m: After free of sub object -[35mAllocating compartment[0m: Allocated : 0x1099b8 (v:0 0x1099b8-0x109a20 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x1099d1 (v:0 0x1099d1-0x109a03 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 4096 -[35mAllocating compartment[0m: ----- Sub object with a fast claim ----- -[35mAllocating compartment[0m: Allocated : 0x109a38 (v:1 0x109a38-0x109aa0 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x109a51 (v:1 0x109a51-0x109a83 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 3984 -[35mAllocating compartment[0m: After free -[35mAllocating compartment[0m: Allocated : 0x109a38 (v:0 0x109a38-0x109aa0 l:0x68 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: Sub Object: 0x109a51 (v:0 0x109a51-0x109a83 l:0x32 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 4096 -[35mAllocating compartment[0m: ----- Claim in another compartment ----- -[35mAllocating compartment[0m: Allocated : 0x109aa8 (v:1 0x109aa8-0x109ab8 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 4072 -[35mClaimant compartment[0m: Initial quota: 4096 -[35mClaimant compartment[0m: Make Claim : 0x109aa8 (v:1 0x109aa8-0x109ab8 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mClaimant compartment[0m: heap quota: 4056 -[35mAllocating compartment[0m: After free: 0x109aa8 (v:1 0x109aa8-0x109ab8 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: heap quota: 4096 -[35mClaimant compartment[0m: Show Claim : 0x109aa8 (v:1 0x109aa8-0x109ab8 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mClaimant compartment[0m: Initial quota: 4056 -[35mClaimant compartment[0m: Make Claim : 0x109ad0 (v:1 0x109ad0-0x109ae0 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mClaimant compartment[0m: heap quota: 4056 -[35mAllocating compartment[0m: After make claim -[35mAllocating compartment[0m: x: 0x109aa8 (v:0 0x109aa8-0x109ab8 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mAllocating compartment[0m: y: 0x109ad0 (v:1 0x109ad0-0x109ae0 l:0x10 o:0x0 p: G RWcgm- -- ---) -[35mClaimant compartment[0m: Show Claim : 0x109ad0 (v:1 0x109ad0-0x109ae0 l:0x10 o:0x0 p: G RWcgm- -- ---)
diff --git a/scripts/run-sonata-sim.sh b/scripts/run-sonata-sim.sh index 1b4c1a3..8602bb1 100755 --- a/scripts/run-sonata-sim.sh +++ b/scripts/run-sonata-sim.sh
@@ -25,27 +25,14 @@ # Remove old uart log rm -f "${SONATA_SIMULATOR_UART_LOG}" -# If a second argument is provided, check content of UART log. -if [ -n "$2" ] ; then - # Run the simulator in the background. - ${SONATA_SIMULATOR} -E "${SONATA_SIMULATOR_BOOT_STUB}" -E "$1" & - LOOP_TRACKER=0 - while (( LOOP_TRACKER <= 60 )) - do - sleep 1s - # Returns 0 if found and 1 if not. - MATCH_FOUND=$(grep -q -F -f "$2" "${SONATA_SIMULATOR_UART_LOG}"; echo $?) - if (( MATCH_FOUND == 0 )) ; then - # Match was found so exit with success - pkill -P $$ - exit 0 - fi - LOOP_TRACKER=$((LOOP_TRACKER+1)) - done - # Timeout was hit so no success. - pkill -P $$ +if ! ${SONATA_SIMULATOR} -E "${SONATA_SIMULATOR_BOOT_STUB}" -E "$1"; then + echo "Simulator exited with failure! UART output:" + cat "${SONATA_SIMULATOR_UART_LOG}" exit 4 -else - # If there is no second argument, run simulator in foreground. - ${SONATA_SIMULATOR} -E "${SONATA_SIMULATOR_BOOT_STUB}" -E "$1" +fi + +# Check to see if the output indicates failure +if grep -i failure "${SONATA_SIMULATOR_UART_LOG}"; then + echo "Log output contained 'failure'" + exit 5 fi
diff --git a/sdk/include/platform/sunburst/platform-simulation_exit.hh b/sdk/include/platform/sunburst/platform-simulation_exit.hh new file mode 100644 index 0000000..a158585 --- /dev/null +++ b/sdk/include/platform/sunburst/platform-simulation_exit.hh
@@ -0,0 +1,30 @@ +// Copyright Microsoft and CHERIoT Contributors. +// SPDX-License-Identifier: MIT + +#pragma once + +#ifdef SIMULATION +# include <stdint.h> +# include <platform-uart.hh> +# include <string_view> + +static void platform_simulation_exit(uint32_t code) +{ + auto uart = +# if DEVICE_EXISTS(uart0) + MMIO_CAPABILITY(Uart, uart0); +# elif DEVICE_EXISTS(uart) + MMIO_CAPABILITY(Uart, uart); +# else +# error No UART found in platform_simulation_exit +# endif + // Writing the following magic string to the UART will cause the sonata + // simulator to exit. + const char *magicString = + "Safe to exit simulator.\xd8\xaf\xfb\xa0\xc7\xe1\xa9\xd7"; + while (char ch = *magicString++) + { + uart->blocking_write(ch); + } +} +#endif
diff --git a/sdk/xmake.lua b/sdk/xmake.lua index 9e8002b..d4e2411 100644 --- a/sdk/xmake.lua +++ b/sdk/xmake.lua
@@ -423,16 +423,6 @@ firmware = path.filename(firmware) local run = function(simulator) local simargs = { firmware } - if get_config("testing-model-output") then - modeldir = path.join(scriptdir, - "..", - "scripts", - "model_output", - path.basename(target:values("board")), - "examples") - local modelout = path.join(modeldir, firmware .. ".txt") - simargs[#simargs+1] = modelout - end os.execv(simulator, simargs, { curdir = directory }) end -- Try executing the simulator from the sdk directory, if it's there.