mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-07-02 19:09:16 +00:00
build: fix kernel build on different architectures
Userspace still fails to compile on non-x86!!!
This commit is contained in:
@ -122,16 +122,10 @@ namespace KernelConsole
|
||||
return;
|
||||
|
||||
ConsoleTerminal *term = CurrentTerminal.load();
|
||||
ConsoleTerminal::Blinker *blinker = &term->Blink;
|
||||
|
||||
ConsoleTerminal::Blinker &blinker = term->Blink;
|
||||
TerminalCell *cell = term->Term->GetCell(Renderer.Cursor.X + Renderer.Cursor.Y * term->Term->GetWinsize()->ws_row);
|
||||
|
||||
uint32_t bgColor = cell->attr.Bright ? TermBrightColors[cell->attr.Background] : TermColors[cell->attr.Background];
|
||||
|
||||
Renderer.Paint(Renderer.Cursor.X, Renderer.Cursor.Y,
|
||||
term->Blink.Character,
|
||||
Enable ? term->Blink.Color : bgColor,
|
||||
bgColor);
|
||||
Renderer.Paint(Renderer.Cursor.X, Renderer.Cursor.Y, blinker.Character, Enable ? blinker.Color : bgColor, bgColor);
|
||||
}
|
||||
|
||||
void paint_blinker_thread()
|
||||
|
@ -363,11 +363,11 @@ namespace Driver
|
||||
driverInfo.License = (const char *)(Drv.BaseAddress + (uintptr_t)driverInfo.License);
|
||||
}
|
||||
|
||||
for (size_t h = 0; h < (sht_symtab.sh_size / sizeof(Elf64_Sym)); h++)
|
||||
for (size_t h = 0; h < (sht_symtab.sh_size / sizeof(Elf_Sym)); h++)
|
||||
{
|
||||
Elf64_Sym symEntry{};
|
||||
uintptr_t symOffset = sht_symtab.sh_offset + (h * sizeof(Elf64_Sym));
|
||||
File->Read(&symEntry, sizeof(Elf64_Sym), symOffset);
|
||||
Elf_Sym symEntry{};
|
||||
uintptr_t symOffset = sht_symtab.sh_offset + (h * sizeof(Elf_Sym));
|
||||
File->Read(&symEntry, sizeof(Elf_Sym), symOffset);
|
||||
|
||||
if (symEntry.st_name == 0)
|
||||
continue;
|
||||
@ -477,10 +477,10 @@ namespace Driver
|
||||
{
|
||||
AssertReturnError(relaSize != nullptr, -ENOEXEC);
|
||||
|
||||
Elf64_Rela *rela = (Elf64_Rela *)(Drv.BaseAddress + dyn->d_un.d_ptr);
|
||||
for (size_t i = 0; i < (relaSize->d_un.d_val / sizeof(Elf64_Rela)); i++)
|
||||
Elf_Rela *rela = (Elf_Rela *)(Drv.BaseAddress + dyn->d_un.d_ptr);
|
||||
for (size_t i = 0; i < (relaSize->d_un.d_val / sizeof(Elf_Rela)); i++)
|
||||
{
|
||||
Elf64_Rela *r = &rela[i];
|
||||
Elf_Rela *r = &rela[i];
|
||||
uintptr_t *reloc = (uintptr_t *)(Drv.BaseAddress + r->r_offset);
|
||||
uintptr_t relocTarget = 0;
|
||||
|
||||
@ -500,8 +500,7 @@ namespace Driver
|
||||
}
|
||||
default:
|
||||
{
|
||||
fixme("Unhandled relocation type: %#lx",
|
||||
ELF64_R_TYPE(r->r_info));
|
||||
fixme("Unhandled relocation type: %#lx", ELF_R_TYPE(r->r_info));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -517,24 +516,24 @@ namespace Driver
|
||||
{
|
||||
AssertReturnError(pltrelSize != nullptr, -ENOEXEC);
|
||||
|
||||
std::vector<Elf64_Dyn> symtab = Execute::ELFGetDynamicTag(File, DT_SYMTAB);
|
||||
Elf64_Sym *symbols = (Elf64_Sym *)((uintptr_t)Drv.BaseAddress + symtab[0].d_un.d_ptr);
|
||||
std::vector<Elf_Dyn> symtab = Execute::ELFGetDynamicTag(File, DT_SYMTAB);
|
||||
Elf_Sym *symbols = (Elf_Sym *)((uintptr_t)Drv.BaseAddress + symtab[0].d_un.d_ptr);
|
||||
|
||||
std::vector<Elf64_Dyn> StrTab = Execute::ELFGetDynamicTag(File, DT_STRTAB);
|
||||
std::vector<Elf_Dyn> StrTab = Execute::ELFGetDynamicTag(File, DT_STRTAB);
|
||||
char *dynStr = (char *)((uintptr_t)Drv.BaseAddress + StrTab[0].d_un.d_ptr);
|
||||
|
||||
Elf64_Rela *rela = (Elf64_Rela *)(Drv.BaseAddress + dyn->d_un.d_ptr);
|
||||
for (size_t i = 0; i < (pltrelSize->d_un.d_val / sizeof(Elf64_Rela)); i++)
|
||||
Elf_Rela *rela = (Elf_Rela *)(Drv.BaseAddress + dyn->d_un.d_ptr);
|
||||
for (size_t i = 0; i < (pltrelSize->d_un.d_val / sizeof(Elf_Rela)); i++)
|
||||
{
|
||||
Elf64_Rela *r = &rela[i];
|
||||
Elf_Rela *r = &rela[i];
|
||||
uintptr_t *reloc = (uintptr_t *)(Drv.BaseAddress + r->r_offset);
|
||||
|
||||
switch (ELF64_R_TYPE(r->r_info))
|
||||
switch (ELF_R_TYPE(r->r_info))
|
||||
{
|
||||
case R_X86_64_JUMP_SLOT:
|
||||
{
|
||||
Elf64_Xword symIndex = ELF64_R_SYM(r->r_info);
|
||||
Elf64_Sym *sym = symbols + symIndex;
|
||||
Elf_Xword symIndex = ELF_R_SYM(r->r_info);
|
||||
Elf_Sym *sym = symbols + symIndex;
|
||||
|
||||
const char *symName = dynStr + sym->st_name;
|
||||
debug("Resolving symbol %s", symName);
|
||||
@ -544,8 +543,7 @@ namespace Driver
|
||||
}
|
||||
default:
|
||||
{
|
||||
fixme("Unhandled relocation type: %#lx",
|
||||
ELF64_R_TYPE(r->r_info));
|
||||
fixme("Unhandled relocation type: %#lx", ELF_R_TYPE(r->r_info));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
const char *trusted_drivers[] = {
|
||||
"ae08d2e120c8370278ca9e17085a6b9e2f4a470ab6cec824c77ab1f8706c7144f5d4e1c9820914ed4fc7a4fd22de4b18bfed7c3b5d9c1e604e82280d7d45a5c7",
|
||||
"66ff6a13e27cfee4b37e153fbdeeabb2de44f2a6a4d7f929f0b48d05a08b44c8c543f15c6cee05b5392166088f5ba260db5a64476d150ce81b295e4aa5a85d32",
|
||||
};
|
||||
const __SIZE_TYPE__ trusted_drivers_count = sizeof(trusted_drivers) / sizeof(trusted_drivers[0]);
|
||||
|
@ -65,9 +65,9 @@ namespace Execute
|
||||
uintptr_t *relPtr = (uintptr_t *)(((uintptr_t)BaseImage + target->sh_offset) + rel->r_offset);
|
||||
uintptr_t value = 0;
|
||||
|
||||
if (ELF64_R_SYM(rel->r_info) != SHN_UNDEF)
|
||||
if (ELF_R_SYM(rel->r_info) != SHN_UNDEF)
|
||||
{
|
||||
value = ELFGetSymbolValue(((Elf_Ehdr *)BaseImage), section->sh_link, ELF64_R_SYM(rel->r_info));
|
||||
value = ELFGetSymbolValue(((Elf_Ehdr *)BaseImage), section->sh_link, ELF_R_SYM(rel->r_info));
|
||||
if (value == (uintptr_t)-1)
|
||||
return;
|
||||
}
|
||||
|
@ -327,6 +327,7 @@ enum DynamicArrayTags
|
||||
#define ELF32_ST_BIND(info) ((info) >> 4)
|
||||
#define ELF32_ST_TYPE(info) ((info) & 0xf)
|
||||
#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
|
||||
|
||||
#define ELF64_ST_BIND(info) ((info) >> 4)
|
||||
#define ELF64_ST_TYPE(info) ((info) & 0xf)
|
||||
#define ELF64_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
|
||||
@ -956,7 +957,7 @@ typedef struct
|
||||
char pr_psargs[ELF_PRARGSZ];
|
||||
} Elf64_Prpsinfo;
|
||||
|
||||
#if defined(__amd64__) || defined(__aarch64__)
|
||||
#ifdef __LP64__
|
||||
typedef Elf64_Addr Elf_Addr;
|
||||
typedef Elf64_Half Elf_Half;
|
||||
typedef Elf64_Off Elf_Off;
|
||||
@ -973,7 +974,16 @@ typedef Elf64_Rela Elf_Rela;
|
||||
typedef Elf64_Nhdr Elf_Nhdr;
|
||||
typedef Elf64_Prstatus Elf_Prstatus;
|
||||
typedef Elf64_Prpsinfo Elf_Prpsinfo;
|
||||
#elif defined(__i386__) || defined(__arm__)
|
||||
typedef Elf64_Xword Elf_Xword;
|
||||
|
||||
#define ELF_ST_BIND(info) ELF64_ST_BIND(info)
|
||||
#define ELF_ST_TYPE(info) ELF64_ST_TYPE(info)
|
||||
#define ELF_ST_INFO(bind, type) ELF64_ST_INFO(bind, type)
|
||||
#define ELF_ST_VISIBILITY(o) ELF64_ST_VISIBILITY(o)
|
||||
#define ELF_R_SYM(i) ELF64_R_SYM(i)
|
||||
#define ELF_R_TYPE(i) ELF64_R_TYPE(i)
|
||||
#define ELF_R_INFO(s, t) ELF64_R_INFO(s, t)
|
||||
#else
|
||||
typedef Elf32_Addr Elf_Addr;
|
||||
typedef Elf32_Half Elf_Half;
|
||||
typedef Elf32_Off Elf_Off;
|
||||
@ -990,6 +1000,15 @@ typedef Elf32_Rela Elf_Rela;
|
||||
typedef Elf32_Nhdr Elf_Nhdr;
|
||||
typedef Elf32_Prstatus Elf_Prstatus;
|
||||
typedef Elf32_Prpsinfo Elf_Prpsinfo;
|
||||
typedef Elf32_Word Elf_Xword;
|
||||
|
||||
#define ELF_ST_BIND(info) ELF32_ST_BIND(info)
|
||||
#define ELF_ST_TYPE(info) ELF32_ST_TYPE(info)
|
||||
#define ELF_ST_INFO(bind, type) ELF32_ST_INFO(bind, type)
|
||||
#define ELF_ST_VISIBILITY(o) ELF32_ST_VISIBILITY(o)
|
||||
#define ELF_R_SYM(i) ELF32_R_SYM(i)
|
||||
#define ELF_R_TYPE(i) ELF32_R_TYPE(i)
|
||||
#define ELF_R_INFO(s, t) ELF32_R_INFO(s, t)
|
||||
#endif
|
||||
|
||||
#endif // !__FENNIX_KERNEL_ELF_H__
|
||||
|
@ -46,7 +46,9 @@ namespace vfs
|
||||
if (FileSystemRoots->Children[Index] == nullptr)
|
||||
FileSystemRoots->Children[Index] = Root;
|
||||
else
|
||||
{
|
||||
debug("Root %ld already exists", Index);
|
||||
}
|
||||
}
|
||||
|
||||
bool Virtual::SetRootAt(Inode *Root, size_t Index)
|
||||
|
@ -42,6 +42,18 @@ namespace Subsystem::Linux
|
||||
FileNode *mnt = fs->ForceCreate(linux, "mnt", 0755);
|
||||
FileNode *opt = fs->ForceCreate(linux, "opt", 0755);
|
||||
FileNode *proc = fs->ForceCreate(linux, "proc", 0755);
|
||||
|
||||
UNUSED(bin);
|
||||
UNUSED(boot);
|
||||
UNUSED(dev);
|
||||
UNUSED(etc);
|
||||
UNUSED(home);
|
||||
UNUSED(lib);
|
||||
UNUSED(lib64);
|
||||
UNUSED(media);
|
||||
UNUSED(mnt);
|
||||
UNUSED(opt);
|
||||
UNUSED(proc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,12 @@ namespace Subsystem::Windows
|
||||
FileNode *programFilesX86 = fs->ForceCreate(windows, "Program Files (x86)", 0755);
|
||||
FileNode *programData = fs->ForceCreate(windows, "ProgramData", 0755);
|
||||
FileNode *users = fs->ForceCreate(windows, "Users", 0755);
|
||||
|
||||
UNUSED(windows);
|
||||
UNUSED(programFiles);
|
||||
UNUSED(programFilesX86);
|
||||
UNUSED(programData);
|
||||
UNUSED(users);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user