代码拉取完成,页面将自动刷新
同步操作将从 OpenCloudOS Stream/kexec-tools 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 9df89b0198a61f3c5e29cfb41787c4ca99f502e6 Mon Sep 17 00:00:00 2001
From: Ming Wang <wangming01@loongson.cn>
Date: Fri, 17 May 2024 10:39:31 +0800
Subject: [PATCH] kexec: loongarch: fix some issue.
Signed-off-by: Hongchen Zhang <zhanghongchen@loongson.cn>
Signed-off-by: Ming Wang <wangming01@loongson.cn>
Signed-off-by: Your Name <you@example.com>
---
kexec/arch/loongarch/kexec-elf-loongarch.c | 28 ++++++++++++++++++----
kexec/arch/loongarch/kexec-loongarch.c | 11 +++++----
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/kexec/arch/loongarch/kexec-elf-loongarch.c b/kexec/arch/loongarch/kexec-elf-loongarch.c
index 0ac451e..7e84d03 100644
--- a/kexec/arch/loongarch/kexec-elf-loongarch.c
+++ b/kexec/arch/loongarch/kexec-elf-loongarch.c
@@ -54,6 +54,7 @@ int elf_loongarch_load(int argc, char **argv, const char *kernel_buf,
unsigned long kernel_segment;
struct mem_ehdr ehdr;
int result;
+ int i;
result = build_elf_exec_info(kernel_buf, kernel_size, &ehdr, 0);
@@ -62,6 +63,26 @@ int elf_loongarch_load(int argc, char **argv, const char *kernel_buf,
goto exit;
}
+ /* Find and process the loongarch image header. */
+ for (i = 0; i < ehdr.e_phnum; i++) {
+ struct mem_phdr *phdr = &ehdr.e_phdr[i];
+
+ if (phdr->p_type != PT_LOAD)
+ continue;
+
+ header = (const struct loongarch_image_header *)(
+ kernel_buf + phdr->p_offset);
+
+ if (!loongarch_process_image_header(header))
+ break;
+ }
+
+ if (i == ehdr.e_phnum) {
+ dbgprintf("%s: Valid loongarch image header not found\n", __func__);
+ result = EFAILED;
+ goto exit;
+ }
+
kernel_segment = loongarch_locate_kernel_segment(info);
if (kernel_segment == ULONG_MAX) {
@@ -72,13 +93,12 @@ int elf_loongarch_load(int argc, char **argv, const char *kernel_buf,
dbgprintf("%s: kernel_segment: %016lx\n", __func__, kernel_segment);
dbgprintf("%s: image_size: %016lx\n", __func__,
- kernel_size);
+ loongarch_mem.image_size);
dbgprintf("%s: text_offset: %016lx\n", __func__,
loongarch_mem.text_offset);
dbgprintf("%s: phys_offset: %016lx\n", __func__,
loongarch_mem.phys_offset);
- dbgprintf("%s: PE format: %s\n", __func__,
- (loongarch_header_check_pe_sig(header) ? "yes" : "no"));
+ dbgprintf("%s: PE format: no\n", __func__);
/* create and initialize elf core header segment */
if (info->kexec_flags & KEXEC_ON_CRASH) {
@@ -112,7 +132,7 @@ int elf_loongarch_load(int argc, char **argv, const char *kernel_buf,
kernel_size = MiB(64);
/* load additional data */
- result = loongarch_load_other_segments(info, kernel_segment + kernel_size);
+ result = loongarch_load_other_segments(info, kernel_segment + loongarch_mem.image_size);
exit:
free_elf_info(&ehdr);
diff --git a/kexec/arch/loongarch/kexec-loongarch.c b/kexec/arch/loongarch/kexec-loongarch.c
index 51f334a..6485080 100644
--- a/kexec/arch/loongarch/kexec-loongarch.c
+++ b/kexec/arch/loongarch/kexec-loongarch.c
@@ -288,6 +288,7 @@ int loongarch_load_other_segments(struct kexec_info *info, unsigned long hole_mi
unsigned long initrd_min, hole_max;
char *initrd_buf = NULL;
unsigned long pagesize = getpagesize();
+ int i;
if (arch_options.command_line) {
if (strlen(arch_options.command_line) >
@@ -325,15 +326,17 @@ int loongarch_load_other_segments(struct kexec_info *info, unsigned long hole_mi
cmdline_add_elfcorehdr(cmdline, elfcorehdr_mem.start,
elfcorehdr_mem.end - elfcorehdr_mem.start + 1);
- cmdline_add_mem(cmdline, crash_reserved_mem[usablemem_rgns.size - 1].start,
- crash_reserved_mem[usablemem_rgns.size - 1].end -
- crash_reserved_mem[usablemem_rgns.size - 1].start + 1);
+ for(i = 0;i < usablemem_rgns.size; i++) {
+ cmdline_add_mem(cmdline, crash_reserved_mem[i].start,
+ crash_reserved_mem[i].end -
+ crash_reserved_mem[i].start + 1);
+ }
}
cmdline[sizeof(cmdline) - 1] = 0;
add_buffer(info, cmdline, sizeof(cmdline), sizeof(cmdline),
sizeof(void *), _ALIGN_UP(hole_min, getpagesize()),
- 0xffffffff, 1);
+ hole_max, 1);
dbgprintf("%s:%d: command_line: %s\n", __func__, __LINE__, cmdline);
--
2.41.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。