Nexus 6 mock test
diff --git a/jni/Android.mk b/jni/Android.mk
index 938ebe2..4374039 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -160,6 +160,13 @@
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
+LOCAL_MODULE := nexus6-test
+LOCAL_SRC_FILES := $(LOCAL_PATH)/test/nexus6.cc
+LOCAL_C_INCLUDES := $(LOCAL_PATH)/test
+LOCAL_STATIC_LIBRARIES := cpuinfo_mock gtest
+include $(BUILD_EXECUTABLE)
+
+include $(CLEAR_VARS)
 LOCAL_MODULE := nexus9-test
 LOCAL_SRC_FILES := $(LOCAL_PATH)/test/nexus9.cc
 LOCAL_C_INCLUDES := $(LOCAL_PATH)/test
diff --git a/test/cpuinfo/nexus6.log b/test/cpuinfo/nexus6.log
new file mode 100644
index 0000000..4356050
--- /dev/null
+++ b/test/cpuinfo/nexus6.log
@@ -0,0 +1,46 @@
+processor	: 0
+model name	: ARMv7 Processor rev 1 (v7l)
+BogoMIPS	: 38.40
+Features	: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt 
+CPU implementer	: 0x51
+CPU architecture: 7
+CPU variant	: 0x3
+CPU part	: 0x06f
+CPU revision	: 1
+
+processor	: 1
+model name	: ARMv7 Processor rev 1 (v7l)
+BogoMIPS	: 38.40
+Features	: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt 
+CPU implementer	: 0x51
+CPU architecture: 7
+CPU variant	: 0x3
+CPU part	: 0x06f
+CPU revision	: 1
+
+processor	: 2
+model name	: ARMv7 Processor rev 1 (v7l)
+BogoMIPS	: 38.40
+Features	: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt 
+CPU implementer	: 0x51
+CPU architecture: 7
+CPU variant	: 0x3
+CPU part	: 0x06f
+CPU revision	: 1
+
+processor	: 3
+model name	: ARMv7 Processor rev 1 (v7l)
+BogoMIPS	: 38.40
+Features	: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt 
+CPU implementer	: 0x51
+CPU architecture: 7
+CPU variant	: 0x3
+CPU part	: 0x06f
+CPU revision	: 1
+
+Hardware	: Qualcomm APQ 8084 (Flattened Device Tree)
+Revision	: 83a0
+Serial		: 68123d0111000000
+Device		: shamu
+Radio		: 6
+MSM Hardware	: APQ8084 ES1.1
diff --git a/test/nexus6.cc b/test/nexus6.cc
new file mode 100644
index 0000000..692672a
--- /dev/null
+++ b/test/nexus6.cc
@@ -0,0 +1,318 @@
+#include <gtest/gtest.h>
+
+#include <cpuinfo.h>
+#include <cpuinfo-mock.h>
+
+
+TEST(PROCESSORS, count) {
+	ASSERT_EQ(4, cpuinfo_processors_count);
+}
+
+TEST(PROCESSORS, non_null) {
+	ASSERT_TRUE(cpuinfo_processors);
+}
+
+TEST(PROCESSORS, vendor_qualcomm) {
+	for (uint32_t i = 0; i < cpuinfo_processors_count; i++) {
+		ASSERT_EQ(cpuinfo_vendor_qualcomm, cpuinfo_processors[i].vendor);
+	}
+}
+
+TEST(PROCESSORS, uarch_krait) {
+	for (uint32_t i = 0; i < cpuinfo_processors_count; i++) {
+		ASSERT_EQ(cpuinfo_uarch_krait, cpuinfo_processors[i].uarch);
+	}
+}
+
+TEST(ISA, thumb) {
+	ASSERT_TRUE(cpuinfo_isa.thumb);
+}
+
+TEST(ISA, thumb2) {
+	ASSERT_TRUE(cpuinfo_isa.thumb2);
+}
+
+TEST(ISA, thumbee) {
+	ASSERT_FALSE(cpuinfo_isa.thumbee);
+}
+
+TEST(ISA, jazelle) {
+	ASSERT_FALSE(cpuinfo_isa.jazelle);
+}
+
+TEST(ISA, armv5e) {
+	ASSERT_TRUE(cpuinfo_isa.armv5e);
+}
+
+TEST(ISA, armv6) {
+	ASSERT_TRUE(cpuinfo_isa.armv6);
+}
+
+TEST(ISA, armv6k) {
+	ASSERT_TRUE(cpuinfo_isa.armv6k);
+}
+
+TEST(ISA, armv7) {
+	ASSERT_TRUE(cpuinfo_isa.armv7);
+}
+
+TEST(ISA, armv7mp) {
+	ASSERT_TRUE(cpuinfo_isa.armv7mp);
+}
+
+TEST(ISA, idiv) {
+	ASSERT_TRUE(cpuinfo_isa.idiv);
+}
+
+TEST(ISA, vfpv2) {
+	ASSERT_FALSE(cpuinfo_isa.vfpv2);
+}
+
+TEST(ISA, vfpv3) {
+	ASSERT_TRUE(cpuinfo_isa.vfpv3);
+}
+
+TEST(ISA, d32) {
+	ASSERT_TRUE(cpuinfo_isa.d32);
+}
+
+TEST(ISA, fp16) {
+	ASSERT_TRUE(cpuinfo_isa.fp16);
+}
+
+TEST(ISA, fma) {
+	ASSERT_TRUE(cpuinfo_isa.fma);
+}
+
+TEST(ISA, wmmx) {
+	ASSERT_FALSE(cpuinfo_isa.wmmx);
+}
+
+TEST(ISA, wmmx2) {
+	ASSERT_FALSE(cpuinfo_isa.wmmx2);
+}
+
+TEST(ISA, neon) {
+	ASSERT_TRUE(cpuinfo_isa.neon);
+}
+
+TEST(ISA, aes) {
+	ASSERT_FALSE(cpuinfo_isa.aes);
+}
+
+TEST(ISA, sha1) {
+	ASSERT_FALSE(cpuinfo_isa.sha1);
+}
+
+TEST(ISA, sha2) {
+	ASSERT_FALSE(cpuinfo_isa.sha2);
+}
+
+TEST(ISA, pmull) {
+	ASSERT_FALSE(cpuinfo_isa.pmull);
+}
+
+TEST(ISA, crc32) {
+	ASSERT_FALSE(cpuinfo_isa.crc32);
+}
+
+TEST(L1I, count) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	ASSERT_EQ(4, l1i.count);
+}
+
+TEST(L1I, non_null) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	ASSERT_TRUE(l1i.instances);
+}
+
+TEST(L1I, size) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(16 * 1024, l1i.instances[k].size);
+	}
+}
+
+TEST(L1I, associativity) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(4, l1i.instances[k].associativity);
+	}
+}
+
+TEST(L1I, sets) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(64, l1i.instances[k].sets);
+	}
+}
+
+TEST(L1I, partitions) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(1, l1i.instances[k].partitions);
+	}
+}
+
+TEST(L1I, line_size) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(64, l1i.instances[k].line_size);
+	}
+}
+
+TEST(L1I, flags) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(0, l1i.instances[k].flags);
+	}
+}
+
+TEST(L1I, processors) {
+	cpuinfo_caches l1i = cpuinfo_get_l1i_cache();
+	for (uint32_t k = 0; k < l1i.count; k++) {
+		ASSERT_EQ(k, l1i.instances[k].thread_start);
+		ASSERT_EQ(1, l1i.instances[k].thread_count);
+	}
+}
+
+TEST(L1D, count) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	ASSERT_EQ(4, l1d.count);
+}
+
+TEST(L1D, non_null) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	ASSERT_TRUE(l1d.instances);
+}
+
+TEST(L1D, size) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(16 * 1024, l1d.instances[k].size);
+	}
+}
+
+TEST(L1D, associativity) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(4, l1d.instances[k].associativity);
+	}
+}
+
+TEST(L1D, sets) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(64, l1d.instances[k].sets);
+	}
+}
+
+TEST(L1D, partitions) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(1, l1d.instances[k].partitions);
+	}
+}
+
+TEST(L1D, line_size) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(64, l1d.instances[k].line_size);
+	}
+}
+
+TEST(L1D, flags) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(0, l1d.instances[k].flags);
+	}
+}
+
+TEST(L1D, processors) {
+	cpuinfo_caches l1d = cpuinfo_get_l1d_cache();
+	for (uint32_t k = 0; k < l1d.count; k++) {
+		ASSERT_EQ(k, l1d.instances[k].thread_start);
+		ASSERT_EQ(1, l1d.instances[k].thread_count);
+	}
+}
+
+TEST(L2, count) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	ASSERT_EQ(1, l2.count);
+}
+
+TEST(L2, non_null) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	ASSERT_TRUE(l2.instances);
+}
+
+TEST(L2, size) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(2 * 1024 * 1024, l2.instances[k].size);
+	}
+}
+
+TEST(L2, associativity) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(8, l2.instances[k].associativity);
+	}
+}
+
+TEST(L2, sets) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(2048, l2.instances[k].sets);
+	}
+}
+
+TEST(L2, partitions) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(1, l2.instances[k].partitions);
+	}
+}
+
+TEST(L2, line_size) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(128, l2.instances[k].line_size);
+	}
+}
+
+TEST(L2, flags) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(0, l2.instances[k].flags);
+	}
+}
+
+TEST(L2, processors) {
+	cpuinfo_caches l2 = cpuinfo_get_l2_cache();
+	for (uint32_t k = 0; k < l2.count; k++) {
+		ASSERT_EQ(0, l2.instances[k].thread_start);
+		ASSERT_EQ(4, l2.instances[k].thread_count);
+	}
+}
+
+TEST(L3, none) {
+	cpuinfo_caches l3 = cpuinfo_get_l3_cache();
+	ASSERT_EQ(0, l3.count);
+	ASSERT_FALSE(l3.instances);
+}
+
+TEST(L4, none) {
+	cpuinfo_caches l4 = cpuinfo_get_l4_cache();
+	ASSERT_EQ(0, l4.count);
+	ASSERT_FALSE(l4.instances);
+}
+
+#include <nexus6.h>
+
+int main(int argc, char* argv[]) {
+	cpuinfo_mock_filesystem(filesystem);
+	cpuinfo_initialize();
+	::testing::InitGoogleTest(&argc, argv);
+	return RUN_ALL_TESTS();
+}
diff --git a/test/nexus6.h b/test/nexus6.h
new file mode 100644
index 0000000..c6acfe5
--- /dev/null
+++ b/test/nexus6.h
@@ -0,0 +1,340 @@
+struct cpuinfo_mock_file filesystem[] = {
+	{
+		.path = "/proc/cpuinfo",
+		.size = 1136,
+		.content =
+			"processor\t: 0\n"
+			"model name\t: ARMv7 Processor rev 1 (v7l)\n"
+			"BogoMIPS\t: 38.40\n"
+			"Features\t: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt \n"
+			"CPU implementer\t: 0x51\n"
+			"CPU architecture: 7\n"
+			"CPU variant\t: 0x3\n"
+			"CPU part\t: 0x06f\n"
+			"CPU revision\t: 1\n"
+			"\n"
+			"processor\t: 1\n"
+			"model name\t: ARMv7 Processor rev 1 (v7l)\n"
+			"BogoMIPS\t: 38.40\n"
+			"Features\t: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt \n"
+			"CPU implementer\t: 0x51\n"
+			"CPU architecture: 7\n"
+			"CPU variant\t: 0x3\n"
+			"CPU part\t: 0x06f\n"
+			"CPU revision\t: 1\n"
+			"\n"
+			"processor\t: 2\n"
+			"model name\t: ARMv7 Processor rev 1 (v7l)\n"
+			"BogoMIPS\t: 38.40\n"
+			"Features\t: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt \n"
+			"CPU implementer\t: 0x51\n"
+			"CPU architecture: 7\n"
+			"CPU variant\t: 0x3\n"
+			"CPU part\t: 0x06f\n"
+			"CPU revision\t: 1\n"
+			"\n"
+			"processor\t: 3\n"
+			"model name\t: ARMv7 Processor rev 1 (v7l)\n"
+			"BogoMIPS\t: 38.40\n"
+			"Features\t: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt \n"
+			"CPU implementer\t: 0x51\n"
+			"CPU architecture: 7\n"
+			"CPU variant\t: 0x3\n"
+			"CPU part\t: 0x06f\n"
+			"CPU revision\t: 1\n"
+			"\n"
+			"Hardware\t: Qualcomm APQ 8084 (Flattened Device Tree)\n"
+			"Revision\t: 83a0\n"
+			"Serial\t\t: 68123d0111000000\n"
+			"Device\t\t: shamu\n"
+			"Radio\t\t: 6\n"
+			"MSM Hardware\t: APQ8084 ES1.1\n",
+	},
+	{
+		.path = "/system/build.prop",
+		.size = 4715,
+		.content =
+			"\n"
+			"#\n"
+			"# PRODUCT_OEM_PROPERTIES\n"
+			"#\n"
+			"import /oem/oem.prop ro.config.ringtone\n"
+			"import /oem/oem.prop ro.config.notification_sound\n"
+			"import /oem/oem.prop ro.config.alarm_alert\n"
+			"import /oem/oem.prop ro.config.wallpaper\n"
+			"import /oem/oem.prop ro.config.wallpaper_component\n"
+			"import /oem/oem.prop ro.oem.*\n"
+			"import /oem/oem.prop oem.*\n"
+			"# begin build properties\n"
+			"# autogenerated by buildinfo.sh\n"
+			"ro.build.id=MPA44I\n"
+			"ro.build.display.id=MPA44I\n"
+			"ro.build.version.incremental=2172151\n"
+			"ro.build.version.sdk=23\n"
+			"ro.build.version.preview_sdk=0\n"
+			"ro.build.version.codename=REL\n"
+			"ro.build.version.all_codenames=REL\n"
+			"ro.build.version.release=6.0\n"
+			"ro.build.version.security_patch=\n"
+			"ro.build.version.base_os=\n"
+			"ro.build.date=Mon Aug 17 16:07:31 UTC 2015\n"
+			"ro.build.date.utc=1439827651\n"
+			"ro.build.type=user\n"
+			"ro.build.user=android-build\n"
+			"ro.build.host=wpee25.hot.corp.google.com\n"
+			"ro.build.tags=release-keys\n"
+			"ro.build.flavor=shamu-user\n"
+			"ro.product.model=Nexus 6\n"
+			"ro.product.brand=google\n"
+			"ro.product.name=shamu\n"
+			"ro.product.device=shamu\n"
+			"ro.product.board=shamu\n"
+			"# ro.product.cpu.abi and ro.product.cpu.abi2 are obsolete,\n"
+			"# use ro.product.cpu.abilist instead.\n"
+			"ro.product.cpu.abi=armeabi-v7a\n"
+			"ro.product.cpu.abi2=armeabi\n"
+			"ro.product.cpu.abilist=armeabi-v7a,armeabi\n"
+			"ro.product.cpu.abilist32=armeabi-v7a,armeabi\n"
+			"ro.product.cpu.abilist64=\n"
+			"ro.product.manufacturer=motorola\n"
+			"ro.product.locale=en-US\n"
+			"ro.wifi.channels=\n"
+			"ro.board.platform=msm8084\n"
+			"# ro.build.product is obsolete; use ro.product.device\n"
+			"ro.build.product=shamu\n"
+			"# Do not try to parse description, fingerprint, or thumbprint\n"
+			"ro.build.description=shamu-user 6.0 MPA44I 2172151 release-keys\n"
+			"ro.build.fingerprint=google/shamu/shamu:6.0/MPA44I/2172151:user/release-keys\n"
+			"ro.build.characteristics=nosdcard\n"
+			"# end build properties\n"
+			"\n"
+			"#\n"
+			"# ADDITIONAL_BUILD_PROPERTIES\n"
+			"#\n"
+			"ro.config.ringtone=Titania.ogg\n"
+			"ro.config.notification_sound=Tethys.ogg\n"
+			"ro.config.alarm_alert=Oxygen.ogg\n"
+			"ro.com.android.dataroaming=false\n"
+			"ro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html\n"
+			"ro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html\n"
+			"ro.com.google.clientidbase=android-google\n"
+			"ro.carrier=unknown\n"
+			"ro.com.android.wifi-watchlist=GoogleGuest\n"
+			"ro.error.receiver.system.apps=com.google.android.gms\n"
+			"ro.setupwizard.enterprise_mode=1\n"
+			"fmas.spkr_6ch=35,20,110\n"
+			"fmas.spkr_2ch=35,25\n"
+			"fmas.spkr_angles=10\n"
+			"fmas.spkr_sgain=0\n"
+			"media.aac_51_output_enabled=true\n"
+			"ro.audio.monitorRotation=true\n"
+			"ro.opengles.version=196609\n"
+			"ro.sf.lcd_density=560\n"
+			"persist.hwc.mdpcomp.enable=true\n"
+			"rild.libpath=/system/vendor/lib/libril-qc-qmi-1.so\n"
+			"persist.radio.apm_sim_not_pwdn=1\n"
+			"persist.radio.no_wait_for_card=1\n"
+			"persist.ims.disableDebugLogs=1\n"
+			"persist.ims.disableADBLogs=2\n"
+			"persist.ims.disableQXDMLogs=0\n"
+			"persist.ims.disableIMSLogs=1\n"
+			"persist.camera.hal.debug.mask=7\n"
+			"persist.camera.ISP.debug.mask=0\n"
+			"persist.camera.pproc.debug.mask=7\n"
+			"persist.camera.stats.debug.mask=0\n"
+			"persit.camera.imglib.logs=1\n"
+			"persist.camera.mct.debug.mask=1\n"
+			"persist.camera.sensor.debug=0\n"
+			"vidc.debug.level=1\n"
+			"persist.radio.oem_socket=false\n"
+			"persist.qcril_uim_vcc_feature=1\n"
+			"ro.telephony.default_cdma_sub=0\n"
+			"ro.telephony.default_network=10\n"
+			"telephony.lteOnCdmaDevice=1\n"
+			"persist.radio.fsg_reload_on=1\n"
+			"persist.radio.mcfg_enabled=1\n"
+			"ro.hwui.texture_cache_size=72\n"
+			"ro.hwui.layer_cache_size=48\n"
+			"ro.hwui.r_buffer_cache_size=8\n"
+			"ro.hwui.path_cache_size=32\n"
+			"ro.hwui.gradient_cache_size=1\n"
+			"ro.hwui.drop_shadow_cache_size=6\n"
+			"ro.hwui.texture_cache_flushrate=0.4\n"
+			"ro.hwui.text_small_cache_width=1024\n"
+			"ro.hwui.text_small_cache_height=1024\n"
+			"ro.hwui.text_large_cache_width=2048\n"
+			"ro.hwui.text_large_cache_height=1024\n"
+			"dalvik.vm.heapgrowthlimit=256m\n"
+			"dalvik.vm.heapstartsize=8m\n"
+			"dalvik.vm.heapsize=512m\n"
+			"dalvik.vm.heaptargetutilization=0.75\n"
+			"dalvik.vm.heapminfree=512k\n"
+			"dalvik.vm.heapmaxfree=8m\n"
+			"ro.frp.pst=/dev/block/platform/msm_sdcc.1/by-name/frp\n"
+			"af.fast_track_multiplier=1\n"
+			"audio_hal.period_size=192\n"
+			"persist.rcs.supported=0\n"
+			"persist.audio.dualmic.config=endfire\n"
+			"persist.audio.fluence.voicecall=true\n"
+			"persist.audio.fluence.voicerec=false\n"
+			"persist.audio.fluence.speaker=false\n"
+			"persist.radio.sib16_support=1\n"
+			"persist.data.qmi.adb_logmask=0\n"
+			"persist.data.iwlan.enable=true\n"
+			"persist.radio.ignore_ims_wlan=1\n"
+			"persist.radio.data_con_rprt=1\n"
+			"keyguard.no_require_sim=true\n"
+			"drm.service.enabled=true\n"
+			"ro.facelock.black_timeout=400\n"
+			"ro.facelock.det_timeout=1500\n"
+			"ro.facelock.rec_timeout=2500\n"
+			"ro.facelock.lively_timeout=2500\n"
+			"ro.facelock.est_max_time=600\n"
+			"ro.facelock.use_intro_anim=false\n"
+			"persist.sys.dalvik.vm.lib.2=libart\n"
+			"dalvik.vm.isa.arm.variant=krait\n"
+			"dalvik.vm.isa.arm.features=default\n"
+			"net.bt.name=Android\n"
+			"dalvik.vm.stack-trace-file=/data/anr/traces.txt\n"
+			"ro.build.expect.bootloader=moto-apq8084-71.15\n"
+			"ro.build.expect.baseband=D4.01-9625-05.24+FSG-9625-02.101\n"
+			"ro.expect.recovery_id=0xc7e3a51dcb8bb9aac02a77707b095512cd8b751a000000000000000000000000\n"
+			"\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/kernel_max",
+		.size = 2,
+		.content = "3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/possible",
+		.size = 4,
+		.content = "0-3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/present",
+		.size = 4,
+		.content = "0-3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq",
+		.size = 8,
+		.content = "2649600\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq",
+		.size = 7,
+		.content = "300000\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu0/topology/physical_package_id",
+		.size = 2,
+		.content = "0\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu0/topology/core_siblings_list",
+		.size = 4,
+		.content = "0-3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu0/topology/core_id",
+		.size = 2,
+		.content = "0\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu0/topology/thread_siblings_list",
+		.size = 2,
+		.content = "0\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq",
+		.size = 8,
+		.content = "2649600\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq",
+		.size = 7,
+		.content = "300000\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu1/topology/physical_package_id",
+		.size = 2,
+		.content = "0\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu1/topology/core_siblings_list",
+		.size = 4,
+		.content = "0-3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu1/topology/core_id",
+		.size = 2,
+		.content = "1\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu1/topology/thread_siblings_list",
+		.size = 2,
+		.content = "1\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_max_freq",
+		.size = 8,
+		.content = "2649600\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_min_freq",
+		.size = 7,
+		.content = "300000\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu2/topology/physical_package_id",
+		.size = 2,
+		.content = "0\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu2/topology/core_siblings_list",
+		.size = 4,
+		.content = "0-3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu2/topology/core_id",
+		.size = 2,
+		.content = "2\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu2/topology/thread_siblings_list",
+		.size = 2,
+		.content = "2\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_max_freq",
+		.size = 8,
+		.content = "2649600\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_min_freq",
+		.size = 7,
+		.content = "300000\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu3/topology/physical_package_id",
+		.size = 2,
+		.content = "0\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu3/topology/core_siblings_list",
+		.size = 4,
+		.content = "0-3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu3/topology/core_id",
+		.size = 2,
+		.content = "3\n",
+	},
+	{
+		.path = "/sys/devices/system/cpu/cpu3/topology/thread_siblings_list",
+		.size = 2,
+		.content = "3\n",
+	},
+	{ NULL },
+};