Kernel: Replace i386 with i686
I don't really want to be working with i386 since it doesn't support compare exchange instruction
This commit is contained in:
parent
93975fdc45
commit
99e30a4d7d
|
@ -86,7 +86,7 @@ namespace LibELF
|
||||||
return BAN::Error::from_errno(ENOEXEC);
|
return BAN::Error::from_errno(ENOEXEC);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ARCH(i386)
|
#if ARCH(i686)
|
||||||
if (m_file_header.e_ident[EI_CLASS] != ELFCLASS32)
|
if (m_file_header.e_ident[EI_CLASS] != ELFCLASS32)
|
||||||
#elif ARCH(x86_64)
|
#elif ARCH(x86_64)
|
||||||
if (m_file_header.e_ident[EI_CLASS] != ELFCLASS64)
|
if (m_file_header.e_ident[EI_CLASS] != ELFCLASS64)
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace LibELF
|
||||||
const Elf32SectionHeader& section_header32(size_t) const;
|
const Elf32SectionHeader& section_header32(size_t) const;
|
||||||
const char* lookup_section_name32(uint32_t) const;
|
const char* lookup_section_name32(uint32_t) const;
|
||||||
const char* lookup_string32(size_t, uint32_t) const;
|
const char* lookup_string32(size_t, uint32_t) const;
|
||||||
#if ARCH(i386)
|
#if ARCH(i686)
|
||||||
const Elf32FileHeader& file_header_native() const { return file_header32(); }
|
const Elf32FileHeader& file_header_native() const { return file_header32(); }
|
||||||
const Elf32ProgramHeader& program_header_native(size_t index) const { return program_header32(index); }
|
const Elf32ProgramHeader& program_header_native(size_t index) const { return program_header32(index); }
|
||||||
const Elf32SectionHeader& section_header_native(size_t index) const { return section_header32(index); }
|
const Elf32SectionHeader& section_header_native(size_t index) const { return section_header32(index); }
|
||||||
|
|
|
@ -155,7 +155,7 @@ namespace LibELF
|
||||||
Elf64Xword p_align;
|
Elf64Xword p_align;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if ARCH(i386)
|
#if ARCH(i686)
|
||||||
using ElfNativeAddr = Elf32Addr;
|
using ElfNativeAddr = Elf32Addr;
|
||||||
using ElfNativeOff = Elf32Off;
|
using ElfNativeOff = Elf32Off;
|
||||||
using ElfNativeHalf = Elf32Half;
|
using ElfNativeHalf = Elf32Half;
|
||||||
|
|
|
@ -4,7 +4,7 @@ project(kernel CXX C ASM)
|
||||||
|
|
||||||
if("${BANAN_ARCH}" STREQUAL "x86_64")
|
if("${BANAN_ARCH}" STREQUAL "x86_64")
|
||||||
set(ELF_FORMAT elf64-x86-64)
|
set(ELF_FORMAT elf64-x86-64)
|
||||||
elseif("${BANAN_ARCH}" STREQUAL "i386")
|
elseif("${BANAN_ARCH}" STREQUAL "i686")
|
||||||
set(ELF_FORMAT elf32-i386)
|
set(ELF_FORMAT elf32-i386)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -120,16 +120,16 @@ if("${BANAN_ARCH}" STREQUAL "x86_64")
|
||||||
${LAI_SOURCES}
|
${LAI_SOURCES}
|
||||||
kernel/lai_host.cpp
|
kernel/lai_host.cpp
|
||||||
)
|
)
|
||||||
elseif("${BANAN_ARCH}" STREQUAL "i386")
|
elseif("${BANAN_ARCH}" STREQUAL "i686")
|
||||||
set(KERNEL_SOURCES
|
set(KERNEL_SOURCES
|
||||||
${KERNEL_SOURCES}
|
${KERNEL_SOURCES}
|
||||||
arch/i386/boot.S
|
arch/i686/boot.S
|
||||||
arch/i386/GDT.cpp
|
arch/i686/GDT.cpp
|
||||||
arch/i386/IDT.cpp
|
arch/i686/IDT.cpp
|
||||||
arch/i386/PageTable.cpp
|
arch/i686/PageTable.cpp
|
||||||
arch/i386/Signal.S
|
arch/i686/Signal.S
|
||||||
arch/i386/Syscall.S
|
arch/i686/Syscall.S
|
||||||
arch/i386/Thread.S
|
arch/i686/Thread.S
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "unsupported architecure ${BANAN_ARCH}")
|
message(FATAL_ERROR "unsupported architecure ${BANAN_ARCH}")
|
||||||
|
@ -182,8 +182,8 @@ if("${BANAN_ARCH}" STREQUAL "x86_64")
|
||||||
target_compile_options(kernel PUBLIC -mcmodel=kernel -mno-red-zone)
|
target_compile_options(kernel PUBLIC -mcmodel=kernel -mno-red-zone)
|
||||||
target_link_options(kernel PUBLIC LINKER:-z,max-page-size=4096)
|
target_link_options(kernel PUBLIC LINKER:-z,max-page-size=4096)
|
||||||
target_link_options(kernel PUBLIC LINKER:-T,${CMAKE_CURRENT_SOURCE_DIR}/arch/x86_64/linker.ld)
|
target_link_options(kernel PUBLIC LINKER:-T,${CMAKE_CURRENT_SOURCE_DIR}/arch/x86_64/linker.ld)
|
||||||
elseif("${BANAN_ARCH}" STREQUAL "i386")
|
elseif("${BANAN_ARCH}" STREQUAL "i686")
|
||||||
target_link_options(kernel PUBLIC LINKER:-T,${CMAKE_CURRENT_SOURCE_DIR}/arch/i386/linker.ld)
|
target_link_options(kernel PUBLIC LINKER:-T,${CMAKE_CURRENT_SOURCE_DIR}/arch/i686/linker.ld)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_options(kernel PUBLIC -ffreestanding -nostdlib)
|
target_link_options(kernel PUBLIC -ffreestanding -nostdlib)
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
.global signal_trampoline
|
.global signal_trampoline
|
||||||
signal_trampoline:
|
signal_trampoline:
|
||||||
|
ud2
|
||||||
|
|
||||||
pushl %ebp
|
pushl %ebp
|
||||||
movl %esp, %ebp
|
movl %esp, %ebp
|
||||||
subl $8, %esp
|
subl $8, %esp
|
|
@ -1,5 +1,6 @@
|
||||||
.global sys_fork_trampoline
|
.global sys_fork_trampoline
|
||||||
sys_fork_trampoline:
|
sys_fork_trampoline:
|
||||||
|
ud2
|
||||||
subl $4, %esp
|
subl $4, %esp
|
||||||
pushl %ebx
|
pushl %ebx
|
||||||
pushl %ebp
|
pushl %ebp
|
|
@ -1,11 +1,11 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define x86_64 1
|
#define x86_64 1
|
||||||
#define i386 2
|
#define i686 2
|
||||||
|
|
||||||
#define ARCH(arch) (__arch == arch)
|
#define ARCH(arch) (__arch == arch)
|
||||||
|
|
||||||
#if !defined(__arch) || (__arch != x86_64 && __arch != i386)
|
#if !defined(__arch) || (__arch != x86_64 && __arch != i686)
|
||||||
#error "Unsupported architecture"
|
#error "Unsupported architecture"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13,10 +13,12 @@
|
||||||
#define read_rsp(rsp) asm volatile("movq %%rsp, %0" : "=r"(rsp))
|
#define read_rsp(rsp) asm volatile("movq %%rsp, %0" : "=r"(rsp))
|
||||||
#define push_callee_saved() asm volatile("pushq %rbx; pushq %rbp; pushq %r12; pushq %r13; pushq %r14; pushq %r15")
|
#define push_callee_saved() asm volatile("pushq %rbx; pushq %rbp; pushq %r12; pushq %r13; pushq %r14; pushq %r15")
|
||||||
#define pop_callee_saved() asm volatile("popq %r15; popq %r14; popq %r13; popq %r12; popq %rbp; popq %rbx")
|
#define pop_callee_saved() asm volatile("popq %r15; popq %r14; popq %r13; popq %r12; popq %rbp; popq %rbx")
|
||||||
#else
|
#elif ARCH(i686)
|
||||||
#define read_rsp(rsp) asm volatile("movl %%esp, %0" : "=r"(rsp))
|
#define read_rsp(rsp) asm volatile("movl %%esp, %0" : "=r"(rsp))
|
||||||
#define push_callee_saved() asm volatile("pushal")
|
#define push_callee_saved() asm volatile("pushal")
|
||||||
#define pop_callee_saved() asm volatile("popal")
|
#define pop_callee_saved() asm volatile("popal")
|
||||||
|
#else
|
||||||
|
#error
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace Kernel
|
||||||
// 1x triply indirect
|
// 1x triply indirect
|
||||||
BAN::Array<paddr_t, 5> block;
|
BAN::Array<paddr_t, 5> block;
|
||||||
static constexpr size_t direct_block_count = 2;
|
static constexpr size_t direct_block_count = 2;
|
||||||
#elif ARCH(i386)
|
#elif ARCH(i686)
|
||||||
// 14x direct blocks
|
// 14x direct blocks
|
||||||
// 1x singly indirect
|
// 1x singly indirect
|
||||||
// 1x doubly indirect
|
// 1x doubly indirect
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#if ARCH(x86_64)
|
#if ARCH(x86_64)
|
||||||
#define KERNEL_OFFSET 0xFFFFFFFF80000000
|
#define KERNEL_OFFSET 0xFFFFFFFF80000000
|
||||||
#elif ARCH(i386)
|
#elif ARCH(i686)
|
||||||
#define KERNEL_OFFSET 0xC0000000
|
#define KERNEL_OFFSET 0xC0000000
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace Kernel
|
||||||
using ProcessorID = uint32_t;
|
using ProcessorID = uint32_t;
|
||||||
constexpr ProcessorID PROCESSOR_NONE = 0xFFFFFFFF;
|
constexpr ProcessorID PROCESSOR_NONE = 0xFFFFFFFF;
|
||||||
|
|
||||||
#if ARCH(x86_64) || ARCH(i386)
|
#if ARCH(x86_64) || ARCH(i686)
|
||||||
class Processor
|
class Processor
|
||||||
{
|
{
|
||||||
BAN_NON_COPYABLE(Processor);
|
BAN_NON_COPYABLE(Processor);
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace Kernel
|
||||||
{
|
{
|
||||||
#if ARCH(x86_64)
|
#if ARCH(x86_64)
|
||||||
asm volatile("rdrand %0" : "=r"(s_rand_seed));
|
asm volatile("rdrand %0" : "=r"(s_rand_seed));
|
||||||
#elif ARCH(i386)
|
#elif ARCH(i686)
|
||||||
uint32_t lo, hi;
|
uint32_t lo, hi;
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"rdrand %[lo];"
|
"rdrand %[lo];"
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace Kernel
|
||||||
{
|
{
|
||||||
#if ARCH(x86_64)
|
#if ARCH(x86_64)
|
||||||
asm volatile("movq %0, %%rsp" :: "rm"(Processor::current_stack_top()));
|
asm volatile("movq %0, %%rsp" :: "rm"(Processor::current_stack_top()));
|
||||||
#elif ARCH(i386)
|
#elif ARCH(i686)
|
||||||
asm volatile("movl %0, %%esp" :: "rm"(Processor::current_stack_top()));
|
asm volatile("movl %0, %%esp" :: "rm"(Processor::current_stack_top()));
|
||||||
#else
|
#else
|
||||||
#error
|
#error
|
||||||
|
@ -221,7 +221,7 @@ namespace Kernel
|
||||||
"orq $(1 << 3), %rax;"
|
"orq $(1 << 3), %rax;"
|
||||||
"movq %rax, %cr0"
|
"movq %rax, %cr0"
|
||||||
);
|
);
|
||||||
#elif ARCH(i386)
|
#elif ARCH(i686)
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"movl %cr0, %eax;"
|
"movl %cr0, %eax;"
|
||||||
"orl $(1 << 3), %eax;"
|
"orl $(1 << 3), %eax;"
|
||||||
|
|
|
@ -111,7 +111,7 @@ namespace Kernel
|
||||||
);
|
);
|
||||||
save_sse();
|
save_sse();
|
||||||
asm volatile("movq %0, %%cr0" :: "r"(cr0));
|
asm volatile("movq %0, %%cr0" :: "r"(cr0));
|
||||||
#elif ARCH(i386)
|
#elif ARCH(i686)
|
||||||
uintptr_t cr0;
|
uintptr_t cr0;
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"movl %%cr0, %%eax;"
|
"movl %%cr0, %%eax;"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* i386 crti.s */
|
/* i686 crti.s */
|
||||||
.section .init
|
.section .init
|
||||||
.global _init
|
.global _init
|
||||||
.type _init, @function
|
.type _init, @function
|
|
@ -1,4 +1,4 @@
|
||||||
/* i386 crtn.s */
|
/* i686 crtn.s */
|
||||||
.section .init
|
.section .init
|
||||||
/* gcc will nicely put the contents of crtend.o's .init section here. */
|
/* gcc will nicely put the contents of crtend.o's .init section here. */
|
||||||
popl %ebp
|
popl %ebp
|
Loading…
Reference in New Issue