:: commit d3856efdc6e01829e45ed88fade232d4c096af5c

Mintsuki <mintsuki@protonmail.com> — 2026-02-07 16:08

parents: e93d6933dc

protos/multiboot2: Adjust ELF section sh_addr by reloc_slide after relocation

diff --git a/common/protos/multiboot2.c b/common/protos/multiboot2.c
index cad1160d..38d699fc 100644
--- a/common/protos/multiboot2.c
+++ b/common/protos/multiboot2.c
@@ -522,7 +522,11 @@ reloc_fail:
             if (bits == 64)  {
                 struct elf64_shdr *shdr = (void *)tag->sections + i * section_hdr_info.section_entry_size;
 
-                if (shdr->sh_addr != 0 || shdr->sh_size == 0) {
+                if (shdr->sh_addr != 0) {
+                    shdr->sh_addr += reloc_slide;
+                    continue;
+                }
+                if (shdr->sh_size == 0) {
                     continue;
                 }
 
@@ -543,7 +547,11 @@ reloc_fail:
             } else {
                 struct elf32_shdr *shdr = (void *)tag->sections + i * section_hdr_info.section_entry_size;
 
-                if (shdr->sh_addr != 0 || shdr->sh_size == 0) {
+                if (shdr->sh_addr != 0) {
+                    shdr->sh_addr += (int32_t)reloc_slide;
+                    continue;
+                }
+                if (shdr->sh_size == 0) {
                     continue;
                 }
 
tab: 248 wrap: offon