diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2020-06-16 12:05:38 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2020-06-16 12:05:37 -0700 |
| commit | 2c3f93a3e6626b7b84356902fe0fd308e059ca3e (patch) | |
| tree | 333a3dad6f97846549e0d53a64f3968618263039 | |
| parent | a030949485709167682073ea52ce586da78e885c (diff) | |
| parent | 9b2a0e89a37f8632024dc487f78f503d67e4fa38 (diff) | |
Merge "soc: qcom: Reset string table index for each dump collection request"
| -rw-r--r-- | drivers/soc/qcom/ramdump.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/soc/qcom/ramdump.c b/drivers/soc/qcom/ramdump.c index c8353dc8a43a..c06ff285a512 100644 --- a/drivers/soc/qcom/ramdump.c +++ b/drivers/soc/qcom/ramdump.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -411,19 +411,19 @@ static inline char *elf_str_table(struct elfhdr *hdr) } static inline unsigned int set_section_name(const char *name, - struct elfhdr *ehdr) + struct elfhdr *ehdr, + int *strtable_idx) { char *strtab = elf_str_table(ehdr); - static int strtable_idx = 1; int idx, ret = 0; - idx = strtable_idx; + idx = *strtable_idx; if ((strtab == NULL) || (name == NULL)) return 0; ret = idx; idx += strlcpy((strtab + idx), name, MAX_NAME_LENGTH); - strtable_idx = idx + 1; + *strtable_idx = idx + 1; return ret; } @@ -436,6 +436,7 @@ static int _do_minidump(void *handle, struct ramdump_segment *segments, struct elfhdr *ehdr; struct elf_shdr *shdr; unsigned long offset, strtbl_off; + int strtable_idx = 1; if (!rd_dev->consumer_present) { pr_err("Ramdump(%s): No consumers. Aborting..\n", rd_dev->name); @@ -475,13 +476,14 @@ static int _do_minidump(void *handle, struct ramdump_segment *segments, shdr->sh_size = MAX_STRTBL_SIZE; shdr->sh_entsize = 0; shdr->sh_flags = 0; - shdr->sh_name = set_section_name("STR_TBL", ehdr); + shdr->sh_name = set_section_name("STR_TBL", ehdr, &strtable_idx); shdr++; for (i = 0; i < nsegments; i++, shdr++) { /* Update elf header */ shdr->sh_type = SHT_PROGBITS; - shdr->sh_name = set_section_name(segments[i].name, ehdr); + shdr->sh_name = set_section_name(segments[i].name, ehdr, + &strtable_idx); shdr->sh_addr = (elf_addr_t)segments[i].address; shdr->sh_size = segments[i].size; shdr->sh_flags = SHF_WRITE; |
