kexec/kdump fails to load in ELF symbol relocation on ppc64 arch
WANG Chao
chaowang at redhat.com
Tue Jul 22 03:42:55 PDT 2014
Hi, Laurent
With gcc -fexceptions, kexec/kdump fails to load:
# kexec -p /boot/vmlinuz
Warning: append= option is not passed. Using the first kernel root partition
REL24 -157778404 out of range!
(I'll attach the full log of kexec -d in the end of this email)
I narrowed it down to the following commit (git-bisect):
commit d047cb7
Author: Laurent Dufour <ldufour at linux.vnet.ibm.com>
Date: Mon Feb 3 15:37:49 2014 +0100
kexec/ppc64 ELF ABIv2 ABI support
When building in PPC64 little endian mode, the compiler is now using the
new ABI v2. Among other changes, this new ABI remove the function
descriptors and changes the way the TOC address is computed when entering a
C function.
The purgatory assembly part where the dot symbols are removed, and ELF
relocation code are impacted in this patch.
Signed-off-by: Laurent Dufour <ldufour at linux.vnet.ibm.com>
Signed-off-by: Simon Horman <horms at verge.net.au>
This is a ppc64 big endian platform. If I mask -fexceptions or use a
previous version of kexec (prior to this commit), load is just fine.
Could you please look into this issue? Let me know if you need anything
and I'm happy to test once you have a patch.
Thanks
WANG Chao
(Full output of kexec -d -p):
# kexec -d -p /boot/vmlinuz
kernel: 0x3fffab640010 kernel_size: 0x1330e28
0000000010000000-0000000018000000 : 0
0000000018000000-0000000020000000 : 0
0000000020000000-0000000028000000 : 0
0000000028000000-0000000030000000 : 0
0000000030000000-0000000038000000 : 0
0000000038000000-0000000040000000 : 0
0000000040000000-0000000048000000 : 0
0000000000000000-0000000010000000 : 0
get base memory ranges:8
usable memory rgns size:1 base:ee90000 size:1170000
exclude_range sorted exclude_range[0] start:0, end:1650000
exclude_range sorted exclude_range[1] start:ee90000, end:10000000
setup_memory_ranges memory_range[0] start:1650001, end:ee8ffff
get memory ranges:1
Warning: append= option is not passed. Using the first kernel root
partition
CRASH MEMORY RANGES
0000000000000000-0000000000010000
0000000010000000-0000000018000000
0000000018000000-0000000020000000
0000000020000000-0000000028000000
0000000028000000-0000000030000000
0000000030000000-0000000038000000
0000000038000000-0000000040000000
0000000000010000-0000000008000000
000000000ee90000-0000000010000000
get_crash_notes_per_cpu: crash_notes addr = 17193d0, size = 536
Elf header: p_type = 4, p_offset = 0x17193d0 p_paddr = 0x17193d0
p_vaddr = 0x0 p_filesz = 0x218 p_memsz = 0x218
get_crash_notes_per_cpu: crash_notes addr = 17593d0, size = 536
Elf header: p_type = 4, p_offset = 0x17593d0 p_paddr = 0x17593d0
p_vaddr = 0x0 p_filesz = 0x218 p_memsz = 0x218
get_crash_notes_per_cpu: crash_notes addr = 17993d0, size = 536
Elf header: p_type = 4, p_offset = 0x17993d0 p_paddr = 0x17993d0
p_vaddr = 0x0 p_filesz = 0x218 p_memsz = 0x218
get_crash_notes_per_cpu: crash_notes addr = 17d93d0, size = 536
Elf header: p_type = 4, p_offset = 0x17d93d0 p_paddr = 0x17d93d0
p_vaddr = 0x0 p_filesz = 0x218 p_memsz = 0x218
vmcoreinfo header: p_type = 4, p_offset = 0x1517d60 p_paddr = 0x1517d60
p_vaddr = 0x0 p_filesz = 0x1000 p_memsz = 0x1000
Elf header: p_type = 1, p_offset = 0x9650000 p_paddr = 0x0 p_vaddr =
0xc000000000000000 p_filesz = 0x10000 p_memsz = 0x10000
Elf header: p_type = 1, p_offset = 0x10000000 p_paddr = 0x10000000
p_vaddr = 0xc000000010000000 p_filesz = 0x8000000 p_memsz = 0x8000000
Elf header: p_type = 1, p_offset = 0x18000000 p_paddr = 0x18000000
p_vaddr = 0xc000000018000000 p_filesz = 0x8000000 p_memsz = 0x8000000
Elf header: p_type = 1, p_offset = 0x20000000 p_paddr = 0x20000000
p_vaddr = 0xc000000020000000 p_filesz = 0x8000000 p_memsz = 0x8000000
Elf header: p_type = 1, p_offset = 0x28000000 p_paddr = 0x28000000
p_vaddr = 0xc000000028000000 p_filesz = 0x8000000 p_memsz = 0x8000000
Elf header: p_type = 1, p_offset = 0x30000000 p_paddr = 0x30000000
p_vaddr = 0xc000000030000000 p_filesz = 0x8000000 p_memsz = 0x8000000
Elf header: p_type = 1, p_offset = 0x38000000 p_paddr = 0x38000000
p_vaddr = 0xc000000038000000 p_filesz = 0x8000000 p_memsz = 0x8000000
Elf header: p_type = 1, p_offset = 0x10000 p_paddr = 0x10000 p_vaddr =
0xc000000000010000 p_filesz = 0x7ff0000 p_memsz = 0x7ff0000
Elf header: p_type = 1, p_offset = 0xee90000 p_paddr = 0xee90000
p_vaddr = 0xc00000000ee90000 p_filesz = 0x1170000 p_memsz = 0x1170000
Command line after adding elfcorehdr: elfcorehdr=153984K
sym: _savegpr0_27 info: 10 other: 00 shndx: 2 value: 950 size: 0
sym: _savegpr0_27 value: 9670950 addr: 9670004
sym: .data info: 03 other: 00 shndx: 8 value: 0 size: 0
sym: .data value: 9678570 addr: 967000e
sym: .data info: 03 other: 00 shndx: 8 value: 0 size: 0
sym: .data value: 9678570 addr: 9670012
sym: .sha256_starts info: 12 other: 00 shndx: 2 value: 9d4 size: c0
sym: .sha256_starts value: 96709d4 addr: 9670020
sym: .sha256_update info: 12 other: 00 shndx: 2 value: 7a9c size: 1a4
sym: .sha256_update value: 9677a9c addr: 9670038
sym: .sha256_finish info: 12 other: 00 shndx: 2 value: 7c40 size: 5cc
sym: .sha256_finish value: 9677c40 addr: 9670054
sym: .memcmp info: 12 other: 00 shndx: 2 value: 548 size: 3c
sym: .memcmp value: 9670548 addr: 9670068
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 967820c addr: 967007a
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 967823c addr: 967007e
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 967820c addr: 9670082
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 9670088
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 967822c addr: 9670092
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 967823c addr: 9670096
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 967822c addr: 967009a
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 967009c
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 96700b4
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678242 addr: 96700c6
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678242 addr: 96700ce
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 96700d8
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678244 addr: 96700e2
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678244 addr: 96700e6
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 96700e8
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 96700f8
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 967010c
sym: _restgpr0_27 info: 10 other: 00 shndx: 2 value: 9a0 size: 0
sym: _restgpr0_27 value: 96709a0 addr: 967011c
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678254 addr: 9670132
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678254 addr: 9670136
sym: .printf info: 12 other: 00 shndx: 2 value: 460 size: 54
sym: .printf value: 9670460 addr: 9670140
sym: .setup_arch info: 12 other: 00 shndx: 2 value: 818 size: 10
sym: .setup_arch value: 9670818 addr: 9670148
sym: .verify_sha256_digest info: 12 other: 00 shndx: 2 value: 0 size:
12c
sym: .verify_sha256_digest value: 9670000 addr: 9670150
sym: .post_verification_setup_arch info: 12 other: 00 shndx: 2 value:
828 size: 40
sym: .post_verification_setup_arch value: 9670828 addr: 9670160
sym: _savegpr0_24 info: 10 other: 00 shndx: 2 value: 944 size: 0
sym: _savegpr0_24 value: 9670944 addr: 9670188
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678266 addr: 9670192
sym: .rodata.str1.1 info: 03 other: 00 shndx: 4 value: 0 size: 0
sym: .rodata.str1.1 value: 9678266 addr: 96701aa
sym: .putchar info: 12 other: 00 shndx: 2 value: 868 size: 68
sym: .putchar value: 9670868 addr: 96701d4
sym: .putchar info: 12 other: 00 shndx: 2 value: 868 size: 68
sym: .putchar value: 9670868 addr: 967021c
sym: .putchar info: 12 other: 00 shndx: 2 value: 868 size: 68
sym: .putchar value: 9670868 addr: 96703dc
sym: _restgpr0_24 info: 10 other: 00 shndx: 2 value: 994 size: 0
sym: _restgpr0_24 value: 9670994 addr: 9670408
sym: .vsprintf info: 12 other: 00 shndx: 2 value: 184 size: 294
sym: .vsprintf value: 9670184 addr: 9670440
sym: .vsprintf info: 12 other: 00 shndx: 2 value: 184 size: 294
sym: .vsprintf value: 9670184 addr: 9670494
sym: my_toc info: 11 other: 00 shndx: 8 value: 148 size: 8
sym: my_toc value: 96786b8 addr: 9670712
sym: my_toc info: 11 other: 00 shndx: 8 value: 148 size: 8
sym: my_toc value: 96786b8 addr: 9670716
sym: my_toc info: 11 other: 00 shndx: 8 value: 148 size: 8
sym: my_toc value: 96786b8 addr: 967071e
sym: my_toc info: 11 other: 00 shndx: 8 value: 148 size: 8
sym: my_toc value: 96786b8 addr: 9670722
sym: stack info: 11 other: 00 shndx: 8 value: 158 size: 8
sym: stack value: 96786c8 addr: 967072a
sym: stack info: 11 other: 00 shndx: 8 value: 158 size: 8
sym: stack value: 96786c8 addr: 967072e
sym: stack info: 11 other: 00 shndx: 8 value: 158 size: 8
sym: stack value: 96786c8 addr: 9670736
sym: stack info: 11 other: 00 shndx: 8 value: 158 size: 8
sym: stack value: 96786c8 addr: 967073a
sym: .purgatory info: 12 other: 00 shndx: 2 value: 12c size: 58
sym: .purgatory value: 967012c addr: 9670744
sym: dt_offset info: 11 other: 00 shndx: 8 value: 150 size: 8
sym: dt_offset value: 96786c0 addr: 967075e
sym: dt_offset info: 11 other: 00 shndx: 8 value: 150 size: 8
sym: dt_offset value: 96786c0 addr: 9670762
sym: dt_offset info: 11 other: 00 shndx: 8 value: 150 size: 8
sym: dt_offset value: 96786c0 addr: 967076a
sym: dt_offset info: 11 other: 00 shndx: 8 value: 150 size: 8
sym: dt_offset value: 96786c0 addr: 967076e
sym: opal_base info: 11 other: 00 shndx: 8 value: 130 size: 8
sym: opal_base value: 96786a0 addr: 967078a
sym: opal_base info: 11 other: 00 shndx: 8 value: 130 size: 8
sym: opal_base value: 96786a0 addr: 967078e
sym: opal_base info: 11 other: 00 shndx: 8 value: 130 size: 8
sym: opal_base value: 96786a0 addr: 9670796
sym: opal_base info: 11 other: 00 shndx: 8 value: 130 size: 8
sym: opal_base value: 96786a0 addr: 967079a
sym: opal_entry info: 11 other: 00 shndx: 8 value: 128 size: 8
sym: opal_entry value: 9678698 addr: 96707a2
sym: opal_entry info: 11 other: 00 shndx: 8 value: 128 size: 8
sym: opal_entry value: 9678698 addr: 96707a6
sym: opal_entry info: 11 other: 00 shndx: 8 value: 128 size: 8
sym: opal_entry value: 9678698 addr: 96707ae
sym: opal_entry info: 11 other: 00 shndx: 8 value: 128 size: 8
sym: opal_entry value: 9678698 addr: 96707b2
sym: kernel info: 11 other: 00 shndx: 8 value: 140 size: 8
sym: kernel value: 96786b0 addr: 96707ba
sym: kernel info: 11 other: 00 shndx: 8 value: 140 size: 8
sym: kernel value: 96786b0 addr: 96707be
sym: kernel info: 11 other: 00 shndx: 8 value: 140 size: 8
sym: kernel value: 96786b0 addr: 96707c6
sym: kernel info: 11 other: 00 shndx: 8 value: 140 size: 8
sym: kernel value: 96786b0 addr: 96707ca
sym: run_at_load info: 10 other: 00 shndx: 2 value: 65c size: 4
sym: run_at_load value: 967065c addr: 96707d2
sym: run_at_load info: 10 other: 00 shndx: 2 value: 65c size: 4
sym: run_at_load value: 967065c addr: 96707d6
sym: run_at_load info: 10 other: 00 shndx: 2 value: 65c size: 4
sym: run_at_load value: 967065c addr: 96707de
sym: run_at_load info: 10 other: 00 shndx: 2 value: 65c size: 4
sym: run_at_load value: 967065c addr: 96707e2
sym: .data info: 03 other: 00 shndx: 8 value: 0 size: 0
sym: .data value: 9678690 addr: 967082a
sym: .data info: 03 other: 00 shndx: 8 value: 0 size: 0
sym: .data value: 9678690 addr: 967082e
sym: .crashdump_backup_memory info: 12 other: 00 shndx: 2 value: 8d0
size: 4c
sym: .crashdump_backup_memory value: 96708d0 addr: 9670844
sym: .toc info: 03 other: 00 shndx: d value: 0 size: 0
sym: .toc value: 9678830 addr: 967086a
sym: .toc info: 03 other: 00 shndx: d value: 0 size: 0
sym: .toc value: 9678830 addr: 967086e
sym: .putchar info: 12 other: 00 shndx: 2 value: 868 size: 68
sym: .putchar value: 9670868 addr: 967089c
sym: .plpar_hcall_norets info: 10 other: 00 shndx: 2 value: 7fc size: 0
sym: .plpar_hcall_norets value: 96707fc addr: 96708b4
sym: _restgpr0_31 info: 10 other: 00 shndx: 2 value: 9c4 size: 0
sym: _restgpr0_31 value: 96709c4 addr: 96708c0
sym: .toc info: 03 other: 00 shndx: d value: 0 size: 0
sym: .toc value: 9678838 addr: 96708d2
sym: .toc info: 03 other: 00 shndx: d value: 0 size: 0
sym: .toc value: 9678838 addr: 96708d6
sym: .memcpy info: 12 other: 00 shndx: 2 value: 518 size: 30
sym: .memcpy value: 9670518 addr: 96708f8
sym: .memcpy info: 12 other: 00 shndx: 2 value: 518 size: 30
sym: .memcpy value: 9670518 addr: 9677b74
sym: .sha256_process info: 12 other: 00 shndx: 2 value: a94 size: 7008
sym: .sha256_process value: 9670a94 addr: 9677b8c
sym: .sha256_process info: 12 other: 00 shndx: 2 value: a94 size: 7008
sym: .sha256_process value: 9670a94 addr: 9677bc8
sym: .memcpy info: 12 other: 00 shndx: 2 value: 518 size: 30
sym: .memcpy value: 9670518 addr: 9677c18
sym: .data info: 03 other: 00 shndx: 8 value: 0 size: 0
sym: .data value: 96786d8 addr: 9677d7a
sym: .data info: 03 other: 00 shndx: 8 value: 0 size: 0
sym: .data value: 96786d8 addr: 9677d7e
sym: .sha256_update info: 12 other: 00 shndx: 2 value: 7a9c size: 1a4
sym: .sha256_update value: 9677a9c addr: 9677d84
sym: .sha256_update info: 12 other: 00 shndx: 2 value: 7a9c size: 1a4
sym: .sha256_update value: 9677a9c addr: 9677d98
sym: ._Unwind_Resume info: 10 other: 00 shndx: 0 value: 0 size: 0
sym: ._Unwind_Resume value: 0 addr: 96781e4
REL24 -157778404 out of range!
More information about the kexec
mailing list