[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] Set max-page-size when linking the kernel to 0x1000.
From: |
Flavio Cruz |
Subject: |
[PATCH] Set max-page-size when linking the kernel to 0x1000. |
Date: |
Sun, 8 Jan 2023 22:26:26 -0500 |
With the exception of linux, x86_64 ld default's max-page-size
is 2MB (default for i386 is 4K) and compiling gnumach with x86_64-pc-gnu-ld
will generate a kernel image where the boot section starts at the file offset
2MB. This makes it unbootable on grub because the file is no longer multiboot.
Here's the objdump -h output before the patch:
Sections:
Idx Name Size VMA LMA File off Algn
0 .boot 0000c000 0000000001000000 0000000001000000 00200000 2**12
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .text 0009078f 000000004100c000 000000000100c000 0020c000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .rodata 000110fc 000000004109c7a0 000000000109c7a0 0029c7a0 2**5
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .eh_frame 000101f0 00000000410ad8a0 00000000010ad8a0 002ad8a0 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .data 000070a0 00000000412bdaa0 00000000012bdaa0 002bdaa0 2**5
CONTENTS, ALLOC, LOAD, DATA
5 .bss 00023f10 00000000412c5000 00000000012c5000 002c4b40 2**12
ALLOC
6 .comment 00000012 0000000000000000 0000000000000000 002c4b40 2**0
CONTENTS, READONLY
After, when forcing ld's max-page-size to be 4K:
Sections:
Idx Name Size VMA LMA File off Algn
0 .boot 0000c000 0000000001000000 0000000001000000 00001000 2**12
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .text 0009078f 000000004100c000 000000000100c000 0000d000 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .rodata 000110fc 000000004109c7a0 000000000109c7a0 0009d7a0 2**5
CONTENTS, ALLOC, LOAD, READONLY, DATA
3 .eh_frame 000101f0 00000000410ad8a0 00000000010ad8a0 000ae8a0 2**3
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .data 000070a0 00000000410beaa0 00000000010beaa0 000beaa0 2**5
CONTENTS, ALLOC, LOAD, DATA
5 .bss 00023f10 00000000410c6000 00000000010c6000 000c5b40 2**12
ALLOC
6 .comment 00000012 0000000000000000 0000000000000000 000c5b40 2**0
CONTENTS, READONLY
It is also possible that something is wrong with the linker script but
couldn't find anything concrete so far. After this patch the kernel is
bootable with x86_64-pc-gnu-ld (and far smaller in size).
---
x86_64/Makefrag.am | 1 +
1 file changed, 1 insertion(+)
diff --git a/x86_64/Makefrag.am b/x86_64/Makefrag.am
index edf533fd..1ee1092a 100644
--- a/x86_64/Makefrag.am
+++ b/x86_64/Makefrag.am
@@ -262,6 +262,7 @@ gnumach_LINKFLAGS += \
--defsym _START_MAP=$(_START_MAP) \
--defsym _START=$(_START_MAP) \
--defsym KERNEL_MAP_SHIFT=$(KERNEL_MAP_BASE) \
+ -z max-page-size=0x1000 \
-T '$(srcdir)'/x86_64/ldscript
AM_CCASFLAGS += \
--
2.39.0
- [PATCH] Set max-page-size when linking the kernel to 0x1000.,
Flavio Cruz <=