diff --git a/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb b/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb
index 916a27c..6956ab1 100644
--- a/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb
+++ b/.prebuilt_info/prebuilt_info_pvmfw_pvmfw_img.asciipb
@@ -1,6 +1,6 @@
 drops {
   android_build_drop {
-    build_id: "8745290"
+    build_id: "8819384"
     target: "u-boot_pvmfw"
     source_file: "pvmfw.img"
   }
diff --git a/compos/benchmark/Android.bp b/compos/benchmark/Android.bp
new file mode 100644
index 0000000..10f8015
--- /dev/null
+++ b/compos/benchmark/Android.bp
@@ -0,0 +1,19 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_test {
+    name: "ComposBenchmarkApp",
+    test_suites: [
+        "general-tests",
+    ],
+    srcs: ["src/java/**/*.java"],
+    static_libs: [
+        "androidx.test.runner",
+        "androidx.test.ext.junit",
+        "truth-prebuilt",
+    ],
+    platform_apis: true,
+    use_embedded_native_libs: true,
+    compile_multilib: "64",
+}
diff --git a/compos/benchmark/AndroidManifest.xml b/compos/benchmark/AndroidManifest.xml
new file mode 100644
index 0000000..64c6c97
--- /dev/null
+++ b/compos/benchmark/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.android.compos.benchmark">
+    <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+        android:targetPackage="com.android.compos.benchmark"
+        android:label="CompOS Benchmark" />
+</manifest>
diff --git a/compos/benchmark/AndroidTest.xml b/compos/benchmark/AndroidTest.xml
new file mode 100644
index 0000000..0b6d0b1
--- /dev/null
+++ b/compos/benchmark/AndroidTest.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+     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.
+-->
+<configuration description="Runs sample instrumentation test.">
+    <option name="config-descriptor:metadata" key="component" value="security" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
+    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
+    <option name="config-descriptor:metadata" key="parameter" value="secondary_user" />
+
+    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
+        <option name="test-file-name" value="ComposBenchmarkApp.apk" />
+    </target_preparer>
+
+    <target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer">
+        <option name="force-root" value="true" />
+    </target_preparer>
+
+    <target_preparer class="com.android.tradefed.targetprep.DeviceSetup">
+        <!-- Run in single thread to avoid nondeterministics. -->
+        <option name="set-property" key="dalvik.vm.boot-dex2oat-threads" value="1" />
+    </target_preparer>
+
+    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
+        <option name="package" value="com.android.compos.benchmark" />
+        <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" />
+        <option name="shell-timeout" value="300000" />
+        <option name="test-timeout" value="1800000" />
+    </test>
+</configuration>
diff --git a/compos/benchmark/src/java/com/android/compos/benchmark/ComposBenchmark.java b/compos/benchmark/src/java/com/android/compos/benchmark/ComposBenchmark.java
new file mode 100644
index 0000000..4aba3b7
--- /dev/null
+++ b/compos/benchmark/src/java/com/android/compos/benchmark/ComposBenchmark.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * 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.
+ */
+package com.android.compos.benchmark;
+
+import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
+
+import static org.junit.Assert.assertTrue;
+
+import android.app.Instrumentation;
+import android.os.Bundle;
+import android.os.ParcelFileDescriptor;
+import android.util.Log;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.Duration;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@RunWith(JUnit4.class)
+public class ComposBenchmark {
+    private static final String TAG = "ComposBenchmark";
+    private static final int BUFFER_SIZE = 1024;
+    private static final int ROUND_COUNT = 10;
+
+    private Instrumentation mInstrumentation;
+
+    @Before
+    public void setup() {
+        mInstrumentation = getInstrumentation();
+    }
+
+    @After
+    public void cleanup() {
+
+    }
+
+    public byte[] executeCommandBlocking(String command) {
+        try (
+            InputStream is = new ParcelFileDescriptor.AutoCloseInputStream(
+                getInstrumentation().getUiAutomation().executeShellCommand(command));
+            ByteArrayOutputStream out = new ByteArrayOutputStream()
+        ) {
+            byte[] buf = new byte[BUFFER_SIZE];
+            int length;
+            while ((length = is.read(buf)) >= 0) {
+                out.write(buf, 0, length);
+            }
+            return out.toByteArray();
+        } catch (IOException e) {
+            Log.e(TAG, "Error executing: " + command, e);
+            return null;
+        }
+    }
+
+    public String executeCommand(String command)
+            throws  InterruptedException, IOException {
+
+        getInstrumentation().getUiAutomation()
+                .adoptShellPermissionIdentity();
+        byte[] output = executeCommandBlocking(command);
+        getInstrumentation().getUiAutomation()
+                .dropShellPermissionIdentity();
+
+        if (output == null) {
+            throw new RuntimeException("Failed to run the command.");
+        } else {
+            String stdout = new String(output, "UTF-8");
+            Log.i(TAG, "Get stdout : " + stdout);
+            return stdout;
+        }
+    }
+
+    @Test
+    public void testCompilationInVM()
+            throws InterruptedException, IOException {
+
+        final String command = "/apex/com.android.compos/bin/composd_cmd test-compile";
+
+        Long[] compileSecArray = new Long[ROUND_COUNT];
+
+        for (int round = 0; round < ROUND_COUNT; ++round) {
+            Long compileStartTime = System.nanoTime();
+            String output = executeCommand(command);
+            Long compileEndTime = System.nanoTime();
+            Long compileSec = Duration.ofNanos(compileEndTime - compileStartTime).getSeconds();
+
+            Pattern pattern = Pattern.compile("All Ok");
+            Matcher matcher = pattern.matcher(output);
+            assertTrue(matcher.find());
+
+            compileSecArray[round] = compileSec;
+        }
+
+        Long compileSecSum = 0L;
+        for (Long num: compileSecArray) {
+           compileSecSum += num;
+        }
+
+        Bundle bundle = new Bundle();
+        bundle.putLong("compliation_in_vm_elapse_second", compileSecSum / compileSecArray.length);
+        mInstrumentation.sendStatus(0, bundle);
+    }
+
+}
diff --git a/microdroid/kdump/crashdump.c b/microdroid/kdump/crashdump.c
index 47d359a..8dc84e9 100644
--- a/microdroid/kdump/crashdump.c
+++ b/microdroid/kdump/crashdump.c
@@ -42,6 +42,12 @@
 extern int __reboot(int, int, int, void*);
 
 int main() {
+    // Disable buffering for better display of the progress
+    if (setvbuf(stdout, NULL, _IONBF, 0) != 0) {
+        fprintf(stderr, "Failed to disable buffering for stdout: %s\n", strerror(errno));
+        // This isn't a critical error. Continue.
+    }
+
     printf("Crashdump started\n");
 
     if (mount("proc", "/proc", "proc", 0, NULL) == -1) {
@@ -87,12 +93,6 @@
     char buf[BUF_SIZE];
     int progress = 0; // percentage
 
-    // Disable buffering for better display of the progress
-    if (setvbuf(stdout, NULL, _IONBF, 0) != 0) {
-        fprintf(stderr, "Failed to disable buffering for stdout: %s\n", strerror(errno));
-        // This isn't a critical error. Continue.
-    }
-
     while (dumped < statbuf.st_size) {
         ssize_t read_bytes = read(vmcore, buf, BUF_SIZE);
         if (read_bytes == -1) {
diff --git a/pvmfw/pvmfw.img b/pvmfw/pvmfw.img
index dd836c0..b360bda 100644
--- a/pvmfw/pvmfw.img
+++ b/pvmfw/pvmfw.img
Binary files differ
diff --git a/vmbase/Android.bp b/vmbase/Android.bp
index e098ea7..6400ccd 100644
--- a/vmbase/Android.bp
+++ b/vmbase/Android.bp
@@ -70,6 +70,7 @@
     srcs: [
         "entry.S",
         "exceptions.S",
+        "exceptions_panic.S",
     ],
     no_libcrt: true,
     apex_available: ["com.android.virt"],
diff --git a/vmbase/entry.S b/vmbase/entry.S
index 490e841..490c2f3 100644
--- a/vmbase/entry.S
+++ b/vmbase/entry.S
@@ -84,6 +84,9 @@
 entry:
 	/* Load and apply the memory management configuration, ready to enable MMU and caches. */
 
+	adr x30, vector_table_panic
+	msr vbar_el1, x30
+
 	adrp x30, idmap
 	msr ttbr0_el1, x30
 
diff --git a/vmbase/exceptions_panic.S b/vmbase/exceptions_panic.S
new file mode 100644
index 0000000..6f73da8
--- /dev/null
+++ b/vmbase/exceptions_panic.S
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * 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
+ *
+ *     https://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.
+ */
+
+/**
+ * The following table is intended to trap any fault resulting from the very
+ * first memory accesses. They assume that PSCI v0.2 is available and provides
+ * the PSCI_SYSTEM_RESET call in an attempt to gracefully exit but otherwise
+ * results in the core busy-looping.
+ */
+
+.macro exception_panic
+	mov	x0, 0x80400000
+	add	x0, x0, 9
+	mov	x1, 0
+	mov	x2, 0
+	mov	x3, 0
+	hvc	0
+0:	wfi
+	b	0b
+.endm
+
+.section .text.vector_table_panic, "ax"
+.global vector_table_panic
+.balign 0x800
+vector_table_panic:
+sync_cur_sp0_panic:
+	exception_panic
+
+.balign 0x80
+irq_cur_sp0_panic:
+	exception_panic
+
+.balign 0x80
+fiq_cur_sp0_panic:
+	exception_panic
+
+.balign 0x80
+serr_cur_sp0_panic:
+	exception_panic
+
+.balign 0x80
+sync_cur_spx_panic:
+	exception_panic
+
+.balign 0x80
+irq_cur_spx_panic:
+	exception_panic
+
+.balign 0x80
+fiq_cur_spx_panic:
+	exception_panic
+
+.balign 0x80
+serr_cur_spx_panic:
+	exception_panic
+
+.balign 0x80
+sync_lower_64_panic:
+	exception_panic
+
+.balign 0x80
+irq_lower_64_panic:
+	exception_panic
+
+.balign 0x80
+fiq_lower_64_panic:
+	exception_panic
+
+.balign 0x80
+serr_lower_64_panic:
+	exception_panic
+
+.balign 0x80
+sync_lower_32_panic:
+	exception_panic
+
+.balign 0x80
+irq_lower_32_panic:
+	exception_panic
+
+.balign 0x80
+fiq_lower_32_panic:
+	exception_panic
+
+.balign 0x80
+serr_lower_32_panic:
+	exception_panic
