From 371a23009aefa168e7435b2ee636486590b12de0 Mon Sep 17 00:00:00 2001 From: HATAYAMA Daisuke Date: Wed, 1 Mar 2023 05:24:26 +0000 Subject: [PATCH] Update to the latest upstream release Release: crash-gcore-command-1.6.4-0 Signed-off-by: HATAYAMA Daisuke --- .gitignore | 1 + ...mentation-fault-caused-by-type-misma.patch | 58 -------- ...xpected-truncation-of-generated-core.patch | 52 ------- ...BER_-OFFSET-SIZE-instead-of-GCORE_-O.patch | 53 -------- ...message-caused-by-type-mismatch-of-o.patch | 65 --------- ...e-definitions-and-initializations-fo.patch | 59 -------- ...-allocation-failure-during-processin.patch | 128 ------------------ ...match-of-_FILE_OFFSET_BITS-when-buil.patch | 42 ------ ...of-collecting-vsyscall-mapping-due-t.patch | 113 ---------------- crash-gcore-command.spec | 16 +-- sources | 2 +- 11 files changed, 7 insertions(+), 582 deletions(-) delete mode 100644 crash-gcore-1.6.3-coredump-fix-segmentation-fault-caused-by-type-misma.patch delete mode 100644 crash-gcore-1.6.3-coredump-fix-unexpected-truncation-of-generated-core.patch delete mode 100644 crash-gcore-1.6.3-coredump-use-MEMBER_-OFFSET-SIZE-instead-of-GCORE_-O.patch delete mode 100644 crash-gcore-1.6.3-elf-fix-warning-message-caused-by-type-mismatch-of-o.patch delete mode 100644 crash-gcore-1.6.3-gcore-defs-remove-definitions-and-initializations-fo.patch delete mode 100644 crash-gcore-1.6.3-gcore-fix-memory-allocation-failure-during-processin.patch delete mode 100644 crash-gcore-1.6.3-gcore.mk-fix-mismatch-of-_FILE_OFFSET_BITS-when-buil.patch delete mode 100644 crash-gcore-1.6.3-x86-Fix-failure-of-collecting-vsyscall-mapping-due-t.patch diff --git a/.gitignore b/.gitignore index 6dfd6e5..5d635db 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /crash-gcore-command-1.6.2.tar.gz /crash-gcore-command-1.6.3.tar.gz +/crash-gcore-command-1.6.4.tar.gz diff --git a/crash-gcore-1.6.3-coredump-fix-segmentation-fault-caused-by-type-misma.patch b/crash-gcore-1.6.3-coredump-fix-segmentation-fault-caused-by-type-misma.patch deleted file mode 100644 index 0758d28..0000000 --- a/crash-gcore-1.6.3-coredump-fix-segmentation-fault-caused-by-type-misma.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 1ba701c1d7bd94cc5a02f51652712acdcbf0875c Mon Sep 17 00:00:00 2001 -From: Vincent Whitchurch -Date: Tue, 21 Jun 2022 09:15:33 +0000 -Subject: [PATCH 5/8] coredump: fix segmentation fault caused by type mismatch -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -crash gcore command on ARM sometimes results in segmentation fault: - - crash> gcore -v 0 - Segmentation fault (core dumped) - -This is caused by type mismatch of a variable paddr in function -gcore_readmem_user() to hold a physical address, which is indicated by -the following warning message: - - libgcore/gcore_coredump.c: In function ‘gcore_readmem_user’: - libgcore/gcore_coredump.c:85:26: warning: passing argument 2 of - ‘uvtop_quiet’ from incompatible pointer type - [-Wincompatible-pointer-types] - - if (!uvtop_quiet(addr, &paddr)) { - ^~~~~~ - libgcore/gcore_coredump.c:71:49: note: expected ‘physaddr_t *’ {aka - ‘long long unsigned int *’} but argument is of type ‘ulong *’ {aka ‘long - unsigned int *’} - - static int uvtop_quiet(ulong vaddr, physaddr_t *paddr); - ~~~~~~~~~~~~^~~~~ - -On ARM, long unsigned int has 4 byte length, while physaddr_t has 8 -byte length. The mismatch causes overwriting of stack variables. - -Fix this by changing the type of the variable paddr to physaddr_t. - -Signed-off-by: Vincent Whitchurch ---- - src/libgcore/gcore_coredump.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/libgcore/gcore_coredump.c b/src/libgcore/gcore_coredump.c -index c14cc11..424b0a4 100644 ---- a/src/libgcore/gcore_coredump.c -+++ b/src/libgcore/gcore_coredump.c -@@ -78,7 +78,8 @@ readswap(ulonglong pte_val, char *buf, ulong len, ulonglong vaddr) - - void gcore_readmem_user(ulong addr, void *buf, long size, char *type) - { -- ulong paddr, cnt; -+ physaddr_t paddr; -+ ulong cnt; - char *bufptr = buf; - - while (size > 0) { --- -2.37.1 - diff --git a/crash-gcore-1.6.3-coredump-fix-unexpected-truncation-of-generated-core.patch b/crash-gcore-1.6.3-coredump-fix-unexpected-truncation-of-generated-core.patch deleted file mode 100644 index 06c78d0..0000000 --- a/crash-gcore-1.6.3-coredump-fix-unexpected-truncation-of-generated-core.patch +++ /dev/null @@ -1,52 +0,0 @@ -From dbb542e10bfe1b2e21c7927bda9be1d301cfef65 Mon Sep 17 00:00:00 2001 -From: HATAYAMA Daisuke -Date: Fri, 17 Jun 2022 20:38:19 +0900 -Subject: [PATCH 7/8] coredump: fix unexpected truncation of generated core - files - -Core files generated by crash gcore command are sometimes unexpectedly -truncated. Then, we can get aware of this from the following warning -message output by gdb: - - BFD: warning: /root/./core.1.systemd is truncated: expected core file size >= 43606016, found: 43597824 - -From the investigation, it turned out that this truncation is -occurring when there is no write() operation after the area skipped by -lseek(). Holes are generated only when there is write() operation. - -To fix this issue, use ftruncate() to allocate holes explicitly. - -Signed-off-by: HATAYAMA Daisuke ---- - src/libgcore/gcore_coredump.c | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/src/libgcore/gcore_coredump.c b/src/libgcore/gcore_coredump.c -index 424b0a4..27086d9 100644 ---- a/src/libgcore/gcore_coredump.c -+++ b/src/libgcore/gcore_coredump.c -@@ -331,6 +331,21 @@ void gcore_coredump(void) - } - progressf("done.\n"); - -+ /* -+ * Use ftruncate() to generate holes explicitly, or core file -+ * gets truncated if there is no write() operation after the -+ * area skipped by lseek(). -+ */ -+ if (fflush(gcore->fp)) -+ error(FATAL, "%s: fflush: %s\n", -+ gcore->corename, -+ strerror(errno)); -+ -+ if (ftruncate(fileno(gcore->fp), ftell(gcore->fp)) < 0) -+ error(FATAL, "%s: ftruncate: %s\n", -+ gcore->corename, -+ strerror(errno)); -+ - gcore->flags |= GCF_SUCCESS; - - } --- -2.37.1 - diff --git a/crash-gcore-1.6.3-coredump-use-MEMBER_-OFFSET-SIZE-instead-of-GCORE_-O.patch b/crash-gcore-1.6.3-coredump-use-MEMBER_-OFFSET-SIZE-instead-of-GCORE_-O.patch deleted file mode 100644 index c3eca47..0000000 --- a/crash-gcore-1.6.3-coredump-use-MEMBER_-OFFSET-SIZE-instead-of-GCORE_-O.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 4731ebf085fe6322ba8c7ca14918d3cab2186cf0 Mon Sep 17 00:00:00 2001 -From: HATAYAMA Daisuke -Date: Fri, 25 Feb 2022 04:45:37 -0500 -Subject: [PATCH 1/8] coredump: use MEMBER_{OFFSET, SIZE} instead of - GCORE_{OFFSET, SIZE} - -fill_auxv_note() and compat_fill_auxv_note() is called just once each -time gcore command is invoked because each process has just one -NT_AUXV. This means using MEMBER_{OFFSET, SIZE} is enough; using -GCORE_{OFFSET, SIZE} is overkill. - -Signed-off-by: HATAYAMA Daisuke ---- - src/libgcore/gcore_coredump.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/src/libgcore/gcore_coredump.c b/src/libgcore/gcore_coredump.c -index 3d0c0fc..6f57b21 100644 ---- a/src/libgcore/gcore_coredump.c -+++ b/src/libgcore/gcore_coredump.c -@@ -930,11 +930,11 @@ fill_auxv_note(struct elf_note_info *info, struct task_context *tc, - ulong *auxv; - int i; - -- auxv = (ulong *)GETBUF(GCORE_SIZE(mm_struct_saved_auxv)); -+ auxv = (ulong *)GETBUF(MEMBER_SIZE("mm_struct", "saved_auxv")); - - readmem(task_mm(tc->task, FALSE) + -- GCORE_OFFSET(mm_struct_saved_auxv), KVADDR, auxv, -- GCORE_SIZE(mm_struct_saved_auxv), "fill_auxv_note", -+ MEMBER_OFFSET("mm_struct", "saved_auxv"), KVADDR, auxv, -+ MEMBER_SIZE("mm_struct", "saved_auxv"), "fill_auxv_note", - gcore_verbose_error_handle()); - - i = 0; -@@ -956,11 +956,11 @@ compat_fill_auxv_note(struct elf_note_info *info, - uint32_t *auxv; - int i; - -- auxv = (uint32_t *)GETBUF(GCORE_SIZE(mm_struct_saved_auxv)); -+ auxv = (uint32_t *)GETBUF(MEMBER_SIZE("mm_struct", "saved_auxv")); - - readmem(task_mm(tc->task, FALSE) + -- GCORE_OFFSET(mm_struct_saved_auxv), KVADDR, auxv, -- GCORE_SIZE(mm_struct_saved_auxv), "fill_auxv_note32", -+ MEMBER_OFFSET("mm_struct", "saved_auxv"), KVADDR, auxv, -+ MEMBER_SIZE("mm_struct", "saved_auxv"), "fill_auxv_note32", - gcore_verbose_error_handle()); - - i = 0; --- -2.37.1 - diff --git a/crash-gcore-1.6.3-elf-fix-warning-message-caused-by-type-mismatch-of-o.patch b/crash-gcore-1.6.3-elf-fix-warning-message-caused-by-type-mismatch-of-o.patch deleted file mode 100644 index eaf5818..0000000 --- a/crash-gcore-1.6.3-elf-fix-warning-message-caused-by-type-mismatch-of-o.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 8ff3de974aa9fdf8934797122dc55428ef571ab2 Mon Sep 17 00:00:00 2001 -From: Vincent Whitchurch -Date: Tue, 21 Jun 2022 09:15:34 +0000 -Subject: [PATCH 6/8] elf: fix warning message caused by type mismatch of - offset types -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Use loff_t consistently to fix these warnings on -m32 builds on 64-bit: - - libgcore/gcore_coredump.c: In function ‘writenote’: - libgcore/gcore_coredump.c:701:58: warning: passing argument 3 of - ‘gcore->elf->ops->write_note_header’ from incompatible pointer type - [-Wincompatible-pointer-types] - - if (!gcore->elf->ops->write_note_header(gcore->elf, fp, foffset)) - ^~~~~~~ - libgcore/gcore_coredump.c:701:58: note: expected ‘off_t *’ {aka ‘long - int *’} but argument is of type ‘loff_t *’ {aka ‘long long int *’} - -Signed-off-by: Vincent Whitchurch ---- - src/libgcore/gcore_defs.h | 2 +- - src/libgcore/gcore_elf_struct.c | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/libgcore/gcore_defs.h b/src/libgcore/gcore_defs.h -index 3233ea5..409678e 100644 ---- a/src/libgcore/gcore_defs.h -+++ b/src/libgcore/gcore_defs.h -@@ -1232,7 +1232,7 @@ struct gcore_elf_operations - int (*write_section_header)(struct gcore_elf_struct *this, FILE *fp); - int (*write_program_header)(struct gcore_elf_struct *this, FILE *fp); - int (*write_note_header)(struct gcore_elf_struct *this, FILE *fp, -- off_t *offset); -+ loff_t *offset); - - uint64_t (*get_e_phoff)(struct gcore_elf_struct *this); - uint64_t (*get_e_shoff)(struct gcore_elf_struct *this); -diff --git a/src/libgcore/gcore_elf_struct.c b/src/libgcore/gcore_elf_struct.c -index 2aca984..b31388a 100644 ---- a/src/libgcore/gcore_elf_struct.c -+++ b/src/libgcore/gcore_elf_struct.c -@@ -141,7 +141,7 @@ static int elf64_write_program_header(struct gcore_elf_struct *this, FILE *fp) - } - - static int elf64_write_note_header(struct gcore_elf_struct *this, FILE *fp, -- off_t *offset) -+ loff_t *offset) - { - Elf64_Nhdr *n = &((struct gcore_elf64_struct *)this)->nhdr; - -@@ -314,7 +314,7 @@ static int elf32_write_program_header(struct gcore_elf_struct *this, FILE *fp) - } - - static int elf32_write_note_header(struct gcore_elf_struct *this, FILE *fp, -- off_t *offset) -+ loff_t *offset) - { - Elf32_Nhdr *n = &((struct gcore_elf32_struct *)this)->nhdr; - --- -2.37.1 - diff --git a/crash-gcore-1.6.3-gcore-defs-remove-definitions-and-initializations-fo.patch b/crash-gcore-1.6.3-gcore-defs-remove-definitions-and-initializations-fo.patch deleted file mode 100644 index 126784c..0000000 --- a/crash-gcore-1.6.3-gcore-defs-remove-definitions-and-initializations-fo.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 6f4357340807f70bd1999f0b88435361c583f0b9 Mon Sep 17 00:00:00 2001 -From: HATAYAMA Daisuke -Date: Fri, 25 Feb 2022 04:51:06 -0500 -Subject: [PATCH 2/8] gcore, defs: remove definitions and initializations for - saved_auxv entries of offset and size tables - -saved_auxv entries of offset and size tables are now not used in the -source code by the previous commit. Let's remove definitions and -initializations for them. - -Signed-off-by: HATAYAMA Daisuke ---- - src/gcore.c | 2 -- - src/libgcore/gcore_defs.h | 2 -- - 2 files changed, 4 deletions(-) - -diff --git a/src/gcore.c b/src/gcore.c -index 5b78d99..f86b15f 100644 ---- a/src/gcore.c -+++ b/src/gcore.c -@@ -371,7 +371,6 @@ static void gcore_offset_table_init(void) - GCORE_MEMBER_OFFSET_INIT(mm_struct_arg_end, "mm_struct", "arg_end"); - GCORE_MEMBER_OFFSET_INIT(mm_struct_map_count, "mm_struct", "map_count"); - GCORE_MEMBER_OFFSET_INIT(mm_struct_reserved_vm, "mm_struct", "reserved_vm"); -- GCORE_MEMBER_OFFSET_INIT(mm_struct_saved_auxv, "mm_struct", "saved_auxv"); - GCORE_MEMBER_OFFSET_INIT(mm_struct_saved_files, "mm_struct", "saved_files"); - GCORE_MEMBER_OFFSET_INIT(mm_struct_context, "mm_struct", "context"); - GCORE_MEMBER_OFFSET_INIT(pid_level, "pid", "level"); -@@ -520,7 +519,6 @@ static void gcore_size_table_init(void) - { - GCORE_STRUCT_SIZE_INIT(i387_union, "i387_union"); - GCORE_STRUCT_SIZE_INIT(mm_context_t, "mm_context_t"); -- GCORE_MEMBER_SIZE_INIT(mm_struct_saved_auxv, "mm_struct", "saved_auxv"); - GCORE_MEMBER_SIZE_INIT(mm_struct_saved_files, "mm_struct", "saved_files"); - GCORE_MEMBER_SIZE_INIT(thread_struct_ds, "thread_struct", "ds"); - GCORE_MEMBER_SIZE_INIT(thread_struct_es, "thread_struct", "es"); -diff --git a/src/libgcore/gcore_defs.h b/src/libgcore/gcore_defs.h -index df87851..3233ea5 100644 ---- a/src/libgcore/gcore_defs.h -+++ b/src/libgcore/gcore_defs.h -@@ -1072,7 +1072,6 @@ struct gcore_offset_table - long mm_struct_arg_end; - long mm_struct_map_count; - long mm_struct_reserved_vm; -- long mm_struct_saved_auxv; - long mm_struct_saved_files; - long mm_struct_context; - long pid_level; -@@ -1148,7 +1147,6 @@ struct gcore_offset_table - struct gcore_size_table - { - long mm_context_t; -- long mm_struct_saved_auxv; - long mm_struct_saved_files; - long thread_struct_ds; - long thread_struct_es; --- -2.37.1 - diff --git a/crash-gcore-1.6.3-gcore-fix-memory-allocation-failure-during-processin.patch b/crash-gcore-1.6.3-gcore-fix-memory-allocation-failure-during-processin.patch deleted file mode 100644 index 27e3091..0000000 --- a/crash-gcore-1.6.3-gcore-fix-memory-allocation-failure-during-processin.patch +++ /dev/null @@ -1,128 +0,0 @@ -From 4cb65a0d9168778d120920418b968d05da10989f Mon Sep 17 00:00:00 2001 -From: HATAYAMA Daisuke -Date: Fri, 25 Feb 2022 04:59:48 -0500 -Subject: [PATCH 3/8] gcore: fix memory allocation failure during processing - NT_AUXV note - -For crash dumps generated using kernel-4.18.0-365.el8 or later on -CentOS stream 8, crash gcore command fails as follows: - - crash> gcore -v 7 -f 128 10604 - gcore: Opening file core.10604.test-dumpfilter ... - gcore: done. - gcore: Writing ELF header ... - gcore: done. - gcore: Retrieving and writing note information ... - gcore: zero-size memory allocation! (called from 7fd558ce1e05) - Failed. - -This memory allocation failure occurs in fill_auxv_note() that creates -NT_AUXV note due to saved_auxv entries of size and offset tables are -somehow 0. - -This is because during the merge of the upstream kernel commit -1c33bb0507508af24fd754dd7123bd8e997fab2f (x86/elf: Support a new ELF -aux vector AT_MINSIGSTKSZ), location of saved_auxv of struct mm_struct -has been moved as workaround in order to avoid kABI breakage. - -Fix this by using RHEL-specific location for saved_auxv if there is -member rh_reserved_saved_auxv in struct mm_struct. - -Signed-off-by: HATAYAMA Daisuke ---- - src/libgcore/gcore_coredump.c | 54 +++++++++++++++++++++++++++++------ - 1 file changed, 46 insertions(+), 8 deletions(-) - -diff --git a/src/libgcore/gcore_coredump.c b/src/libgcore/gcore_coredump.c -index 6f57b21..c14cc11 100644 ---- a/src/libgcore/gcore_coredump.c -+++ b/src/libgcore/gcore_coredump.c -@@ -18,6 +18,10 @@ - - static struct elf_note_info *elf_note_info_init(void); - -+static void get_auxv_size_addr(struct task_context *tc, -+ size_t *size, -+ ulong *addr); -+ - static void fill_prstatus_note(struct elf_note_info *info, - struct task_context *tc, - struct memelfnote *memnote); -@@ -923,18 +927,49 @@ compat_fill_prstatus_note(struct elf_note_info *info, - - #endif /* GCORE_ARCH_COMPAT */ - -+static void get_auxv_size_addr(struct task_context *tc, -+ size_t *psize, -+ ulong *paddr) -+{ -+ size_t size; -+ ulong addr; -+ -+ if (MEMBER_EXISTS("mm_struct", "rh_reserved_saved_auxv")) { -+ ulong mm_rh; -+ -+ size = MEMBER_SIZE("mm_struct_rh", "saved_auxv"); -+ readmem(task_mm(tc->task, FALSE) + MEMBER_OFFSET("mm_struct", "mm_rh"), -+ KVADDR, -+ &mm_rh, -+ sizeof(mm_rh), -+ "mm_struct mm_rh", -+ gcore_verbose_error_handle()); -+ addr = mm_rh + MEMBER_OFFSET("mm_struct_rh", "saved_auxv"); -+ } else { -+ size = MEMBER_SIZE("mm_struct", "saved_auxv"); -+ addr = task_mm(tc->task, FALSE) + -+ MEMBER_OFFSET("mm_struct", "saved_auxv"); -+ } -+ -+ *psize = size; -+ *paddr = addr; -+} -+ - static void - fill_auxv_note(struct elf_note_info *info, struct task_context *tc, - struct memelfnote *memnote) - { - ulong *auxv; -+ ulong addr; -+ size_t size; - int i; - -- auxv = (ulong *)GETBUF(MEMBER_SIZE("mm_struct", "saved_auxv")); -+ get_auxv_size_addr(tc, &size, &addr); - -- readmem(task_mm(tc->task, FALSE) + -- MEMBER_OFFSET("mm_struct", "saved_auxv"), KVADDR, auxv, -- MEMBER_SIZE("mm_struct", "saved_auxv"), "fill_auxv_note", -+ auxv = (ulong *)GETBUF(size); -+ -+ readmem(addr, KVADDR, auxv, -+ size, "fill_auxv_note", - gcore_verbose_error_handle()); - - i = 0; -@@ -954,13 +989,16 @@ compat_fill_auxv_note(struct elf_note_info *info, - struct memelfnote *memnote) - { - uint32_t *auxv; -+ ulong addr; -+ size_t size; - int i; - -- auxv = (uint32_t *)GETBUF(MEMBER_SIZE("mm_struct", "saved_auxv")); -+ get_auxv_size_addr(tc, &size, &addr); -+ -+ auxv = (uint32_t *)GETBUF(size); - -- readmem(task_mm(tc->task, FALSE) + -- MEMBER_OFFSET("mm_struct", "saved_auxv"), KVADDR, auxv, -- MEMBER_SIZE("mm_struct", "saved_auxv"), "fill_auxv_note32", -+ readmem(addr, KVADDR, auxv, -+ size, "fill_auxv_note32", - gcore_verbose_error_handle()); - - i = 0; --- -2.37.1 - diff --git a/crash-gcore-1.6.3-gcore.mk-fix-mismatch-of-_FILE_OFFSET_BITS-when-buil.patch b/crash-gcore-1.6.3-gcore.mk-fix-mismatch-of-_FILE_OFFSET_BITS-when-buil.patch deleted file mode 100644 index 60a04a2..0000000 --- a/crash-gcore-1.6.3-gcore.mk-fix-mismatch-of-_FILE_OFFSET_BITS-when-buil.patch +++ /dev/null @@ -1,42 +0,0 @@ -From d2795659986dacc51e98a3d1dbc8b673582c20fe Mon Sep 17 00:00:00 2001 -From: HATAYAMA Daisuke -Date: Tue, 28 Jun 2022 03:54:46 +0900 -Subject: [PATCH 8/8] gcore.mk: fix mismatch of _FILE_OFFSET_BITS when building - gcore.so - -On arm and mips, while _FILE_OFFSET_BITS=64 is used when building -gcore.so by make extensions, it is not used by gcore.mk. - -Fix this inconsistency by using _FILE_OFFSET_BITS=64 in gcore.mk on -arm and mips. - -Signed-off-by: HATAYAMA Daisuke ---- - src/gcore.mk | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/gcore.mk b/src/gcore.mk -index 4af292b..1fd4d84 100644 ---- a/src/gcore.mk -+++ b/src/gcore.mk -@@ -32,7 +32,7 @@ endif - - ifeq ($(shell arch), arm) - TARGET=ARM -- TARGET_CFLAGS= -+ TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64 - ARCH=SUPPORTED - endif - -@@ -44,7 +44,7 @@ endif - - ifeq ($(shell arch), mips) - TARGET=MIPS -- TARGET_CFLAGS= -+ TARGET_CFLAGS=-D_FILE_OFFSET_BITS=64 - ARCH=SUPPORTED - endif - --- -2.37.1 - diff --git a/crash-gcore-1.6.3-x86-Fix-failure-of-collecting-vsyscall-mapping-due-t.patch b/crash-gcore-1.6.3-x86-Fix-failure-of-collecting-vsyscall-mapping-due-t.patch deleted file mode 100644 index 3a6f19a..0000000 --- a/crash-gcore-1.6.3-x86-Fix-failure-of-collecting-vsyscall-mapping-due-t.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 03f9360715731f18e4fdae7b30aa34b30dddcd57 Mon Sep 17 00:00:00 2001 -From: HATAYAMA Daisuke -Date: Sat, 26 Mar 2022 21:42:02 +0900 -Subject: [PATCH 4/8] x86: Fix failure of collecting vsyscall mapping due to - change of enum type of vsyscall_mode - -vsyscall mapping fails to get collected because the commit -bd49e16e3339 (x86/vsyscall: Add a new vsyscall=xonly mode) merged at -kernel v5.2-rc7 added constant XONLY to the anonymous enumeration type -of variable vsyscall_mode, which made the value of constant NONE -change from 1 to 2. - -This commit fixes the issue by checking the value of constant NONE -using gdb's print command and typeof operator since there's no utility -function to handle such anonymous enumeration type currently in crash -utility. - -Signed-off-by: HATAYAMA Daisuke ---- - src/libgcore/gcore_x86.c | 56 ++++++++++++++++++++++++++++++++++++++-- - 1 file changed, 54 insertions(+), 2 deletions(-) - -diff --git a/src/libgcore/gcore_x86.c b/src/libgcore/gcore_x86.c -index 08e573c..f334a85 100644 ---- a/src/libgcore/gcore_x86.c -+++ b/src/libgcore/gcore_x86.c -@@ -41,6 +41,9 @@ struct gcore_x86_table - static struct gcore_x86_table gcore_x86_table; - struct gcore_x86_table *gxt = &gcore_x86_table; - -+static void gdb_run_command(char *cmd, char *buf, size_t size); -+static int get_vsyscall_mode_none(void); -+ - #ifdef X86_64 - static ulong gcore_x86_64_get_old_rsp(int cpu); - static ulong gcore_x86_64_get_per_cpu__old_rsp(int cpu); -@@ -2367,6 +2370,54 @@ int gcore_is_arch_32bit_emulation(struct task_context *tc) - return FALSE; - } - -+static void gdb_run_command(char *cmd, char *buf, size_t size) -+{ -+ open_tmpfile(); -+ if (!gdb_pass_through(cmd, -+ pc->tmpfile, -+ GNU_RETURN_ON_ERROR)) { -+ close_tmpfile(); -+ error(FATAL, "gdb command failed: %s", cmd); -+ } -+ rewind(pc->tmpfile); -+ fgets(buf, size, pc->tmpfile); -+ close_tmpfile(); -+} -+ -+static int get_vsyscall_mode_none(void) -+{ -+ static int none = -1; -+ char cmd[32], buf[BUFSIZE]; -+ int i; -+ -+ if (none != -1) -+ return none; -+ -+ /* -+ * Variable vsyscall_mode is of anonymous enumeration -+ * type. Because there's no utility function in crash utility -+ * to get value of each constant in specified anonymous -+ * enumeration type, we have no choice but rely on gdb's print -+ * command in combination with typeof operator. -+ */ -+ for (i = 0; i < 10; ++i) { -+ snprintf(cmd, sizeof(cmd), "p (typeof(vsyscall_mode))%d", i); -+ gdb_run_command(cmd, buf, sizeof(buf)); -+ if (strstr(buf, "NONE")) -+ return none = i; -+ } -+ -+ /* -+ * When the above logic doesn't work as expected, use 2, which -+ * is the value on the definition where vsyscall_mode was -+ * first introduced at the commit 3ae36655b97a (x86-64: Rework -+ * vsyscall emulation and add vsyscall= parameter). -+ */ -+ none = 2; -+ -+ return none; -+} -+ - /** - * Return an address to gate_vma. - */ -@@ -2377,7 +2428,8 @@ ulong gcore_arch_get_gate_vma(void) - return 0UL; - - if (symbol_exists("vsyscall_mode")) { -- enum { ENUMERATE, NONE } vsyscall_mode; -+ int vsyscall_mode; -+ int none = get_vsyscall_mode_none(); - - readmem(symbol_value("vsyscall_mode"), - KVADDR, -@@ -2386,7 +2438,7 @@ ulong gcore_arch_get_gate_vma(void) - "gcore_arch_get_gate_vma: vsyscall_mode", - gcore_verbose_error_handle()); - -- if (vsyscall_mode == NONE) -+ if (vsyscall_mode == none) - return 0UL; - } - --- -2.37.1 - diff --git a/crash-gcore-command.spec b/crash-gcore-command.spec index 9b37e44..d28f914 100644 --- a/crash-gcore-command.spec +++ b/crash-gcore-command.spec @@ -2,8 +2,8 @@ Summary: Gcore extension module for the crash utility Name: crash-gcore-command -Version: 1.6.3 -Release: 4%{?dist} +Version: 1.6.4 +Release: 0%{?dist} License: GPLv2 Source0: https://github.com/fujitsu/crash-gcore/archive/v%{version}/%{name}-%{version}.tar.gz URL: https://github.com/fujitsu/crash-gcore @@ -13,15 +13,6 @@ BuildRequires: crash-devel >= 5.1.5 BuildRequires: gcc Requires: crash >= 5.1.5 -Patch0: crash-gcore-1.6.3-coredump-use-MEMBER_-OFFSET-SIZE-instead-of-GCORE_-O.patch -Patch1: crash-gcore-1.6.3-gcore-defs-remove-definitions-and-initializations-fo.patch -Patch2: crash-gcore-1.6.3-gcore-fix-memory-allocation-failure-during-processin.patch -Patch3: crash-gcore-1.6.3-x86-Fix-failure-of-collecting-vsyscall-mapping-due-t.patch -Patch4: crash-gcore-1.6.3-coredump-fix-segmentation-fault-caused-by-type-misma.patch -Patch5: crash-gcore-1.6.3-elf-fix-warning-message-caused-by-type-mismatch-of-o.patch -Patch6: crash-gcore-1.6.3-coredump-fix-unexpected-truncation-of-generated-core.patch -Patch7: crash-gcore-1.6.3-gcore.mk-fix-mismatch-of-_FILE_OFFSET_BITS-when-buil.patch - %description Command for creating a core dump file of a user-space task that was running in a kernel dump file. @@ -43,6 +34,9 @@ install -m 0755 -t %{buildroot}%{_libdir}/crash/extensions %{_builddir}/%{repona %license COPYING %changelog +* Wed Mar 1 2023 HATAYAMA Daisuke - 1.6.4-0 +- Update to latest upstream release + * Thu Jan 19 2023 Fedora Release Engineering - 1.6.3-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild diff --git a/sources b/sources index 26be15e..59061c9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (crash-gcore-command-1.6.3.tar.gz) = f64ccc58548e171ea6a50e0e7a440bb256d3744f6e8f7a35cfe509eb03b68c77d9ec083621a3c38ca879e0804887ab6548d95203f42c662e157a59684451b55b +SHA512 (crash-gcore-command-1.6.4.tar.gz) = 5799337cea3459e122f6ed3a3c8a375ff950477d00a46bc0428e1771dd6d99d4c3470f2514c1b299ab403bbe0b1b46b169243d581ea54ec6109ad42aa7aa3406