diff options
| -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; |
