soc: qcom: Use debug symbol driver APIs for symbol address

Use debug symbol driver for finding required symbol address
information. These symbols are not exported from core kernel
anymore for vendor module usage and debug symbol driver APIs
provides symbol address for dumping.

Change-Id: I86536a26a283cb929210b959110e9009ce0198af
Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
此提交包含在:
Prasad Sodagudi
2020-12-21 20:58:50 -08:00
父節點 7819b1a145
當前提交 c0de611c5d
共有 2 個檔案被更改,包括 15 行新增5 行删除

查看文件

@@ -27,6 +27,7 @@
#include <linux/sched/task.h> #include <linux/sched/task.h>
#include <linux/suspend.h> #include <linux/suspend.h>
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/android_debug_symbols.h>
#ifdef CONFIG_QCOM_MINIDUMP_PANIC_DUMP #ifdef CONFIG_QCOM_MINIDUMP_PANIC_DUMP
#include <linux/bits.h> #include <linux/bits.h>
@@ -189,12 +190,18 @@ static void register_kernel_sections(void)
{ {
struct md_region ksec_entry; struct md_region ksec_entry;
char *data_name = "KDATABSS"; char *data_name = "KDATABSS";
const size_t static_size = __per_cpu_end - __per_cpu_start; size_t static_size;
void __percpu *base = (void __percpu *)__per_cpu_start; void __percpu *base;
unsigned int cpu; unsigned int cpu;
void *_sdata, *__bss_stop;
_sdata = android_debug_symbol(ADS_SDATA);
__bss_stop = android_debug_symbol(ADS_BSS_END);
base = android_debug_symbol(ADS_PER_CPU_START);
static_size = (size_t)(android_debug_symbol(ADS_PER_CPU_END) - base);
strlcpy(ksec_entry.name, data_name, sizeof(ksec_entry.name)); strlcpy(ksec_entry.name, data_name, sizeof(ksec_entry.name));
ksec_entry.virt_addr = (uintptr_t)_sdata; ksec_entry.virt_addr = (u64)_sdata;
ksec_entry.phys_addr = virt_to_phys(_sdata); ksec_entry.phys_addr = virt_to_phys(_sdata);
ksec_entry.size = roundup((__bss_stop - _sdata), 4); ksec_entry.size = roundup((__bss_stop - _sdata), 4);
if (msm_minidump_add_region(&ksec_entry) < 0) if (msm_minidump_add_region(&ksec_entry) < 0)
@@ -552,9 +559,10 @@ static void register_irq_stack(void)
u64 irq_stack_base; u64 irq_stack_base;
struct md_region irq_sp_entry; struct md_region irq_sp_entry;
u64 sp; u64 sp;
u64 *irq_stack_ptr = android_debug_per_cpu_symbol(ADS_IRQ_STACK_PTR);
for_each_possible_cpu(cpu) { for_each_possible_cpu(cpu) {
irq_stack_base = (u64)per_cpu(irq_stack_ptr, cpu); irq_stack_base = (u64)per_cpu_ptr((void *)irq_stack_ptr, cpu);
if (is_vmap_stack) { if (is_vmap_stack) {
irq_stack_pages_count = IRQ_STACK_SIZE / PAGE_SIZE; irq_stack_pages_count = IRQ_STACK_SIZE / PAGE_SIZE;
sp = irq_stack_base & ~(PAGE_SIZE - 1); sp = irq_stack_base & ~(PAGE_SIZE - 1);

查看文件

@@ -16,6 +16,7 @@
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/string.h> #include <linux/string.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/android_debug_symbols.h>
#include <linux/soc/qcom/smem.h> #include <linux/soc/qcom/smem.h>
#include <soc/qcom/minidump.h> #include <soc/qcom/minidump.h>
#include "minidump_private.h" #include "minidump_private.h"
@@ -437,8 +438,9 @@ static int msm_minidump_add_header(void)
struct elf_shdr *shdr; struct elf_shdr *shdr;
struct elf_phdr *phdr; struct elf_phdr *phdr;
unsigned int strtbl_off, elfh_size, phdr_off; unsigned int strtbl_off, elfh_size, phdr_off;
char *banner; char *banner, *linux_banner;
linux_banner = android_debug_symbol(ADS_LINUX_BANNER);
/* Header buffer contains: /* Header buffer contains:
* elf header, MAX_NUM_ENTRIES+4 of section and program elf headers, * elf header, MAX_NUM_ENTRIES+4 of section and program elf headers,
* string table section and linux banner. * string table section and linux banner.