summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/linker.ld28
1 files changed, 18 insertions, 10 deletions
diff --git a/kernel/linker.ld b/kernel/linker.ld
index 9a0561b..3c960fa 100644
--- a/kernel/linker.ld
+++ b/kernel/linker.ld
@@ -9,6 +9,12 @@ CHECKSUM = -(MAGIC + FLAGS);
SECTIONS
{
+ /DISCARD/ :
+ {
+ *(.fini)
+ *(.comment)
+ }
+
/* It's a raw solution. */
/* Automatic generation of filling .multiboot section needs. */
.multiboot ALIGN(START_ADDR, CONSTANT(MAXPAGESIZE)) : ALIGN(CONSTANT(MAXPAGESIZE))
@@ -22,13 +28,21 @@ SECTIONS
{
_text = .;
*(.text*)
+ *(.init)
+ . = ALIGN(CONSTANT(MAXPAGESIZE));
_etext = .;
} > REGION_TEXT
- .rodata ALIGN(CONSTANT(MAXPAGESIZE)): ALIGN(CONSTANT(MAXPAGESIZE))
+ .rodata :
{
_rodata = .;
*(.rodata*)
+ HIDDEN(__CTOR_LIST__ = .);
+ *(.ctors)
+ HIDDEN(__CTOR_END__ = .);
+ HIDDEN(__DTOR_LIST__ = .);
+ *(.dtors)
+ HIDDEN(__DTOR_END__ = .);
_erodata = .;
} > REGION_RODATA
@@ -51,14 +65,14 @@ SECTIONS
{
_stack = ABSOLUTE(.);
. += 4 * CONSTANT(MAXPAGESIZE);
- _estack = ABSOLUTE(.);
+ _estack = ABSOLUTE(.) - 1;
} > REGION_DATA
.kheap ALIGN(CONSTANT(MAXPAGESIZE)) : ALIGN(CONSTANT(MAXPAGESIZE))
{
- _startKheap = ABSOLUTE(.);
+ _kheap = ABSOLUTE(.);
. += CONSTANT(MAXPAGESIZE);
- _endKheap = ABSOLUTE(.);
+ _ekheap = ABSOLUTE(.) - 1;
} > REGION_DATA
.eh_frame :
@@ -68,10 +82,4 @@ SECTIONS
_e_eh_frame = .;
} > REGION_COMMON
- .ctors :
- {
- SORT_BY_NAME(CONSTRUCTORS)
- } > REGION_COMMON
-
-
}