aboutsummaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-retry-elf-parsing-as-long-as-needed.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-retry-elf-parsing-as-long-as-needed.patch')
-rw-r--r--meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-retry-elf-parsing-as-long-as-needed.patch128
1 files changed, 0 insertions, 128 deletions
diff --git a/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-retry-elf-parsing-as-long-as-needed.patch b/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-retry-elf-parsing-as-long-as-needed.patch
deleted file mode 100644
index 8d5b8b6cbb..0000000000
--- a/meta-oe/recipes-kernel/minicoredumper/files/0001-minicoredumper-retry-elf-parsing-as-long-as-needed.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From 7a8c6a06c86e133e4346b1dc66483bd8d0d3c716 Mon Sep 17 00:00:00 2001
-From: John Ogness <john.ogness@linutronix.de>
-Date: Tue, 24 Aug 2021 21:10:43 +0200
-Subject: [PATCH] minicoredumper: retry elf parsing as long as needed
-
-As was reported in github issue #2 ("maximum number of tries
-insufficient, in rare cases, for elf parse"), the number of retries
-for parsing a process may be insufficient. Rather than setting an
-upper limit on the maximum number of retries, track the number of
-headers seen. As long as the number of seen headers is greater than
-the previous try, try again.
-
-In order to avoid introducing any new issues, preserve the behavior
-of retrying at least 10 times, even if no new headers are seen.
-
-Reported-by: github.com/ssajal-wr
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-
-Upstream-Status: Backport [7a8c6a06c86e133e4346b1dc66483bd8d0d3c716]
-
-Signed-off-by: Sakib Sajal <sakib.sajal@windriver.com>
----
- src/minicoredumper/corestripper.c | 30 +++++++++++++++++++++++-------
- 1 file changed, 23 insertions(+), 7 deletions(-)
-
-diff --git a/src/minicoredumper/corestripper.c b/src/minicoredumper/corestripper.c
-index d96d1df..c96b350 100644
---- a/src/minicoredumper/corestripper.c
-+++ b/src/minicoredumper/corestripper.c
-@@ -761,7 +761,7 @@ static int init_log(struct dump_info *di)
- typedef int elf_parse_cb(struct dump_info *di, Elf *elf, GElf_Phdr *phdr);
-
- static int do_elf_ph_parse(struct dump_info *di, GElf_Phdr *type,
-- elf_parse_cb *callback)
-+ elf_parse_cb *callback, size_t *phnum_found)
- {
- GElf_Ehdr ehdr_mem;
- GElf_Ehdr *ehdr;
-@@ -770,6 +770,9 @@ static int do_elf_ph_parse(struct dump_info *di, GElf_Phdr *type,
- size_t phnum;
- size_t cnt;
-
-+ if (phnum_found)
-+ *phnum_found = 0;
-+
- /* start from beginning of core */
- if (lseek64(di->elf_fd, 0, SEEK_SET) == -1) {
- info("lseek failed: %s", strerror(errno));
-@@ -809,6 +812,9 @@ static int do_elf_ph_parse(struct dump_info *di, GElf_Phdr *type,
- goto out;
- }
-
-+ if (phnum_found)
-+ *phnum_found = phnum;
-+
- for (cnt = 0; cnt < phnum; cnt++) {
- GElf_Phdr phdr_mem;
- GElf_Phdr *phdr;
-@@ -891,7 +897,7 @@ static int vma_cb(struct dump_info *di, Elf *elf, GElf_Phdr *phdr)
- /*
- * Tries to parse the found ELF headers and reads all vmas from it.
- */
--static int parse_vma_info(struct dump_info *di)
-+static int parse_vma_info(struct dump_info *di, size_t *phnum_found)
- {
- unsigned long min_off = ULONG_MAX;
- unsigned long max_len = 0;
-@@ -911,7 +917,7 @@ static int parse_vma_info(struct dump_info *di)
- memset(&type, 0, sizeof(type));
- type.p_type = PT_LOAD;
- type.p_flags = PF_R;
-- if (do_elf_ph_parse(di, &type, vma_cb) != 0)
-+ if (do_elf_ph_parse(di, &type, vma_cb, phnum_found) != 0)
- return -1;
-
- for (v = di->vma; v; v = v->next) {
-@@ -1614,8 +1620,10 @@ int add_core_data(struct dump_info *di, off64_t dest_offset, size_t len,
- */
- static int init_src_core(struct dump_info *di, int src)
- {
-+ size_t last_phnum = 0;
- int tries = 0;
- int ret = -1;
-+ size_t phnum;
- size_t len;
- char *buf;
- long pos;
-@@ -1642,7 +1650,7 @@ again:
- goto out;
-
- /* try to elf-parse the core to read vma info */
-- ret = parse_vma_info(di);
-+ ret = parse_vma_info(di, &phnum);
-
- /* restore our position */
- if (lseek64(di->elf_fd, pos, SEEK_SET) == -1)
-@@ -1653,9 +1661,17 @@ again:
-
- tries++;
-
-- /* maybe try again */
-- if (tries < 10)
-+ if (phnum > last_phnum) {
-+ /* new headers found, keep trying */
-+ last_phnum = phnum;
- goto again;
-+ } else if (tries < 10) {
-+ /*
-+ * even if no new headers are found,
-+ * retry at least 10 times
-+ */
-+ goto again;
-+ }
-
- goto out;
- }
-@@ -2106,7 +2122,7 @@ static int dump_stacks(struct dump_info *di)
- /* find and set the first task */
- memset(&type, 0, sizeof(type));
- type.p_type = PT_NOTE;
-- do_elf_ph_parse(di, &type, note_cb);
-+ do_elf_ph_parse(di, &type, note_cb, NULL);
- }
-
- if (di->first_pid)
---
-2.25.1
-