diff --git a/lab3/kernel/process/thread.c b/lab3/kernel/process/thread.c index 095d77b..31d517e 100644 --- a/lab3/kernel/process/thread.c +++ b/lab3/kernel/process/thread.c @@ -193,7 +193,7 @@ static u64 load_binary(struct process *process, // 复制段内存 section_data = bin + elf->p_headers[i].p_offset; - alloc_section = (char *) phys_to_virt(pmo->start); + alloc_section = (char *) phys_to_virt(pmo->start) + (p_vaddr & (PAGE_SIZE - 1)); kdebug("Copy segment[%d] from addr %lx -> %lx, len = %d\n", i, section_data, alloc_section, seg_sz); memcpy(alloc_section, section_data, seg_sz); diff --git a/lab4/kernel/process/thread.c b/lab4/kernel/process/thread.c index 84b716b..d66adff 100644 --- a/lab4/kernel/process/thread.c +++ b/lab4/kernel/process/thread.c @@ -207,7 +207,7 @@ static u64 load_binary(struct process *process, // 复制段内存 section_data = bin + elf->p_headers[i].p_offset; - alloc_section = (char *) phys_to_virt(pmo->start); + alloc_section = (char *) phys_to_virt(pmo->start) + (p_vaddr & (PAGE_SIZE - 1)); kdebug("Copy segment[%d] from addr %lx -> %lx, len = %d\n", i, section_data, alloc_section, seg_sz); memcpy(alloc_section, section_data, seg_sz);