mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 07:19:20 +00:00
Changed a lot of files. Summary: profiler support; "SafeFunction"; UnlockDeadLock kernel config; Code optimization & more
This commit is contained in:
@ -42,7 +42,7 @@ static volatile struct limine_smbios_request SmbiosRequest = {
|
||||
.id = LIMINE_SMBIOS_REQUEST,
|
||||
.revision = 0};
|
||||
|
||||
void init_limine()
|
||||
SafeFunction __no_instrument_function void init_limine()
|
||||
{
|
||||
struct BootInfo binfo;
|
||||
struct limine_bootloader_info_response *BootloaderInfoResponse = BootloaderInfoRequest.response;
|
||||
@ -211,8 +211,12 @@ void init_limine()
|
||||
}
|
||||
|
||||
binfo.Modules[i].Address = (void *)((uint64_t)ModuleResponse->modules[i]->address - 0xffff800000000000);
|
||||
strcpy(binfo.Modules[i].Path, ModuleResponse->modules[i]->path);
|
||||
strcpy(binfo.Modules[i].CommandLine, ModuleResponse->modules[i]->cmdline);
|
||||
strncpy(binfo.Modules[i].Path,
|
||||
ModuleResponse->modules[i]->path,
|
||||
strlen(ModuleResponse->modules[i]->path) + 1);
|
||||
strncpy(binfo.Modules[i].CommandLine,
|
||||
ModuleResponse->modules[i]->cmdline,
|
||||
strlen(ModuleResponse->modules[i]->cmdline) + 1);
|
||||
binfo.Modules[i].Size = ModuleResponse->modules[i]->size;
|
||||
debug("Module %d:\nAddress: %p\nPath: %s\nCommand Line: %s\nSize: %ld", i,
|
||||
(uint64_t)ModuleResponse->modules[i]->address - 0xffff800000000000, ModuleResponse->modules[i]->path,
|
||||
@ -234,13 +238,19 @@ void init_limine()
|
||||
binfo.Kernel.PhysicalBase = (void *)KernelAddressResponse->physical_base;
|
||||
binfo.Kernel.VirtualBase = (void *)KernelAddressResponse->virtual_base;
|
||||
binfo.Kernel.FileBase = KernelFileResponse->kernel_file->address;
|
||||
strcpy(binfo.Kernel.CommandLine, KernelFileResponse->kernel_file->cmdline);
|
||||
strncpy(binfo.Kernel.CommandLine,
|
||||
KernelFileResponse->kernel_file->cmdline,
|
||||
strlen(KernelFileResponse->kernel_file->cmdline) + 1);
|
||||
binfo.Kernel.Size = KernelFileResponse->kernel_file->size;
|
||||
trace("Kernel physical address: %p", KernelAddressResponse->physical_base);
|
||||
trace("Kernel virtual address: %p", KernelAddressResponse->virtual_base);
|
||||
|
||||
strcpy(binfo.Bootloader.Name, BootloaderInfoResponse->name);
|
||||
strcpy(binfo.Bootloader.Version, BootloaderInfoResponse->version);
|
||||
strncpy(binfo.Bootloader.Name,
|
||||
BootloaderInfoResponse->name,
|
||||
strlen(BootloaderInfoResponse->name) + 1);
|
||||
strncpy(binfo.Bootloader.Version,
|
||||
BootloaderInfoResponse->version,
|
||||
strlen(BootloaderInfoResponse->version) + 1);
|
||||
|
||||
// Call kernel entry point
|
||||
Entry(&binfo);
|
||||
|
@ -89,7 +89,7 @@ namespace GlobalDescriptorTable
|
||||
|
||||
void *CPUStackPointer[MAX_CPU];
|
||||
|
||||
__no_stack_protector void Init(int Core)
|
||||
SafeFunction void Init(int Core)
|
||||
{
|
||||
memcpy(&GDTEntries[Core], &GDTEntriesTemplate, sizeof(GlobalDescriptorTableEntries));
|
||||
gdt[Core] = {.Length = sizeof(GlobalDescriptorTableEntries) - 1, .Entries = &GDTEntries[Core]};
|
||||
@ -143,7 +143,7 @@ namespace GlobalDescriptorTable
|
||||
trace("Global Descriptor Table initialized");
|
||||
}
|
||||
|
||||
__no_stack_protector void SetKernelStack(void *Stack)
|
||||
SafeFunction void SetKernelStack(void *Stack)
|
||||
{
|
||||
if (Stack)
|
||||
tss[GetCurrentCPU()->ID].StackPointer[0] = (uint64_t)Stack;
|
||||
|
@ -29,6 +29,24 @@ SECTIONS
|
||||
_kernel_rodata_end = ALIGN(CONSTANT(MAXPAGESIZE));
|
||||
. += CONSTANT(MAXPAGESIZE);
|
||||
|
||||
.init_array :
|
||||
{
|
||||
PROVIDE_HIDDEN(__init_array_start = .);
|
||||
KEEP(*(.init_array .ctors))
|
||||
KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*)))
|
||||
PROVIDE_HIDDEN (__init_array_end = .);
|
||||
}
|
||||
|
||||
.fini_array :
|
||||
{
|
||||
PROVIDE_HIDDEN(__fini_array_start = .);
|
||||
KEEP(*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*)))
|
||||
KEEP(*(.fini_array .dtors))
|
||||
PROVIDE_HIDDEN (__fini_array_end = .);
|
||||
}
|
||||
. += CONSTANT(MAXPAGESIZE);
|
||||
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(COMMON)
|
||||
|
@ -92,12 +92,16 @@ EXTERNC void x32Multiboot2Entry(multiboot_info *Info, unsigned int Magic)
|
||||
{
|
||||
case MULTIBOOT_TAG_TYPE_CMDLINE:
|
||||
{
|
||||
strcpy(binfo.Kernel.CommandLine, ((multiboot_tag_string *)Tag)->string);
|
||||
strncpy(binfo.Kernel.CommandLine,
|
||||
((multiboot_tag_string *)Tag)->string,
|
||||
strlen(((multiboot_tag_string *)Tag)->string));
|
||||
break;
|
||||
}
|
||||
case MULTIBOOT_TAG_TYPE_BOOT_LOADER_NAME:
|
||||
{
|
||||
strcpy(binfo.Bootloader.Name, ((multiboot_tag_string *)Tag)->string);
|
||||
strncpy(binfo.Bootloader.Name,
|
||||
((multiboot_tag_string *)Tag)->string,
|
||||
strlen(((multiboot_tag_string *)Tag)->string));
|
||||
break;
|
||||
}
|
||||
case MULTIBOOT_TAG_TYPE_MODULE:
|
||||
@ -106,8 +110,9 @@ EXTERNC void x32Multiboot2Entry(multiboot_info *Info, unsigned int Magic)
|
||||
static int module_count = 0;
|
||||
binfo.Modules[module_count++].Address = (void *)module->mod_start;
|
||||
binfo.Modules[module_count++].Size = module->size;
|
||||
strcpy(binfo.Modules[module_count++].Path, "(null)");
|
||||
strcpy(binfo.Modules[module_count++].CommandLine, module->cmdline);
|
||||
strncpy(binfo.Modules[module_count++].Path, "(null)", 6);
|
||||
strncpy(binfo.Modules[module_count++].CommandLine, module->cmdline,
|
||||
strlen(module->cmdline));
|
||||
break;
|
||||
}
|
||||
case MULTIBOOT_TAG_TYPE_BASIC_MEMINFO:
|
||||
@ -332,7 +337,7 @@ EXTERNC void x32Multiboot2Entry(multiboot_info *Info, unsigned int Magic)
|
||||
vm[12] = 0x0579;
|
||||
vm[13] = 0x0565;
|
||||
vm[14] = 0x0574;
|
||||
|
||||
|
||||
CPU::Stop();
|
||||
// Entry(&binfo);
|
||||
}
|
||||
|
Reference in New Issue
Block a user