-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Format: 1.8 Date: Wed, 02 Feb 2022 09:19:00 -0700 Source: crash Architecture: source Version: 8.0.0-1 Distribution: unstable Urgency: medium Maintainer: Troy Heber <troyh@debian.org> Changed-By: Troy Heber <troyh@debian.org> Closes: 950544 Changes: crash (8.0.0-1) unstable; urgency=medium . * New upstream (Closes: #950544) * Add lintian override for zlib in embedded gdb * * commit ec568e2ea515b66343d3488d5d4b9a625d55b7ae * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Wed Nov 24 13:32:49 2021 +0900 * * crash-7.3.0 -> crash-8.0.0 * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 6bc104059b124ecac5c8244f84aae6d7cfdfe97c * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Tue Nov 16 02:42:23 2021 +0000 * * log: add warning to help text to inform the inaccuracy of -T option * * The timestamps of the "log -T" option are inaccurate because they are * from local_clock(), which returns the raw counter in the local CPU and * it's different from the elapsed wall time. * * The dmesg command, which the "log -T" option imitates, has a similar * behavior in nature and a warning in its help text. Let's add a warning * also to the crash's help text to inform the inaccuracy for now. * * Reported-by: Martin Moore <martin.moore@hpe.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit b0dd73d2368275e101688b2aca0bc297fd1ba300 * Author: Aaron Tomlin <atomlin@redhat.com> * Date: Mon Nov 1 11:39:34 2021 +0000 * * kernel: show that the kernel is tainted at init-time * * Explicitly indicate to the user that the Linux kernel is tainted * at init-time or when the 'sys' command is used. * * Signed-off-by: Aaron Tomlin <atomlin@redhat.com> * * commit 64f48ee6719632895cd8a0922e84a4626e3790d8 * Author: Aaron Tomlin <atomlin@redhat.com> * Date: Mon Nov 1 11:39:33 2021 +0000 * * kernel: Introduce is_kernel_tainted() * * Provide a quick way to test if the given Linux kernel is "tainted". * Support for Linux-2.6.12 and above, to date. * * Signed-off-by: Aaron Tomlin <atomlin@redhat.com> * * commit bfa596f40650e5a061b15d41b0a5b108610b11e9 * Author: Aaron Tomlin <atomlin@redhat.com> * Date: Mon Nov 1 11:39:32 2021 +0000 * * kernel: consolidate show_kernel_taints() * * No functional change. * * Signed-off-by: Aaron Tomlin <atomlin@redhat.com> * * commit 8246dce99dd23457e8c7a3fe9609c706694d1959 * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Thu Nov 11 15:20:52 2021 +0900 * * arm64: Update SECTION_SIZE_BITS for kernels >= 5.12 * * Update the default SECTION_SIZE_BITS value for arm64 Linux 5.12 * and later kernels that contain kernel commit f0b13ee23241 * ("arm64/sparsemem: reduce SECTION_SIZE_BITS"). * * Reported-by: Ankur Bansal <er.ankurbansal@gmail.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 01d20ca1861ffaf449c1c60aa0536e9f42200ad3 * Author: Philipp Rudo <prudo@redhat.com> * Date: Tue Nov 9 14:52:22 2021 +0100 * * Fix live debugging with lockdown=integrity * * With kernel lockdown the access to kernel interfaces that allow one to * extract confidential information (lockdown=confidentiality) or modify a * running kernel (lockdown=integrity) can be restricted. Two of the * interfaces that can be restricted are /dev/mem (integrity & * confidentiality) and /proc/kcore (confidentiality). With * lockdown=integrity this leads to a situation where /dev/mem exists but * is not readable while /proc/kcore exists and is readable. This breaks * crash's live debugging when it is invoked without argument, i.e. * * $ crash * [...] * crash: /dev/mem: Operation not permitted * * while passing /proc/kcore as image succeeds. The reason for this is * that crash always picks /dev/mem as source when it exits but doesn't * check if it is readable. Fix this by only selecting /dev/mem when it * is readable. * * Signed-off-by: Philipp Rudo <prudo@redhat.com> * * commit 68870c83d299603c07785e3530e33c13045c87ef * Author: Alexander Egorenkov <egorenar@linux.ibm.com> * Date: Wed Oct 13 10:56:39 2021 +0200 * * Handle task_struct cpu member changes for kernels >= 5.16-rc1 * * Kernel commit bcf9033e5449bdcaa9bed46467a7141a8049dadb * ("sched: move CPU field back into thread_info if THREAD_INFO_IN_TASK=y") * moved the member cpu of task_struct back into thread_info. * Without the patch, crash fails with the following error message * during session initialization: * * crash: invalid structure member offset: task_struct_cpu * FILE: task.c LINE: 2904 FUNCTION: add_context() * * Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit c180a63f2cb370da6097ad97eb07333c07aa988b * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Mon Oct 25 16:53:26 2021 +0900 * * arm64: Use VA_BITS for page_offset calculation * * Commit 167d37e347fe ("arm64: assign page_offset with VA_BITS kernel * configuration value") changed the page_offset calculation from * using VA_BITS_ACTUAL to CONFIG_ARM64_VA_BITS. This caused an error * for ramdumps without vmcoreinfo like this: * * crash: vmlinux and /var/tmp/ramdump_elf_XUtCMT do not match! * * Set the vmcoreinfo value to VA_BITS if available, and use VA_BITS * for page_offset calculation instead. * * Also remove ARM64_FLIP_PAGE_OFFSET_ACTUAL because it's not used * actually. * * Reported-by: Ankur Bansal <er.ankurbansal@gmail.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 5c04a6f3f923af7c50f0d853477044802b3fa6ec * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:17 2021 +0800 * * symbols: Add mod_symname_hash table dump to help -s * * Previously, help -s only print out the dump status of symname_hash * table. Since we have mod_symname_hash table introduced, let's print * out mod_symname_hash in help -s as well. * * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit df0049d12b2ced1b6ff7350ee3c0ca28c3f7cd52 * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:16 2021 +0800 * * symbols: Refactor SYMNAME_HASH_INDEX macro to be a function * * SYMNAME_HASH_INDEX is used as the index of symname hash table. It will * be out of range if SYMNAME_HASH_INDEX is negative. This patch avoids * the risk by changing the marco into a function, and casting and * calculating the numbers as unsigned. * * Suggested-by: Lianbo Jiang <lijiang@redhat.com> * Suggested-by: Philipp Rudo <prudo@redhat.com> * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit 1e23335dab6bf9f6219a23bf0be4ad9f433f4f43 * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:15 2021 +0800 * * symbols: Sync module symbols into mod_symtable whenever module symbols * change * * Signed-off-by: Tao Liu <ltao@redhat.com> * Reviewed-by: Philipp Rudo <prudo@redhat.com> * * commit f3bee9375ed32b85e7f81a5e46a0040620553ae0 * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:14 2021 +0800 * * symbols: Intergrate symbol_exists() with mod_symname_hash search * * This patch introduces mod_symname_hash search to symbol_exists() * to improve its performance. And code refactoring for * kernel_symbol_exists(). * * Signed-off-by: Tao Liu <ltao@redhat.com> * Reviewed-by: Philipp Rudo <prudo@redhat.com> * * commit 340c6ad1a0a7ce76eb5d9397833bfc6a049e2b3b * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:13 2021 +0800 * * symbols: Extend symname_hash_search() with hash table select * * Previously symname_hash_search() can only search symbols from kernel's * symname_hash. This patch add hash table pointer as parameter for * symname_hash_search(). Thus symname_hash_search() can be used both for * symname_hash and mod_symname_hash searching. * * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit 214f9bf3727c3350401b3f4b4389258c24486e06 * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:12 2021 +0800 * * symbols: Integrate symbol_search() with mod_symname_hash search * * This patch introduces mod_symname_hash search to symbol_search(), * to get a better searching performance. * * Signed-off-by: Tao Liu <ltao@redhat.com> * Reviewed-by: Philipp Rudo <prudo@redhat.com> * * commit 2fab8fbc0c4f1c4cbe889de4cead5f7457a19f77 * Author: Tao Liu <ltao@redhat.com> * Date: Sat Oct 16 13:21:11 2021 +0800 * * symbols: Implement install and remove operations for mod_symname_hash * * Currently the sequence for symbol_search to search a symbol is: 1) * kernel symname hash table, 2) iterate all kernel symbols, 3) iterate * all kernel modules and their symbols. In the worst case, if a * non-exist symbol been searched, all 3 stages will be went through. The * time consuming status for each stage is like: * * stage 1 stage 2 stage 3 * 0.007000(ms) 0.593000(ms) 2.421000(ms) * * stage 3 takes too much time when comparing to stage 1. This patch * series introduces a symname hash table for kernel modules, to improve * the performance of symbol searching. * * Functions symbol_search() and symbol_exists() are fundamental and * widely used by other crash functions, thus the benefit of performance * improvement can get accumulated. For example, "ps -m" and "irq" * commands, which call the functions many times, will become faster with * the patch series. * * This patch indroduces mod_symname_hash, and its install/remove * operations. Since symbol_search() has to return the lowest address * symbol and symbol_search_next() returns the next lowest symbol, thus * the installation should be sorted ascendingly. * * In mod_symname_hash_install_range() scenario, spn are already arranged * ascendingly, so for mod_symname_hash_install(): * * Install spn previous to sp: * * If sp is the start of bucket, or * 1) spn->value is smaller than sp->value. * * Install spn next to sp: * * 1) sp->name_hash_next is NULL, or * 2) sp->name_hash_next->value is larger than spn->value * * spn->value is the kernel address of the symbol and will not change. * So we use it mainly to determine the sequence. When spn->value equals * sp->value, they must be symbols within a kernel module. * * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit f7e3b2d9b753793e230a5242974a111cdf139e49 * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Thu Sep 30 11:04:31 2021 +0900 * * .gitignore: add gdb-10.2 directory * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 05a3a328fcd8920e49926b6d1c9c81ce0b6acbca * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Thu Sep 9 15:23:27 2021 +0900 * * Remove text value cache code * * The text value cache was implemented for analysis of remote dumpfiles * using the deprecated "crash daemon" running on the remote host. On * updating GDB to 10.2, a regression occurred when we tried to fix a * "help -x" command problem, and there was no performance degradation * even without the text cache, so let's drop this functionality. * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit c1e256249426dd59ceea99038451a39e98a26790 * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Thu Aug 19 10:52:58 2021 +0900 * * Fix tab completion issues * * 1. The maximum number of tab completion candidates is limited to 200 * by default. Set it unlimited. * * 2. The output of tab completion is not wrapped with the screen width. * Get and use it when tab completion is invoked. * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 5c2d8d2d9da6423eec076fd51049d7b4677b61c6 * Author: Tao Liu <ltao@redhat.com> * Date: Tue Aug 17 16:21:43 2021 +0800 * * Set gdb max-value-size to be unlimited * * gdb-10.2 uses max-value-size as the maximum size in bytes that the * contents of a object may allocate. The default value of max-value-size * is 64K. However, it could be not enough for allocating an object which * requires larger space, and failed at the startup of crash. * * In gdb-7.6, there is no max-value-size check and works fine. So in * this patch, let's just set max-value-size to be unlimited. * * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit b8e1f2735b8dd1303aeb2affa309a2a409a82d38 * Author: Tao Liu <ltao@redhat.com> * Date: Mon Jul 26 09:58:54 2021 +0800 * * Add kernel version dependent check for getting length of log_end * * For kernels(>=2.4.9.11 [1] && <3.5 [2]), log_end was involved in the * kernel sources. * For kernels(>=2.6.25 [3]), log_end was defined as: * static unsigned log_end; * For kernels(<2.6.25), log_end was defined as: * static unsigned long log_end; * * Previously, the length of log_end is determined by get_symbol_length, * but it can be a regression when the returned length is 0 for some * cases and value unchecked: * * crash> help -t * ... * help: invalid size request: 0 type: "log_end" * * To solve the above issue, let's add a kernel version dependent check * to get its value appropriately when the length of the 'log_end' * returns a value of zero. * * [1]: https://elixir.bootlin.com/linux/2.4.9.11/source/kernel/printk.c#L74 * [2]: https://elixir.bootlin.com/linux/v3.5/source/kernel/printk.c * [3]: https://elixir.bootlin.com/linux/v2.6.25/source/kernel/printk.c#L104 * * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit 51f21b0d1c91a4ae02ebf0d8c81460ec8b6c1283 * Author: Tao Liu <ltao@redhat.com> * Date: Thu Jul 15 17:34:29 2021 +0800 * * x86_64_irq_eframe_link_init: Fix wrong instruction searching range * calculation * * In function x86_64_irq_eframe_link_init, instruction "push xxx" is * searched in addresses range from "common_interrupt" to the next nearby * symbol, in order to calculate the value of irq_eframe_link. The * searching distance is given by max_instructions, which is calculated * by end ranging address minus start ranging address. Then crash asks * gdb to disassemble max_instructions quantity of instructions. * * Taking max_instructions as the quantity of disassemble instructions is * inappropriate, because most x86_64 instructions have a length longer * than 1, as a consequence, much more than the actual needed * instructions get disassembled. * * In gdb-7.6 crash, the extra instructions are skipped by * "if (!strstr(buf, sp->name))", which breaks if one instruction doesn't * belongs to a symbol: * * 0xffffffff8005d5b4 <common_interrupt+0>: cld * 0xffffffff8005d5b5 <common_interrupt+1>: sub $0x48,%rsp * ... * 0xffffffff8005d61e <common_interrupt+106>: leaveq * 0xffffffff8005d61f <exit_intr>: mov %gs:0x10,%rcx * <--- searching stops here * ... * * In gdb-10.2 crash, "exit_intr" doesn't show, however it really exist. * As a result, searching for "push xxx" will go to a wrong place. * * 0xffffffff8005d5b4 <common_interrupt+0>: cld * 0xffffffff8005d5b5 <common_interrupt+1>: sub $0x48,%rsp * ... * 0xffffffff8005d61e <common_interrupt+106>: leave * 0xffffffff8005d61f <common_interrupt+107>: mov %gs:0x10,%rcx * <--- searching continues * ... * * (gdb) p exit_intr * $1 = {<text variable, no debug info>} 0xffffffff8005d61f * <common_interrupt+107> * (gdb) info symbol exit_intr * common_interrupt + 107 in section .text * * The previous way to determine start and end searching range is not * stable, otherwise we may encounter regression that cmd "bt" prints * wrong IRQ stack. This patch fix the bug by removing max_instructions * calculation, and directly ask gdb to disassemble addresses range from * "common_interrupt" to the next nearby symbol. * * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit fce91bec5bef534e52f3261cc289a21a2cdb5fe3 * Author: Tao Liu <ltao@redhat.com> * Date: Sun Jul 11 22:30:22 2021 +0800 * * Fix the failure of reporting vmcore and vmlinux do not match for * kernels(<2.6.11) * * There is a regression issue for kernels(<2.6.11) as below: * * $ crash 2.6.9-68.9/vmcore 2.6.9-68.9/vmlinux.gz * ... * GNU gdb (GDB) 10.2 * ... * crash: /var/tmp/vmlinux.gz_GLsAvX and 2.6.9-68.9/vmcore do not match! * * The reason is that it needs to read out the address of linux banner * with readmem() first, and then the read_string() will be able to read * the data from linux banner. So, for the kernels(<2.6.11) case, lets * still invoke get_symbol_data() to accomplish this. See the changes: * [1] https://elixir.bootlin.com/linux/v2.6.10/source/init/version.c#L38 * [2] https://elixir.bootlin.com/linux/v2.6.11/source/init/version.c#L38 * * Signed-off-by: Tao Liu <ltao@redhat.com> * Signed-off-by: Lianbo Jiang <lijiang@redhat.com> * * commit 8d6f677e54a2474b3da19402e29278b62603d71d * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Thu Jul 8 16:14:02 2021 -0700 * * Do not adjust addr by relocate offset(KASLR) * * GBD symbol resolution already considers relocation (KASLR) offset. * So, there is no needs to adjust the function address before calling * GDB. * * It fixes file name and line number output for 'dis -l' and 'sys -c' * commands. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * Signed-off-by: Tao Liu <ltao@redhat.com> * * commit 6c5f0c6ff5d158f2ef4fa997a052b0643d0c25ee * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:36 2021 -0700 * * vmware_guestdump: add debugging of the init function * * Dump memory and registers state after parsing. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * * commit 96716862765f73676bfdb2d19fc5872364d21b73 * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:35 2021 -0700 * * vmware backend: honor silence flag * * Do not print any boot messages in silence (-s) mode. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * * commit e832e0eb5bd8d97dfa9f4bd0e22fbfad849c11df * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:34 2021 -0700 * * Allow 'gdb disassemble' command for relocated kernel * * As new gdb is able to handle it properly. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * * commit 2f967fb5ebd737ce5eadba462df35935122e8865 * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:33 2021 -0700 * * crash_taget: fetch_registers support * * Provides API for crash_target to fetch registers of given * CPU. It will allow gdb to perform such commands as "bt", * "frame", "info locals". * * Highlevel API is crash_get_cpu_reg (). It calls machine * (architecture) specific function: machdep->get_cpu_reg(). * Input arguments such as register number and register size * come from gdb arch information. So, get_cpu_regs() * implementations in crash must understand it. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * * commit 0b85218983ffcf939a638f1133871079c5615a46 * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:30 2021 -0700 * * Fix reduced output of `bt` command * * gdb-10 produces reduced output of `bt` command. * * Changed disassembler output is the reason of missing frames * in backtrace. Call instruction mnemonic for x86_64 was changed * from "callq" to "call" in gdb-10. * * Fixing the issue by adding a search for "call" word in disassembler * parser. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * Reported-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 36e9d8673e9205f4ea4daad61c199597920c93df * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:27 2021 -0700 * * "whatis -m": fix duplications in the output * * "whatis -m" output started to generate duplicated results after GDB * update: * * crash> whatis -m mm_struct * SIZE TYPE * 16 tlb_state * ... * 256 linux_binprm * 2752 rq * 2752 rq <<-- duplicated * 2752 rq * 2752 rq * 2752 rq * 4048 task_struct * * It was caused by incorrect string comparisons. * Use strcmp for full string comparison instead of just string pointers * comparison. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * Reported-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 163abcbbabdf8207c11ee93b1c909d85ecbcbf1f * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Fri Mar 19 21:07:26 2021 -0700 * * crash_get_nr_cpus: get nr_cpus from the dumps * * Most of the dumps have information about real number of CPUS. * Use that to instantiate GDB's target inferior threads. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * * commit 9fab193edb34ddf30282b5ac137f7d8078198938 * Author: Alexey Makhalov <amakhalov@vmware.com> * Date: Tue Aug 17 17:14:59 2021 +0800 * * Update to gdb-10.2 * * Main changes: * [1] update gdb-7.6.patch to gdb-10.2.patch, and keep all functionality * and good compatibility * [2] remove unneeded patches(gdb-7.6-proc_service.h.patch and * gdb-7.6-ppc64le-support.patch) * [3] to make the c++ compiler happy, add the extern "C" to eliminate * compilation issues, also add CXXFLAGS=-m32 to generate proper * 32bit object files * [4] the parameter types of some functions are changed, eg, the set of * prettyprint variables * [5] eliminate error_hook() and SJLJ while running in C++ code (after * gdb_command_funnel()) use try-catch mechanism instead * [6] request_types() is redone to do not call GNU_GET_NEXT_DATATYPE * multiple times but single usage of GNU_ITERATE_DATATYPES with proper * callback instead. Complete iteration happens on C++ side now. * [7] remove "struct global_iterator" from request structure, but add * several fields (including callback pointer) to be able to perform * iteration on C++ side * [8] type of "linux_banner" symbol is reported as 'D' by new gdb as its * section ".rodata" marked as writable in vmlinux * [9] BFD API has changed. * [10] the deprecated_command_loop_hook got deprecated. So, call crash * main_loop() directly from gdb captured_main() * [11] remove previously used hooks for that in target.c. Add * crash_target for gdb to provide target operations such as xfer_partial * to read and write crash dump memory. * * Signed-off-by: Alexey Makhalov <amakhalov@vmware.com> * Signed-off-by: Lianbo Jiang <lijiang@redhat.com> * * commit 7f38d1baf794823355ee100b3a1914155d4190f2 * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Mon Sep 27 09:45:42 2021 +0900 * * diskdump: Add support for reading dumpfiles compressed by Zstandard * * Add support for reading dumpfiles compressed by Zstandard (zstd) * using makedumpfile. * * To build crash with zstd support, type "make zstd". * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit cf0c8d10e1870d89b39f40382634db51aa8fcf2c * Author: Hari Bathini <hbathini@linux.ibm.com> * Date: Fri Sep 3 17:33:42 2021 +0530 * * mod: fix module object file lookup * * On systems where vmlinux file is not under /usr/lib/debug/lib/modules * directory, 'mod -s|-S' command may fail to find the module's object * file with the below error: * * mod: cannot find or load object file for sd_mod module * * Fix it by trying all possible module object file extensions while * searching for the object file under /usr/lib/debug/lib/modules * directory. * * Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.ibm.com> * Signed-off-by: Hari Bathini <hbathini@linux.ibm.com> * * commit 15765867c0f1d937db5ec06f51adb6bfd13354ea * Author: Ritesh Harjani <riteshh@linux.ibm.com> * Date: Thu Aug 26 02:31:10 2021 +0530 * * ppc64: Add MMU type info in machdep command * * This adds MMU type info in "machdep" command. * * Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> * * commit 3db5fff2e9d7b8762d1bd46d8d2c47ba4c7e374f * Author: Ritesh Harjani <riteshh@linux.ibm.com> * Date: Thu Aug 26 02:31:08 2021 +0530 * * .gitignore: Add cscope, ctags & compile_commands.json * * Add cscope, ctags & compile_commands.json in .gitignore file. * * Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com> * * commit 4b34197508578bb43639e6d169fb91fb0489fa2b * Author: James Hsu <james.hsu@mediatek.com> * Date: Wed Aug 18 15:45:47 2021 +0800 * * arm64: Get CPU registers from ELF notes even without crash_notes symbol * * Currently arm64 crash retrieves the CPU registers from crash_notes symbol * or ELF notes only when the symbol exists, but there are dumpfiles which * have the registers in ELF notes without the symbol. * * With the patch, crash can retrieve the registers from ELF notes without * the crash_notes symbol. * * Signed-off-by: James Hsu <james.hsu@mediatek.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 44e5801d9016987b6b4ebd571bfde8ae3e75da7b * Author: Philipp Rudo <prudo@redhat.com> * Date: Thu Aug 5 15:19:37 2021 +0200 * * x86_64: Fix check for __per_cpu_offset initialization * * Since at least kernel v2.6.30 the __per_cpu_offset gets initialized to * __per_cpu_load. So first check if the __per_cpu_offset was set to a * proper value before reading any per cpu variable to prevent potential * bugs. * * [ kh: added check for the existence of __per_cpu_load ] * * Signed-off-by: Philipp Rudo <prudo@redhat.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 881f33d97cee9895796829d0cc969b51dd34d831 * Author: Roman Bolshakov <r.bolshakov@yadro.com> * Date: Thu Jun 17 02:27:35 2021 +0300 * * diskdump: Introduce read_pd() * * Standalone function for reading of page descriptors is needed later for * of expected core size and detection of incomplete dumps. * * Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> * * commit 1425b0504b1e79d88a2d188d7e4c0e7fceba4501 * Author: Roman Bolshakov <r.bolshakov@yadro.com> * Date: Thu Jun 17 02:27:34 2021 +0300 * * diskdump: Print total number of dumpable pages * * It's not clear how broken an incomplete dump from the existing debugging * prints. Aggregate number of valid pages helps to figure out approximate * size of the dump. Size of a complete dump is roughly: * * EXPECTED_CORE_SIZE = a few pages (kdump headers + bitmaps + descriptors) * (total_valid_pages * block_size) * compression rate * * An incomplete core would be significantly smaller than: * * total_valid_pages * block_size * * Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> * * commit 41cda195c6421fbde72ed67b32b8c1ab3eb0c56f * Author: Roman Bolshakov <r.bolshakov@yadro.com> * Date: Thu Jun 17 02:27:33 2021 +0300 * * netdump: Permit --zero_excluded for incomplete ELF dumps * * DUMP_ELF_INCOMPLETE is set very late after ENOSPC error is hit by * makedumpfile. Any following error that prevents modification of ELF * header would result in effectively incomplete core that doesn't have the * flag. zero_excluded flag doesn't work for such kind of incomplete core. * * Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> * * commit 4631320e96f8a63c897fbbce4e87e3c47af40bc9 * Author: Roman Bolshakov <r.bolshakov@yadro.com> * Date: Thu Jun 17 02:27:32 2021 +0300 * * diskdump: Fail readmem() early if dump is incomplete * * kdump format description [1] says: * * [...] zero page has its own offset not equal 0. So when reading page * from incomplete core, only the page lost by ENOSPACE errors has 0 in * its corresponding page descriptor's member offset. * * crash has special treatment for page descriptors with zero offset only * if DUMP_DH_COMPRESSED_INCOMPLETE is set in dump header. However, * makedumpfile places the flag after ENOSPC is hit and only if dump * header modification went without errors. * * In case if crashkernel environment was terminated early (e.g. by BMC) * or some other reason, DUMP_DH_COMPRESSED_INCOMPLETE won't be set on * the dump header. Then cache_page() would be performed on pages with * pd.offset == 0 and due to pd.size == 0 it'll skip read into * compressed_page and then non related pre-existing contents of * compressed_page will copied into page cache for the non-present page. * * Ultimately, it'll lead to a cryptic failure, like: * * crash: invalid kernel virtual address: 72288cacacf427f8 [...] * * The failure would be a bit cleaner if crash explicitly fails on the * page that is an outcome of incomplete dump: * * crash: page incomplete: kernel virtual address: c000003fff9d17e8 [...] * * Debugging level 8 would also produce exact offset from data_offset to * print descriptor value with ease: * * read_diskdump/cache_page: descriptor with zero offset found at * paddr/pfn/pos: 3fff9d0000/3fff9d/743dd * * That helps in inspecting broken descriptor with hexdump or similar * tools: * * hexdump -s (data_offset + pos * 0x18) -n 0x18 * * [1] https://github.com/makedumpfile/makedumpfile/ * blob/master/IMPLEMENTATION * * Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com> * * commit 80334ed25820cc08d147de5da361f427885cdd9e * Author: Aaron Tomlin <atomlin@redhat.com> * Date: Tue Jul 13 14:24:49 2021 +0100 * * kmem: Add support to -S option to specify a range of CPU-specific slab * data * * With this patch, it is now possible for one to explicitly specify a * range of CPU-specific slab data to list. For example: * * Note: This is only applicable to a Linux kernel with Kconfig * CONFIG_SLUB enabled. The optional argument GNU extension * for getopt(3) is utilized; and, the CPU range must be * specified as expected * * crash> kmem -S=1,4 kmalloc-512 * CACHE OBJSIZE ALLOCATED TOTAL SLABS SSIZE NAME * ffff8d3f07c06c00 512 1916 3680 115 16k kmalloc-512 * CPU 1 KMEM_CACHE_CPU: * ffff8d461fa6f140 * CPU 1 SLAB: * SLAB MEMORY NODE TOTAL ALLOCATED FREE * fffff540df7c4000 ffff8d45df100000 0 32 8 24 * FREE / [ALLOCATED] * ffff8d45df100000 (cpu 1 cache) * [ffff8d45df100200] * ffff8d45df101000 (cpu 1 cache) * ...skipped ... * CPU 4 KMEM_CACHE_CPU: * ffff8d461fb2f140 * CPU 4 SLAB: * SLAB MEMORY NODE TOTAL ALLOCATED FREE * fffff540dfde3800 ffff8d45f78e0000 0 32 8 24 * FREE / [ALLOCATED] * [ffff8d45f78e0000] * ffff8d45f78e0200 (cpu 4 cache) * ffff8d45f78e0400 (cpu 4 cache) * ...skipped ... * * Signed-off-by: Aaron Tomlin <atomlin@redhat.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit f53b73e8380bca054cebd2b61ff118c46609429b * Author: Pingfan Liu <piliu@redhat.com> * Date: Fri Jul 2 10:14:24 2021 +0800 * * arm64: implement switchable PTOV()/VTOP() for kernels >= 5.10 * * Crash encounters a bug like the following: * ... * SECTION_SIZE_BITS: 30 * CONFIG_ARM64_VA_BITS: 52 * VA_BITS_ACTUAL: 48 * (calculated) VA_BITS: 48 * PAGE_OFFSET: ffff000000000000 * VA_START: ffff800000000000 * modules: ffff800008000000 - ffff80000fffffff * vmalloc: ffff800010000000 - ffffffdfdffeffff * kernel image: ffff800010000000 - ffff800012750000 * vmemmap: ffffffdfffe00000 - ffffffffffffffff * * <readmem: ffff800011c53bc8, KVADDR, "nr_irqs", 4, (FOE), b47bdc> * <read_kdump: addr: ffff800011c53bc8 paddr: eb453bc8 cnt: 4> * read_netdump: addr: ffff800011c53bc8 paddr: eb453bc8 cnt: 4 * offset: 1c73bc8 * irq_stack_ptr: * type: 1, TYPE_CODE_PTR * target_typecode: 8, TYPE_CODE_INT * target_length: 8 * length: 8 * GNU_GET_DATATYPE[thread_union]: returned via gdb_error_hook * <readmem: ffff000b779c0050, KVADDR, "IRQ stack pointer", 8, (ROE), * 3a37bea0> * <read_kdump: addr: ffff000b779c0050 paddr: fff1000bf79c0050 cnt: 8> * read_netdump: READ_ERROR: offset not found for paddr: * fff1000bf79c0050 * crash: read error: kernel virtual address: ffff000b779c0050 type: * "IRQ stack pointer" * ... * * Apparently, for a normal system, the 'paddr: fff1000bf79c0050' is * unreasonable. * * This bug connects with kernel commit 7bc1a0f9e176 ("arm64: mm: use * single quantity to represent the PA to VA translation"), which removed * physvirt_offset kernel variable and changed the PTOV()/VTOP() formulas. * * Implement switchable PTOV()/VTOP() to cope with different kernel * version. * * Signed-off-by: Pingfan Liu <piliu@redhat.com> * * commit bf1379a8b6ff8d6a8fa12978f7194f15f85c4380 * Author: Pingfan Liu <piliu@redhat.com> * Date: Fri Jul 2 10:14:23 2021 +0800 * * arm64: use dedicated bits to record the VA space layout changes * * arm64 memory layout experiences big changes due to the following kernel * commits in date descending order: * 5. 7bc1a0f9e176 arm64: mm: use single quantity to represent the PA * to VA translation * 4. b6d00d47e81a arm64: mm: Introduce 52-bit Kernel VAs * 3. 5383cc6efed1 arm64: mm: Introduce vabits_actual * 2. 14c127c957c1 arm64: mm: Flip kernel VA space * 1. f80fb3a3d508 arm64: add support for kernel ASLR * * For 1, crash has already used NEW_VMEMMAP to trace it. * For 2, crash lacks a flag to tag it and handle it differently. * For 3, two important kernel variables vabits_actual and physvirt_offset * are introduced. * For 4, since it comes immediately after 3, crash-utility does not need * to distinguish it. * For 5, kernel variable phyvirt_offset is removed * * These changes have effects on PTOV()/VTOP() formula. So introducing * two bits HAS_PHYSVIRT_OFFSET and FLIPPED_VM as hint to apply different * formula. * * Signed-off-by: Pingfan Liu <piliu@redhat.com> * * commit 167d37e347fe35c6f7db826e8539e192c4375564 * Author: Pingfan Liu <piliu@redhat.com> * Date: Fri Jul 2 10:14:22 2021 +0800 * * arm64: assign page_offset with VA_BITS kernel configuration value * * On RHEL9, crash hits a bug when executing "crash /proc/kcore": * seek error: kernel virtual address: ffff6a0f3fff0000 type: "pmd page" * * The kernel virtual address does not vary with vabits_actual, instead, * is determined by configuration value. But crash does not observe this * fact. * * Since vabits_actual related kernel commit is introduced after arm64 * mm layout flip commit, so changes are safe under the condition if * (ms->VA_BITS_ACTUAL), and keep the else branch untouched. * * Signed-off-by: Pingfan Liu <piliu@redhat.com> * * commit 5719afc7a40868418405a87a2711088556e68a3b * Author: Pingfan Liu <piliu@redhat.com> * Date: Fri Jul 2 10:14:21 2021 +0800 * * arm64: rename ARM64_PAGE_OFFSET_ACTUAL to ARM64_FLIP_PAGE_OFFSET_ACTUAL * * Reflect the flipped layout of kernel VA, which is introduced by * kernel commit 14c127c957c1 ("arm64: mm: Flip kernel VA space"). * * Signed-off-by: Pingfan Liu <piliu@redhat.com> * * commit d6b4f36d6b22b70fb14e692f36d20910ef5563c1 * Author: Alexander Egorenkov <egorenar@linux.ibm.com> * Date: Tue Jun 29 08:39:00 2021 +0200 * * Handle task_struct state member changes for kernels >= 5.14-rc1 * * Kernel commit 2f064a59a11ff9bc22e52e9678bc601404c7cb34 ("sched: Change * task_struct::state") renamed the member state of task_struct to __state * and its type changed from long to unsigned int. Without the patch, * crash fails to start up with the following error: * * crash: invalid structure member offset: task_struct_state * FILE: task.c LINE: 5929 FUNCTION: task_state() * * Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> * * commit 4badc6229c69f5cd9da7eb7bdf400a53ec6db01a * Author: Petr Tesařík <ptesarik@suse.cz> * Date: Fri Jun 25 17:21:18 2021 +0200 * * Fix pvops Xen detection for kernels >= v4.20 * * Kernel commit 5c83511bdb9832c86be20fb86b783356e2f58062 removed * pv_init_ops, and later commit 054ac8ad5ebe4a69e1f0e842483821ddbe560121 * removed the Xen-specific paravirt patch function. As a result, pvops Xen * dumps are no longer recognized as Xen dumps, and virtual-to-physical * translation fails. * * Use the value of xen_start_info to determine whether the kernel is * running in Xen PV mode. This pointer is set during the initialization of * a PV domain. Kudos to Juergen Gross, who suggested this check. * * Signed-off-by: Petr Tesarik <ptesarik@suse.com> * * commit eaf14f852ae79f7745934e213661f1c6abac711e * Author: Greg Edwards <gedwards@ddn.com> * Date: Wed Jun 23 13:50:47 2021 -0600 * * Fix 'waitq' command for Linux 4.13 and later kernels * * The wait queue structs and members were renamed in 4.13 in commits: * * ac6424b981bc ("sched/wait: Rename wait_queue_t => wait_queue_entry_t") * 9d9d676f595b ("sched/wait: Standardize internal naming of wait-queue * heads") * 2055da97389a ("sched/wait: Disambiguate wq_entry->task_list and * wq_head->task_list naming") * * Add support to the 'waitq' command for these more recent kernels. * * [ kh: suppressed compilation warnings ] * * Signed-off-by: Greg Edwards <gedwards@ddn.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit f091b5e76d2d6e81b12cd40df7b5863c9e2efed1 * Author: Firo Yang <firo.yang@suse.com> * Date: Tue May 25 18:17:37 2021 +0800 * * list: add -O option for specifying head node offset * * The -O option is very useful to specify the embedded head node's * offset which is different to the offset of other nodes embedded, * e.g. dentry.d_subdirs (the head node) and dentry.d_child. * * [ kh: did some cosmetic adjustments ] * * Signed-off-by: Firo Yang <firo.yang@suse.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit e61841a8b86ac551c314f74f4b82daae84f99700 * Author: Luc Chouinard <lucchouina@gmail.com> * Date: Wed Jun 9 07:59:40 2021 -0400 * * extensions/eppic.mk: Enable use of alternate eppic branch * * Made significant changes and fixes to eppic. * Using options in the clone command break due to args parsing. * Use separate variable for clone options. * * Closes: https://github.com/crash-utility/crash/pull/86 * * commit c15a1e025e62134094ba0ac600263d75673d5a22 * Author: Youling Tang <tangyouling@loongson.cn> * Date: Fri Apr 23 15:42:11 2021 +0800 * * MIPS64: three fixes for MIPS64 kernels * * Three fixes for MIPS64 kernels: * (1) To support ramdumps, add the machine_type() check for MIPS64 in * ramdump_to_elf(). * (2) To fix a stuck issue when invoking crash with "-d1" or larger * debug value, add the machine_type() check to get the correct * dump NOTE offsets. * (3) Fix the reference file path to the definition of the pt_regs * structure, to which mips64_regster refers. * * [ kh: merged three patches into one ] * * Signed-off-by: Youling Tang <tangyouling@loongson.cn> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 859d1c0e8a6618634cbc1fe7ee2b082a6a3c99a1 * Author: Youling Tang <tangyouling@loongson.cn> * Date: Fri Apr 23 15:40:41 2021 +0800 * * MIPS32/64: Add 'irq' command support * * Add support for the 'irq' series of commands in the MIPS32/64 * architecture, except for the 'irq -d' command, others can be * used. Without the patch, the 'irq' command fails as follows: * * irq: cannot determine number of IRQs * * Signed-off-by: Youling Tang <tangyouling@loongson.cn> * * commit 704623dfde43da98ffb354b3d7f450cd012a8215 * Author: Youling Tang <tangyouling@loongson.cn> * Date: Thu Jun 3 16:07:41 2021 +0800 * * defs.h: Fix the value of TIF_SIGPENDING macro * * Correct the change of the value of TIF_SIGPENDING macro between * different kernel versions. * * TIF_SIGPENDING changes with the kernel version as follows: * ARM 2 -> 0 at v2.6.23 * MIPS 2 -> 1 at v2.6.23 * MIPS64 2 -> 1 at v2.6.23 * PPC 2 -> 1 at v2.6.23 * IA64 1 -> 0 at v2.6.23 * PPC64 2 -> 1 at v2.6.23 * S390 2 -> 1 at v3.16 * S390X 2 -> 1 at v3.16 * * Signed-off-by: Youling Tang <tangyouling@loongson.cn> * * commit ec44b902d3467e7b86ee39e2d7d472b9cb202148 * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Mon May 31 14:08:28 2021 +0900 * * memory: Fix for "kmem -n" option to display NID correctly * * The nid member of struct memory_block is a 4-byte integer, but read * and printed as a 8-byte integer on 64-bit machines. Without the * patch, the option displays wrong NIDs. * * crash> kmem -n * ... * MEM_BLOCK ... NODE STATE START_SECTION_NO * ffff9edeff2b9400 ... 14195095130662240256 ONLINE 0 * ffff9edeff2bb400 ... 14195094718345379840 ONLINE 32 * * The issue seems to appear on Linux 5.12 and later kernels that contain * commit e9a2e48e8704c ("drivers/base/memory: don't store phys_device * in memory blocks"), which changed the arrangement of the members of * struct memory_block. * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 0b5435e10161345cf713ed447a155a611a1b408b * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Wed May 26 17:33:13 2021 +0900 * * memory: Add support for SECTION_TAINT_ZONE_DEVICE flag * * Fix for "kmem -n|-p" options on Linux 5.12-rc1 and later kernels * that contain commit 1f90a3477df3f ("mm: teach pfn_to_online_page() * about ZONE_DEVICE section collisions"). Without the patch, the * "kmem -n" option incorrectly shows mem_map addresses containing the * flag in bit 5 as part of the virtual address, and also the "kmem -p" * option shows page structures at wrong position. With the patch, * the "kmem -n" option displays the new "D" state flag. * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 647a5c33e1c94054d7b63168cd6c12901591cb77 * Author: Lianbo Jiang <lijiang@redhat.com> * Date: Thu May 27 18:02:11 2021 +0800 * * Fix for "kmem -s|-S" option on Linux 5.7 and later kernels * * Linux 5.7 and later kernels that contain kernel commit 1ad53d9fa3f6 * ("slub: improve bit diffusion for freelist ptr obfuscation") changed * the calculation formula in the freelist_ptr(), which added a swab() * call to mix bits a little more. When kernel is configured with the * "CONFIG_SLAB_FREELIST_HARDENED=y", without the patch, the "kmem -s|-S" * options display wrong statistics and state whether slab objects are * in use or free and can print the following errors: * * ... * * Signed-off-by: Lianbo Jiang <lijiang@redhat.com> * * commit a7ecf2467f953b632713f38ab8104596755bca8c * Author: John Donnelly <john.p.donnelly@oracle.com> * Date: Wed May 12 14:48:03 2021 -0700 * * arm64: Add lowercase tcr_el1_t1sz * * Commit 1c45cea "arm64: Change tcr_el1_t1sz variable name to * TCR_EL1_T1SZ", renamed the variable to upper case, but there are * kernels in existence that still have the lower case name, which * breaks crash backwards compatibility. * * Resolves: https://github.com/crash-utility/crash/pull/82 * Signed-off-by: John Donnelly <john.p.donnelly@oracle.com> * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * * commit 1ee4c407d7874b8eef17e863671edc8ccfdd7c71 * Author: Kazuhito Hagio <k-hagio-ab@nec.com> * Date: Tue May 18 10:18:10 2021 +0900 * * Mark start of 7.3.1 development phase with version 7.3.0++ * * Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com> * Checksums-Sha1: 6ec87972824536dff7450370a8c74713cc41959f 1951 crash_8.0.0-1.dsc 010f36b837eee8f79f4b3ea606b716ef202e2ed6 41020726 crash_8.0.0.orig.tar.gz 36453a388fe056f11ba228b1275236e710cf772d 130048 crash_8.0.0-1.debian.tar.xz 91d2eaab12d02a2849a60d0ae9dae359e8155330 6877 crash_8.0.0-1_amd64.buildinfo Checksums-Sha256: 03e5b568c33e5c8d2a085d509dfd2503a4429572c9f1cd4893641127d6d71079 1951 crash_8.0.0-1.dsc cb2190912473f1d7c302e5ac76bbeb50ba696f763e838233c8e3c9cbea45fd56 41020726 crash_8.0.0.orig.tar.gz fff66818b2be1d222a9db4835c4aa07733f52ed00776ec117d9ed245bdef9082 130048 crash_8.0.0-1.debian.tar.xz d07d0894f321792d95e01129bdbed5f68e8e34d06a1e39d074c0872392ba7aee 6877 crash_8.0.0-1_amd64.buildinfo Files: c57eb41fcfd6e92f2dc14ccd9895c382 1951 utils optional crash_8.0.0-1.dsc 2db47120a686904060a751b21d0b0e79 41020726 utils optional crash_8.0.0.orig.tar.gz 839375a24174bb790ee2e9e0defa821e 130048 utils optional crash_8.0.0-1.debian.tar.xz e233335879d6b105395086d7b902ee4e 6877 utils optional crash_8.0.0-1_amd64.buildinfo -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEPdPUPs0+tNeF/HYE23wDYLLLZZcFAmI6FyEACgkQ23wDYLLL ZZfQ7w/8CzpqzBKhigcC+mT+hSAr8rcvkbJZinrUaDdbpBPQDd4H34S1jYHkQWti AuYqakN65pihh5dsQ+oTutmTTleBLf7VAwQmjasBQI7JBQXjegwY3WKRKfqyvXSA oPt51h9D68X/5TW+sBiSPv8cnL5fJSt07Ia7cOtudUbMiwnlSBm/tnIOYLuWvAvW VM1FSy2isYJUen+Dw84MnMyRuC12XO+8wJhJF2r4KzjTLs+Bfta2wSudu99nt2JW 0SKfWXB8TS5O0Nw2t8a0MCVKewQhw/cA2iZzfEdZt9e6wNv6JDks+MaAKcStf8az qeC2q5xzuMwUUDLCP7e3UO/ef97FtiSOiMYBnP3XmfnJEuL9vWOuxirPOTFwpu4T tYJ82vCqE1WHzXhz/cwtfqurafuvrmj89pkNAN1wJ2XPAuwCx1kPxI/HOCdnE7Og z6JbLn7hnGr77hatEqs3MamWFu+MNyYb1GjA2Liw1pgYLgo25M+geQU7G6o8Do25 0twXzjxwO3dk44f1mCdH0LhUwH7LBlgdoAvsmIqOHbqeRcZwzSeAzmiLFJ8PDpXI zRRdWliZP9uTeY9IS7t5TJBQgJmLFJ8N2mLXzRNla/yJFWUSu5rDw0ydjDKfw0gj rNTY3d37GpM+5dj0KXwerMHTbcFXbZPX/jVBhY9AIso+UrHx00I= =9Bvx -----END PGP SIGNATURE-----