Added check to ensure KDL does not include frames beyond kernel entry in the backtrace. This prevents KDL from faulting when printing backtrace on ARM.

This commit is contained in:
Arvind S Raj 2014-08-15 00:27:39 +05:30 committed by PulkoMandy
parent 23b891504c
commit 3fbb24680c
3 changed files with 11 additions and 12 deletions

View File

@ -9,7 +9,7 @@
// memory layout
#define KERNEL_BASE 0x80000000
#define KERNEL_SIZE 0x80000000
#define KERNEL_SIZE 0x800000
#define KERNEL_TOP (KERNEL_BASE + (KERNEL_SIZE - 1))
/*

View File

@ -59,7 +59,7 @@ TODO:
// 8 MB for the kernel, kernel args, modules, driver settings, ...
static const size_t kMaxKernelSize = 0x800000;
static const size_t kMaxKernelSize = KERNEL_SIZE;
// Base address for loader
static const size_t kLoaderBaseAddress = KERNEL_LOAD_BASE + kMaxKernelSize;

View File

@ -56,19 +56,18 @@ already_visited(uint32 *visited, int32 *_last, int32 *_num, uint32 fp)
static status_t
get_next_frame(addr_t fp, addr_t *next, addr_t *ip)
{
if (fp != 0) {
addr_t _fp = *(((addr_t*)fp) -3);
addr_t _sp = *(((addr_t*)fp) -2);
addr_t _lr = *(((addr_t*)fp) -1);
addr_t _pc = *(((addr_t*)fp) -0);
addr_t _fp = *(((addr_t*)fp) -3);
addr_t _sp = *(((addr_t*)fp) -2);
addr_t _lr = *(((addr_t*)fp) -1);
addr_t _pc = *(((addr_t*)fp) -0);
*ip = (_fp != 0) ? _lr : _pc;
*next = _fp;
return B_OK;
if (_lr > KERNEL_TOP) {
return B_BAD_ADDRESS;
}
*ip = (_fp != 0) ? _lr : _pc;
*next = _fp;
return B_BAD_VALUE;
return B_OK;
}