diff --git a/arch/x86/traps.c b/arch/x86/traps.c index 46285ae0..8e5fb98f 100644 --- a/arch/x86/traps.c +++ b/arch/x86/traps.c @@ -282,7 +282,7 @@ void print_callstack(const void *sp, const void *ip) { printk("CALLSTACK:\n"); print_symbol(ip); - for (int i = 0; _ul(&_sp[i]) % PAGE_SIZE_2M; i++) + for (int i = 0; _ul(&_sp[i]) % PAGE_SIZE; i++) print_symbol(_ptr(_sp[i])); printk("\n"); } diff --git a/common/symbols.c b/common/symbols.c index 62b2c15a..42ae3d54 100644 --- a/common/symbols.c +++ b/common/symbols.c @@ -37,7 +37,7 @@ static inline bool is_symbol_address(const void *addr, unsigned index) { static long symbol_index_by_address(const void *addr) { unsigned left, right; - if (!in_text_section(addr)) + if (!in_text_section(addr) && !in_user_text_section(addr)) return -1; left = 0; diff --git a/include/mm/regions.h b/include/mm/regions.h index e1f47237..4ed39e00 100644 --- a/include/mm/regions.h +++ b/include/mm/regions.h @@ -101,6 +101,10 @@ static inline bool in_text_section(const void *addr) { (addr >= _ptr(__start_text_init) && addr < _ptr(__end_text_init)); } +static inline bool in_user_text_section(const void *addr) { + return (addr >= _ptr(__start_text_user) && addr < _ptr(__end_text_user)); +} + static inline bool in_init_section(const void *addr) { return (addr >= _ptr(__start_text_init) && addr < _ptr(__end_text_init)) || (addr >= _ptr(__start_data_init) && addr < _ptr(__end_data_init)) ||