diff options
author | Himbeer <himbeer@disroot.org> | 2024-05-30 22:32:02 +0200 |
---|---|---|
committer | Himbeer <himbeer@disroot.org> | 2024-05-30 22:32:33 +0200 |
commit | be268f916dfdcbd2ac2a0d17788e738388c779c8 (patch) | |
tree | b4246bdf45bd3b9ce10e9d0d57bdaa645801d640 | |
parent | ad402b0163afe834b1c9214265fc14331a3f9141 (diff) |
linking: Merge regular sections and their small counterparts
Fixes #22.
-rw-r--r-- | linker.ld | 17 | ||||
-rw-r--r-- | src/kernel.zig | 2 | ||||
-rw-r--r-- | src/lib/paging.zig | 6 |
3 files changed, 3 insertions, 22 deletions
@@ -34,6 +34,7 @@ SECTIONS { PROVIDE(_rodata_start = .); *(.rodata .rodata.*) + *(.srodata .srodata.*) PROVIDE(_rodata_end = .); } > ram AT > ram : lo_r @@ -41,29 +42,17 @@ SECTIONS { PROVIDE(_data_start = .); *(.data .data.*) - - PROVIDE(_data_end = .); - } > ram AT > ram : lo_rw - .sdata : ALIGN(4K) { - PROVIDE(_sdata_start = .); - *(.sdata .sdata.*) - PROVIDE(_sdata_end = .); + PROVIDE(_data_end = .); } > ram AT > ram : lo_rw .bss : ALIGN(4K) { PROVIDE(_bss_start = .); *(.bss .bss.*) - - PROVIDE(_bss_end = .); - } > ram AT > ram : lo_rw - .sbss : ALIGN(4K) { - PROVIDE(_sbss_start = .); - *(.sbss .sbss.*) - PROVIDE(_sbss_end = .); + PROVIDE(_bss_end = .); } > ram AT > ram : lo_rw /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } diff --git a/src/kernel.zig b/src/kernel.zig index 2478a48..47d1f05 100644 --- a/src/kernel.zig +++ b/src/kernel.zig @@ -146,9 +146,7 @@ fn pagedRun() !noreturn { try w.print(".text: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (r-x)\r\n", .{ @intFromPtr(paging.text_start), @intFromPtr(paging.text_end) }); try w.print(".rodata: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (r--)\r\n", .{ @intFromPtr(paging.rodata_start), @intFromPtr(paging.rodata_end) }); try w.print(".data: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.data_start), @intFromPtr(paging.data_end) }); - try w.print(".sdata: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.sdata_start), @intFromPtr(paging.sdata_end) }); try w.print(".bss: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.bss_start), @intFromPtr(paging.bss_end) }); - try w.print(".sbss: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.sbss_start), @intFromPtr(paging.sbss_end) }); try w.print("Stack: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.stack_start), @intFromPtr(paging.stack_end) }); try w.print("Trap Stack: 0x{x:0>8} - 0x{x:0>8} -> identity mapped (rw-)\r\n", .{ @intFromPtr(paging.stvec_stack_start), @intFromPtr(paging.stvec_stack_end) }); try w.print("\r\n", .{}); diff --git a/src/lib/paging.zig b/src/lib/paging.zig index 52ea5a6..129fc84 100644 --- a/src/lib/paging.zig +++ b/src/lib/paging.zig @@ -14,12 +14,8 @@ pub const rodata_start = @extern(*anyopaque, .{ .name = "_rodata_start" }); pub const rodata_end = @extern(*anyopaque, .{ .name = "_rodata_end" }); pub const data_start = @extern(*anyopaque, .{ .name = "_data_start" }); pub const data_end = @extern(*anyopaque, .{ .name = "_data_end" }); -pub const sdata_start = @extern(*anyopaque, .{ .name = "_sdata_start" }); -pub const sdata_end = @extern(*anyopaque, .{ .name = "_sdata_end" }); pub const bss_start = @extern(*anyopaque, .{ .name = "_bss_start" }); pub const bss_end = @extern(*anyopaque, .{ .name = "_bss_end" }); -pub const sbss_start = @extern(*anyopaque, .{ .name = "_sbss_start" }); -pub const sbss_end = @extern(*anyopaque, .{ .name = "_sbss_end" }); pub const stack_start = @extern(*anyopaque, .{ .name = "_stack_start" }); pub const stack_end = @extern(*anyopaque, .{ .name = "_stack_end" }); pub const stvec_stack_start = @extern(*anyopaque, .{ .name = "_stvec_stack_start" }); @@ -432,9 +428,7 @@ pub const Table = struct { try root.identityMapRange(@intFromPtr(text_start), @intFromPtr(text_end), EntryFlags.readExec); try root.identityMapRange(@intFromPtr(rodata_start), @intFromPtr(rodata_end), EntryFlags.readOnly); try root.identityMapRange(@intFromPtr(data_start), @intFromPtr(data_end), EntryFlags.readWrite); - try root.identityMapRange(@intFromPtr(sdata_start), @intFromPtr(sdata_end), EntryFlags.readWrite); try root.identityMapRange(@intFromPtr(bss_start), @intFromPtr(bss_end), EntryFlags.readWrite); - try root.identityMapRange(@intFromPtr(sbss_start), @intFromPtr(sbss_end), EntryFlags.readWrite); try root.identityMapRange(@intFromPtr(stack_start), @intFromPtr(stack_end), EntryFlags.readWrite); try root.identityMapRange(@intFromPtr(stvec_stack_start), @intFromPtr(stvec_stack_end), EntryFlags.readWrite); try root.identityMapRange(@intFromPtr(heap_start), @intFromPtr(heap_end), EntryFlags.readWrite); |