summaryrefslogtreecommitdiff
path: root/src/arch/x86
diff options
context:
space:
mode:
authorHarshit Sharma <harshitsharmajs@gmail.com>2020-07-20 00:21:05 -0700
committerPatrick Georgi <pgeorgi@google.com>2020-08-21 07:41:19 +0000
commita6ebe08333dcc6c263b6bb8936d4883663c63798 (patch)
tree8f06ee5f79cf4efb54f189c17512a6120d2edd40 /src/arch/x86
parent9c88fb8df0005dc60e6c62778b4f16313cb3308e (diff)
lib: Add ASan support to romstage on x86 arch
This patch adds ASan support to romstage on x86 architecture. A Kconfig option is added to enable ASan in romstage. Compiler flags are updated. A memory space representing the shadow region is reserved in linker section. And a function call to asan_init() is added to initialize shadow region when romstage loads. Change-Id: I67ebfb5e8d602e865b1f5c874860861ae4e54381 Signed-off-by: Harshit Sharma <harshitsharmajs@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/43604 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Werner Zeh <werner.zeh@siemens.com>
Diffstat (limited to 'src/arch/x86')
-rw-r--r--src/arch/x86/assembly_entry.S4
-rw-r--r--src/arch/x86/car.ld6
2 files changed, 9 insertions, 1 deletions
diff --git a/src/arch/x86/assembly_entry.S b/src/arch/x86/assembly_entry.S
index fb48469c55..0d8307bb1f 100644
--- a/src/arch/x86/assembly_entry.S
+++ b/src/arch/x86/assembly_entry.S
@@ -49,6 +49,10 @@ debug_spinloop:
#if CONFIG(IDT_IN_EVERY_STAGE)
call exception_init
#endif
+
+#if CONFIG(ASAN_IN_ROMSTAGE)
+ call asan_init
+#endif
call car_stage_entry
/* Expect to never return. */
diff --git a/src/arch/x86/car.ld b/src/arch/x86/car.ld
index 17b774845b..eabe87380a 100644
--- a/src/arch/x86/car.ld
+++ b/src/arch/x86/car.ld
@@ -72,8 +72,12 @@
*(.sbss.*)
. = ALIGN(ARCH_POINTER_ALIGN_SIZE);
_ebss = .;
- _car_unallocated_start = .;
+#if ENV_ROMSTAGE && CONFIG(ASAN_IN_ROMSTAGE)
+ _shadow_size = (_ebss - _car_region_start) >> 3;
+ REGION(asan_shadow, ., _shadow_size, ARCH_POINTER_ALIGN_SIZE)
+#endif
+ _car_unallocated_start = .;
_car_region_end = . + CONFIG_DCACHE_RAM_SIZE - (. - _car_region_start);
}
. = _car_region_end;