- In kernel version 2.6.20 a "__bug_table" section has been added to the kernel for x86 and x86_64, which contains the encoding for the filename and line number information associated with each instance of a kernel BUG(). Prior to that, x86 and x86_64 kernels may have contained the filename/line-number encoding in the bytes following the BUG()'s "ud2a" instruction. When disassembled, the output would display a series of nonsensical instructions, or perhaps one or more "(bad)" instruction lines, before eventually getting back in sync with the actual instruction stream. Whether the encoded bytes were included depends upon the kernel version, whether CONFIG_DEBUG_BUGVERBOSE was configured, or whether an "#if 1" surrounding the BUG() definition was manually changed. This version of crash determines whether the encoded bytes exist, and if so, the embedded gdb disassembler has been modified to skip over those bytes, resulting in correct "dis" command output. If necessary, a "dis -b" option has been added to override the pre-calculated encoded byte count value. (anderson@xxxxxxxxxx) - Fix for the x86 backtrace code to also recognize the encoded filename and line number information potentially following "ud2a" instructions generated by kernel BUG() calls. In order to determine the framesize of a function, the backtrace code does its own text disassembly to count instances of push, pop, and stack register increments/decrements. Without this patch, the framesize calculation may either be too small or too large, depending upon the contents of the encoded data following the BUG()'s ud2a instruction. Therefore, it is possible that one or more bogus frames are selected and displayed, and/or one or more legitimate frames are skipped over. For example, when it affected the framesize calculation of schedule(), backtraces of all non-active tasks ending up in schedule() would be invalid. Here's an example in which the schedule() framesize was miscalulated: PID: 1292 TASK: ed78a000 CPU: 0 COMMAND: "setroubleshootd" #0 [c07fdba8] schedule at c05f370e #1 [c07fdcb4] __journal_file_buffer at ee05126d #2 [c07fdcd8] __journal_file_buffer at ee05126d #3 [c07fdd08] ext3_mark_iloc_dirty at ee08837d #4 [c07fdd38] journal_dirty_metadata at ee052a13 #5 [c07fdd80] __find_get_block at c0463f59 #6 [c07fddac] __find_get_block at c0463f59 #7 [c07fddf0] find_get_page at c0444294 #8 [c07fddfc] filemap_nopage at c0446cf5 #9 [c07fde6c] find_extend_vma at c0454132 #10 [c07fde7c] get_futex_key at c042f9f6 #11 [c07fde94] futex_wake at c042fe2a #12 [c07fdeb8] do_futex at c0430a19 #13 [c07fdfac] sys_poll at c047254b #14 [c07fdfb8] system_call at c0404cf8 EAX: ffffffda EBX: 09f3da18 ECX: 00000002 EDX: 00000064 DS: 007b ESI: 00000064 ES: 007b EDI: 00342ff4 SS: 007b ESP: bfe76d04 EBP: bfe76d18 CS: 0073 EIP: 0094a402 ERR: 000000a8 EFLAGS: 00200246 With the fix, it looks like this: PID: 1292 TASK: ed78a000 CPU: 0 COMMAND: "setroubleshootd" #0 [c07fdba8] schedule at c05f370e #1 [c07fdc0c] schedule_timeout at c05f3e7c #2 [c07fdc30] do_sys_poll at c047243e #3 [c07fdfac] sys_poll at c047254b #4 [c07fdfb8] system_call at c0404cf8 EAX: ffffffda EBX: 09f3da18 ECX: 00000002 EDX: 00000064 DS: 007b ESI: 00000064 ES: 007b EDI: 00342ff4 SS: 007b ESP: bfe76d04 EBP: bfe76d18 CS: 0073 EIP: 0094a402 ERR: 000000a8 EFLAGS: 00200246 In the example above, the schedule() framesize was miscalculated because the post-ud2a text contained the filename pointer address c060fe0b, and the "60" was decoded as a "pusha" instruction; that occurred twice, each time incrementing the framesize by 32 bytes. (anderson@xxxxxxxxxx) - Added preparations for an upcoming version update to kdump's associated makedumpfile utility, which will return an error if a read attempt of a page that has been explicitly excluded is made. Until now, a zero-filled page was returned. To maintain the current behavior of returning a zero-filled page when accessing an excluded page, three options are available: 1) use the "--zero_excluded" crash command line option. 2) during runtime, enter "set zero_excluded on". 3) enter "set zero_excluded on" in your .crashrc file. (anderson@xxxxxxxxxx, oomichi@xxxxxxxxxxxxxxxxx, bob.montgomery@xxxxxx) - Implemented "help -n" debug output function for compressed diskdump and compressed kdump dumpfiles. As is done for the other dumpfile formats, the core file's header information along with any other run-time dumpfile data is displayed. (anderson@xxxxxxxxxx) - If the page-exclusion "dump_level" of a compressed diskdump, a compressed kdump, or an ELF diskdump dumpfile exists and can be determined, its value and bitmask translation will be displayed as part of the "help -n" dumpfile debug output. Also, has been done with partial ELF diskdumps, if a compressed diskdump or compressed kdump can be confirmed as a partial dump, the "[PARTIAL DUMP]" indicator will follow the dumpfile name during initialization and by the "sys" command. (anderson@xxxxxxxxxx, oomichi@xxxxxxxxxxxxxxxxx, indou.takao@xxxxxxxxxxxxxx, akiyama.nobuyuk@xxxxxxxxxxxxxx) - Support for xendumps of fully-virtualized x86_64 relocatable kernels. Without the patch, the physical base address was not being determined, and the session would fail during initialization with the error message: " crash: vmlinux and core do not match!" (anderson@xxxxxxxxxx) - Fix for 4.0-3.21 "BOOKE" ppc.c patch, which failed to compile. (antipov@xxxxxxxxxxxxx) Download from: http://people.redhat.com/anderson -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility