* [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures
@ 2023-07-25 10:01 Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 1/3] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Petr Tesarik
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Petr Tesarik @ 2023-07-25 10:01 UTC (permalink / raw)
To: kexec
From: Petr Tesarik <petr.tesarik.ext@huawei.com>
The kexec_file_load(2) syscall does not work at least in some kernel
builds. For details see the relevant section in this blog post:
https://sigillatum.tesarici.cz/2023-07-21-state-of-riscv64-kdump.html
This patch series handles additional relocation types and removes the need
to implement a Global Offset Table (GOT) for the purgatory.
Petr Tesarik (2):
riscv/kexec: handle R_RISCV_ADD16 and R_RISCV_SUB16 relocation types
riscv/purgatory: do not link with string.o
Torsten Duwe (1):
riscv/kexec: handle R_RISCV_CALL_PLT relocation type
arch/riscv/kernel/elf_kexec.c | 7 +++++++
arch/riscv/purgatory/Makefile | 9 +--------
2 files changed, 8 insertions(+), 8 deletions(-)
--
2.25.1
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v1 1/3] riscv/kexec: handle R_RISCV_CALL_PLT relocation type
2023-07-25 10:01 [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesarik
@ 2023-07-25 10:01 ` Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 2/3] riscv/kexec: handle R_RISCV_ADD16 and R_RISCV_SUB16 relocation types Petr Tesarik
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Petr Tesarik @ 2023-07-25 10:01 UTC (permalink / raw)
To: kexec
From: Torsten Duwe <duwe@suse.de>
R_RISCV_CALL has been deprecated and replaced by R_RISCV_CALL_PLT. See Enum
18-19 in Table 3. Relocation types here:
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc
It was deprecated in ("Deprecated R_RISCV_CALL, prefer R_RISCV_CALL_PLT"):
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/commit/a0dced85018d7a0ec17023c9389cbd70b1dbc1b0
Recent tools (at least GNU binutils-2.40) already use R_RISCV_CALL_PLT.
Kernels built with such binutils fail kexec_load_file(2) with:
kexec_image: Unknown rela relocation: 19
kexec_image: Error loading purgatory ret=-8
The binary code at the call site remains the same, so tell
arch_kexec_apply_relocations_add() to handle _PLT alike.
Fixes: 838b3e28488f ("RISC-V: Load purgatory in kexec_file")
Signed-off-by: Torsten Duwe <duwe@suse.de>
Signed-off-by: Petr Tesarik <petr.tesarik.ext@huawei.com>
Cc: Li Zhengyu <lizhengyu3@huawei.com>
Cc: stable@vger.kernel.org
---
arch/riscv/kernel/elf_kexec.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index 5372b708fae2..38390d3bdcac 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -425,6 +425,7 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
* sym, instead of searching the whole relsec.
*/
case R_RISCV_PCREL_HI20:
+ case R_RISCV_CALL_PLT:
case R_RISCV_CALL:
*(u64 *)loc = CLEAN_IMM(UITYPE, *(u64 *)loc) |
ENCODE_UJTYPE_IMM(val - addr);
--
2.25.1
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 2/3] riscv/kexec: handle R_RISCV_ADD16 and R_RISCV_SUB16 relocation types
2023-07-25 10:01 [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 1/3] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Petr Tesarik
@ 2023-07-25 10:01 ` Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 3/3] riscv/purgatory: do not link with string.o Petr Tesarik
2023-07-25 10:06 ` [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesařík
3 siblings, 0 replies; 5+ messages in thread
From: Petr Tesarik @ 2023-07-25 10:01 UTC (permalink / raw)
To: kexec
From: Petr Tesarik <petr.tesarik.ext@huawei.com>
16-bit add and subtract relocation types are used by the purgatory code
when the kernel is built with CONFIG_RISCV_ALTERNATIVES. If they are not
handled, kexec_file_load(2) fails with:
Unknown rela relocation: 34
kexec_image: Error loading purgatory ret=-8
or later with:
Unknown rela relocation: 38
kexec_image: Error loading purgatory ret=-8
Note that alternatives are not yet handled in purgatory code; this patch
merely allows to load it.
Fixes: 838b3e28488f ("RISC-V: Load purgatory in kexec_file")
Signed-off-by: Petr Tesarik <petr.tesarik.ext@huawei.com>
Cc: Li Zhengyu <lizhengyu3@huawei.com>
Cc: stable@vger.kernel.org
---
arch/riscv/kernel/elf_kexec.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/arch/riscv/kernel/elf_kexec.c b/arch/riscv/kernel/elf_kexec.c
index 38390d3bdcac..f23fd419c402 100644
--- a/arch/riscv/kernel/elf_kexec.c
+++ b/arch/riscv/kernel/elf_kexec.c
@@ -444,6 +444,12 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
case R_RISCV_SUB32:
*(u32 *)loc -= val;
break;
+ case R_RISCV_ADD16:
+ *(u16 *)loc += val;
+ break;
+ case R_RISCV_SUB16:
+ *(u16 *)loc -= val;
+ break;
/* It has been applied by R_RISCV_PCREL_HI20 sym */
case R_RISCV_PCREL_LO12_I:
case R_RISCV_ALIGN:
--
2.25.1
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v1 3/3] riscv/purgatory: do not link with string.o
2023-07-25 10:01 [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 1/3] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 2/3] riscv/kexec: handle R_RISCV_ADD16 and R_RISCV_SUB16 relocation types Petr Tesarik
@ 2023-07-25 10:01 ` Petr Tesarik
2023-07-25 10:06 ` [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesařík
3 siblings, 0 replies; 5+ messages in thread
From: Petr Tesarik @ 2023-07-25 10:01 UTC (permalink / raw)
To: kexec
From: Petr Tesarik <petr.tesarik.ext@huawei.com>
Linking with this object file it makes kexec_file_load(2) fail with:
kexec_image: Unknown rela relocation: 20
kexec_image: Error loading purgatory ret=-8
This is R_RISCV_GOT_HI20, generated by the linker to handle references to
the global variable _ctype from strcasecmp() and strncasecmp().
Rather than implementing GOT for the purgatory, remove the object file,
because it is not needed by the purgatory code.
Fixes: 838b3e28488f ("RISC-V: Load purgatory in kexec_file")
Signed-off-by: Petr Tesarik <petr.tesarik.ext@huawei.com>
Cc: Li Zhengyu <lizhengyu3@huawei.com>
Cc: stable@vger.kernel.org
---
arch/riscv/purgatory/Makefile | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/arch/riscv/purgatory/Makefile b/arch/riscv/purgatory/Makefile
index dc20e166983e..497bb72b6ba8 100644
--- a/arch/riscv/purgatory/Makefile
+++ b/arch/riscv/purgatory/Makefile
@@ -1,15 +1,12 @@
# SPDX-License-Identifier: GPL-2.0
OBJECT_FILES_NON_STANDARD := y
-purgatory-y := purgatory.o sha256.o entry.o string.o ctype.o memcpy.o memset.o
+purgatory-y := purgatory.o sha256.o entry.o ctype.o memcpy.o memset.o
purgatory-y += strcmp.o strlen.o strncmp.o
targets += $(purgatory-y)
PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
-$(obj)/string.o: $(srctree)/lib/string.c FORCE
- $(call if_changed_rule,cc_o_c)
-
$(obj)/ctype.o: $(srctree)/lib/ctype.c FORCE
$(call if_changed_rule,cc_o_c)
@@ -32,7 +29,6 @@ $(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
$(call if_changed_rule,cc_o_c)
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
-CFLAGS_string.o := -D__DISABLE_EXPORTS
CFLAGS_ctype.o := -D__DISABLE_EXPORTS
# When profile-guided optimization is enabled, llvm emits two different
@@ -83,9 +79,6 @@ CFLAGS_purgatory.o += $(PURGATORY_CFLAGS)
CFLAGS_REMOVE_sha256.o += $(PURGATORY_CFLAGS_REMOVE)
CFLAGS_sha256.o += $(PURGATORY_CFLAGS)
-CFLAGS_REMOVE_string.o += $(PURGATORY_CFLAGS_REMOVE)
-CFLAGS_string.o += $(PURGATORY_CFLAGS)
-
CFLAGS_REMOVE_ctype.o += $(PURGATORY_CFLAGS_REMOVE)
CFLAGS_ctype.o += $(PURGATORY_CFLAGS)
--
2.25.1
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures
2023-07-25 10:01 [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesarik
` (2 preceding siblings ...)
2023-07-25 10:01 ` [PATCH v1 3/3] riscv/purgatory: do not link with string.o Petr Tesarik
@ 2023-07-25 10:06 ` Petr Tesařík
3 siblings, 0 replies; 5+ messages in thread
From: Petr Tesařík @ 2023-07-25 10:06 UTC (permalink / raw)
To: Petr Tesarik; +Cc: kexec
Hi,
oops. I wanted to _add_ the kexec ML to all other recipients, but I
somehow screwed up, so this version is sent _only_ to the kexec ML. If
you reply here, the other recipients will not see your reply. The real
thread is here:
https://lore.kernel.org/lkml/cover.1690274483.git.petr.tesarik.ext@huawei.com/
I'm sorry
Petr T
On Tue, 25 Jul 2023 12:01:07 +0200
Petr Tesarik <petrtesarik@huaweicloud.com> wrote:
> From: Petr Tesarik <petr.tesarik.ext@huawei.com>
>
> The kexec_file_load(2) syscall does not work at least in some kernel
> builds. For details see the relevant section in this blog post:
>
> https://sigillatum.tesarici.cz/2023-07-21-state-of-riscv64-kdump.html
>
> This patch series handles additional relocation types and removes the need
> to implement a Global Offset Table (GOT) for the purgatory.
>
> Petr Tesarik (2):
> riscv/kexec: handle R_RISCV_ADD16 and R_RISCV_SUB16 relocation types
> riscv/purgatory: do not link with string.o
>
> Torsten Duwe (1):
> riscv/kexec: handle R_RISCV_CALL_PLT relocation type
>
> arch/riscv/kernel/elf_kexec.c | 7 +++++++
> arch/riscv/purgatory/Makefile | 9 +--------
> 2 files changed, 8 insertions(+), 8 deletions(-)
>
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-07-25 10:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-07-25 10:01 [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 1/3] riscv/kexec: handle R_RISCV_CALL_PLT relocation type Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 2/3] riscv/kexec: handle R_RISCV_ADD16 and R_RISCV_SUB16 relocation types Petr Tesarik
2023-07-25 10:01 ` [PATCH v1 3/3] riscv/purgatory: do not link with string.o Petr Tesarik
2023-07-25 10:06 ` [PATCH v1 0/3] RISC-V: Fix a few kexec_file_load(2) failures Petr Tesařík
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox