Kernel: Cleanup constructor calls

This commit is contained in:
Bananymous 2024-08-31 02:23:08 +03:00
parent 2ae2ede0b2
commit ddf1babfe1
8 changed files with 18 additions and 40 deletions

View File

@ -216,12 +216,11 @@ higher_half:
# call global constuctors
call _init
movl $__init_array_start, %ebx
movl $g_init_array_start, %ebx
jmp 2f
1: movl (%ebx), %eax
call *%eax
1: call *(%ebx)
addl $4, %ebx
2: cmpl $__init_array_end, %ebx
2: cmpl $g_init_array_end, %ebx
jne 1b
# call to the kernel itself (clear ebp for stacktrace)

View File

@ -14,11 +14,3 @@ _fini:
pushl %ebp
movl %esp, %ebp
/* gcc will nicely put the contents of crtbegin.o's .fini section here. */
.section .init_array
.global __init_array_start
__init_array_start:
.section .fini_array
.global __fini_array_start
__fini_array_start:

View File

@ -8,11 +8,3 @@
/* gcc will nicely put the contents of crtend.o's .fini section here. */
popl %ebp
ret
.section .init_array
.global __init_array_end
__init_array_end:
.section .fini_array
.global __fini_array_end
__fini_array_end:

View File

@ -30,6 +30,12 @@ SECTIONS
{
*(.rodata.*)
}
.init_array ALIGN(4K) : AT(ADDR(.init_array) - KERNEL_OFFSET)
{
g_init_array_start = .;
*(.init_array)
g_init_array_end = .;
}
.data ALIGN(4K) : AT(ADDR(.data) - KERNEL_OFFSET)
{
g_kernel_writable_start = .;

View File

@ -216,12 +216,11 @@ higher_half:
# call global constuctors
call _init
movq $__init_array_start, %rbx
movq $g_init_array_start, %rbx
jmp 2f
1: movq (%rbx), %rax
call *%rax
1: call *(%rbx)
addq $8, %rbx
2: cmpq $__init_array_end, %rbx
2: cmpq $g_init_array_end, %rbx
jne 1b
# call to the kernel itself (clear rbp for stacktrace)

View File

@ -14,11 +14,3 @@ _fini:
pushq %rbp
movq %rsp, %rbp
/* gcc will nicely put the contents of crtbegin.o's .fini section here. */
.section .init_array
.global __init_array_start
__init_array_start:
.section .fini_array
.global __fini_array_start
__fini_array_start:

View File

@ -8,11 +8,3 @@
/* gcc will nicely put the contents of crtend.o's .fini section here. */
popq %rbp
ret
.section .init_array
.global __init_array_end
__init_array_end:
.section .fini_array
.global __fini_array_end
__fini_array_end:

View File

@ -30,6 +30,12 @@ SECTIONS
{
*(.rodata.*)
}
.init_array ALIGN(4K) : AT(ADDR(.init_array) - KERNEL_OFFSET)
{
g_init_array_start = .;
*(.init_array)
g_init_array_end = .;
}
.data ALIGN(4K) : AT(ADDR(.data) - KERNEL_OFFSET)
{
g_kernel_writable_start = .;