diff --git a/kernel/Makefile b/kernel/Makefile
index 13a74d38..10915d4c 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -83,7 +83,6 @@ clock.o \
com.o \
copy.o \
$(CPUDIR)/kthread.o \
-debugger.o \
descriptor.o \
disk/ahci/ahci.o \
disk/ahci/hba.o \
@@ -113,7 +112,6 @@ interrupt.o \
ioctx.o \
io.o \
kb/kblayout.o \
-kb/layout/us.o \
kb/ps2.o \
kernelinfo.o \
kernel.o \
@@ -145,7 +143,6 @@ segment.o \
signal.o \
sockopt.o \
string.o \
-symbol.o \
syscall.o \
textbuffer.o \
textterminal.o \
diff --git a/kernel/debugger.cpp b/kernel/debugger.cpp
deleted file mode 100644
index f718f0b4..00000000
--- a/kernel/debugger.cpp
+++ /dev/null
@@ -1,639 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2013, 2014, 2015, 2016.
-
- This file is part of Sortix.
-
- Sortix is free software: you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option) any later
- version.
-
- Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- Sortix. If not, see .
-
- debugger.cpp
- Internal kernel debugger.
-
-*******************************************************************************/
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "kb/layout/us.h"
-
-namespace Sortix {
-namespace Debugger {
-
-uint16_t* const VIDEO_MEMORY = (uint16_t*) 0xB8000;
-
-bool ignore_next_f10;
-static int column;
-static int row;
-static Thread* current_thread;
-#define current_process (current_thread->process)
-
-// Changes the position of the hardware cursor.
-void SetCursor(int x, int y)
-{
- unsigned value = x + y * 80;
-
- // This sends a command to indicies 14 and 15 in the
- // CRT Control Register of the VGA controller. These
- // are the high and low bytes of the index that show
- // where the hardware cursor is to be 'blinking'.
- outport8(0x3D4, 14);
- outport8(0x3D5, (value >> 8) & 0xFF);
- outport8(0x3D4, 15);
- outport8(0x3D5, (value >> 0) & 0xFF);
-}
-
-void GetCursor(int* x, int* y)
-{
- outport8(0x3D4, 14);
- uint8_t high = inport8(0x3D5);
- outport8(0x3D4, 15);
- uint8_t low = inport8(0x3D5);
- unsigned value = high << 8 | low;
- *x = value % 80;
- *y = value / 80;
-}
-
-uint16_t* Character(int x, int y)
-{
- return &VIDEO_MEMORY[y * 80 + x];
-}
-
-void Scroll()
-{
- for ( int y = 0; y < 25-1; y++ )
- for ( int x = 0; x < 80; x++ )
- *Character(x, y) = *Character(x, y+1);
- for ( int x = 0; x < 80; x++ )
- *Character(x, 25-1) = 0x700 | ' ';
-}
-
-void Newline()
-{
- if ( row + 1 == 25 )
- Scroll();
- else
- row++;
- column = 0;
-}
-
-void PrintChar(char c)
-{
- if ( c == '\n' )
- Newline();
- else if ( c == '\b' || c == 127 )
- {
- if ( column )
- column--;
- else if ( row )
- column = 80,
- row--;
- *Character(column, row) = 0x700 | ' ';
- }
- else if ( c == '\r' )
- column = 0;
- else if ( c == '\t' )
- {
- do PrintChar(' ');
- while ( column % 8 != 0 );
- }
- else
- {
- if ( column == 80 )
- Newline();
- *Character(column++, row) = 0x700 | (uint16_t) c;
- }
-
- SetCursor(column, row);
-}
-
-void PrintString(const char* str)
-{
- while ( *str )
- PrintChar(*str++);
-}
-
-size_t PrintCallback(void* /*user*/, const char* str, size_t len)
-{
- for ( size_t i = 0; i < len; i++ )
- PrintChar(str[i]);
- return len;
-}
-
-void Print(const char* format, ...)
-{
- va_list ap;
- va_start(ap, format);
- vcbprintf(NULL, PrintCallback, format, ap);
- va_end(ap);
-}
-
-void PrintSymbol(const char* symbol)
-{
- if ( !symbol )
- {
- Print("");
- return;
- }
- if ( !(symbol[0] == '_' && symbol[1] == 'Z') )
- {
- Print("%s(...)", symbol);
- return;
- }
- symbol += 2;
- while ( *symbol )
- {
- if ( *symbol == 'N' )
- symbol++;
- else if ( '0' <= *symbol && *symbol <= '9' )
- {
- size_t len = strtoul(symbol, (char**) &symbol, 10);
- for ( size_t i = 0; i < len; i++ )
- PrintChar(*symbol++);
- if ( *symbol == 'L' )
- symbol++; // TODO: What is this?
- if ( '0' <= *symbol && *symbol <= '9' )
- Print("::");
- }
- else if ( *symbol == 'v' )
- {
- symbol++;
- Print("()");
- break;
- }
- else if ( *symbol == 'i' )
- {
- symbol++;
- Print("(...)");
- break;
- }
- else if ( *symbol == 'E' || *symbol == 'P' )
- {
- symbol++;
- if ( *symbol == 'v' )
- Print("()");
- else
- Print("(...)");
- break;
- }
- else
- PrintChar(*symbol++);
- }
-}
-
-static bool MatchesSymbol(const Symbol* symbol, uintptr_t address)
-{
- return symbol->address <= address &&
- address <= symbol->address + symbol->size;
-}
-
-const char* GetSymbolName(uintptr_t address)
-{
- if ( const char* symbol_name = GetKernelSymbolName(address) )
- return symbol_name;
- for ( size_t i = 0; i < current_process->symbol_table_length; i++ )
- {
- const Symbol* symbol = current_process->symbol_table + i;
- if ( MatchesSymbol(symbol, address) )
- return symbol->name;
- }
- return NULL;
-}
-
-void ReadCommand(char* buffer, size_t buffer_length)
-{
- KBLayoutUS kblayout;
- bool scancode_escaped = false;
-
- size_t written = 0;
- while ( true )
- {
- // Get a scancode from the keyboard.
- uint16_t iobase = 0x60;
- const uint16_t DATA = 0x0;
- //const uint16_t COMMAND = 0x0;
- const uint16_t STATUS = 0x4;
- while ( (inport8(iobase + STATUS) & (1<<0)) == 0 );
- uint8_t scancode = inport8(iobase + DATA);
-
- // Handle escaped scancodes.
- const uint8_t SCANCODE_ESCAPE = 0xE0;
- if ( (scancode_escaped = scancode == SCANCODE_ESCAPE) )
- continue;
-
- // Produce a format integer.
- int offset = (scancode_escaped) ? 0x80 : 0;
- int kbkey = scancode & 0x7F;
- if ( scancode & 0x80 ) { kbkey = -kbkey - offset; }
- else { kbkey = kbkey + offset; }
-
- if ( !written && kbkey == -KBKEY_F10 )
- {
- if ( !ignore_next_f10 )
- {
- if ( !written )
- PrintString("exit");
- PrintString("\n");
- strncpy(buffer, "exit", buffer_length);
- break;
- }
- ignore_next_f10 = false;
- }
-
- // Translate the keystroke into unicode.
- uint32_t unicode = kblayout.Translate(kbkey);
-
- if ( !unicode )
- continue;
-
- // Ignore depressed keys.
- if ( kbkey < 0 )
- continue;
-
- // Discard anything but ascii.
- if ( 128 <= unicode )
- continue;
-
- char c = (char) unicode;
-
- // Discard tabs.
- if ( c == '\t' )
- continue;
-
- // Handle backspace.
- if ( c == '\b' || c == 127 )
- {
- if ( !written )
- continue;
- PrintChar('\b');
- written--;
- continue;
- }
-
- // Truncate the user input if it is too long.
- if ( written == buffer_length && c != '\n' )
- continue;
-
- PrintChar(c);
-
- // Finish reading the line.
- if ( c == '\n' )
- {
- buffer[written] = '\0';
- break;
- }
-
- buffer[written++] = c;
- }
-}
-
-Process* FindProcess(pid_t least_pid, pid_t max_pid)
-{
- Process* best = NULL;
- if ( least_pid <= current_process->pid && current_process->pid <= max_pid )
- best = current_process;
- Thread* first_thread = current_thread;
- for ( Thread* iter = first_thread->scheduler_list_next;
- iter != first_thread; iter = iter->scheduler_list_next )
- if ( least_pid <= iter->process->pid && iter->process->pid <= max_pid &&
- (!best || iter->process->pid < best->pid) )
- best = iter->process;
- return best;
-}
-
-int ThreadId(Thread* thread)
-{
- int ret = 0;
- while ( thread->prevsibling )
- ret++, thread = thread->prevsibling;
- return ret;
-}
-
-int main_bt(int /*argc*/, char* /*argv*/[])
-{
-#if defined(__x86_64__)
- unsigned long ip = current_thread->registers.rip;
- unsigned long bp = current_thread->registers.rbp;
-#elif defined(__i386__)
- unsigned long ip = current_thread->registers.eip;
- unsigned long bp = current_thread->registers.ebp;
-#endif
-
- bool userspace = false;
- unsigned long depth = 0;
- do
- {
- if ( 4*1024*1024 <= ip && !userspace )
- Print(" -- userspace --\n"), userspace = true;
- const char* symbol = GetSymbolName(ip);
- Print("%-4lu 0x%zx ", depth, ip);
- PrintSymbol(symbol);
- Print("\n");
- if ( !bp )
- break;
- ip = ((unsigned long*) bp)[1];
- bp = ((unsigned long*) bp)[0];
- depth++;
- } while ( ip );
- return 0;
-}
-
-int main_dump(int argc, char* argv[])
-{
- unsigned long word_size = 0;
- if ( !strcmp(argv[0], "dump8") ) word_size = 1;
- if ( !strcmp(argv[0], "dump16") ) word_size = 2;
- if ( !strcmp(argv[0], "dump32") ) word_size = 4;
- if ( !strcmp(argv[0], "dump64") ) word_size = 8;
- if ( argc < 2 )
- return 0;
-
- unsigned long start = strtoul(argv[1], NULL, 0);
- unsigned long length = 1;
- if ( 3 <= argc )
- length = strtoul(argv[2], NULL, 0);
-
- uint8_t* data = (uint8_t*) start;
- for ( size_t i = 0; i < length; i++ )
- {
- size_t elemlen = (word_size ? word_size : 1) ;
- size_t outlen = elemlen * 2;
- if ( 80 - column < (int) outlen )
- Print("\n");
- if ( !column )
-#if __WORDSIZE == 64
- Print("%016lX: ", start + i * elemlen);
-#else
- Print("%08lX: ", start + i * elemlen);
-#endif
- else if ( word_size )
- Print(" ");
- // TODO: Endianness!
- for ( size_t n = 0; n < (word_size ? word_size : 1); n++ )
- Print("%02X", data[i * elemlen + n]);
- }
-
- if ( column )
- Print("\n");
-
- return 0;
-}
-
-int main_echo(int argc, char* argv[])
-{
- const char* prefix = "";
- for ( int i = 1; i < argc; i++ )
- Print("%s%s", prefix, argv[i]),
- prefix = " ";
- Print("\n");
- return 0;
-}
-
-int main_exit(int /*argc*/, char* /*argv*/[])
-{
- return -1;
-}
-
-int main_pid(int argc, char* argv[])
-{
- if ( 2 <= argc )
- {
- int pid = atoi(argv[1]);
- Process* process = FindProcess(pid, pid);
- if ( !process )
- {
- Print("pid: %i: No such process\n", pid);
- return 1;
- }
- current_thread = process->firstthread;
- Memory::SwitchAddressSpace(current_thread->registers.cr3);
- }
- Print("%c %i\t`%s'\n", '*', (int) current_process->pid,
- current_process->program_image_path);
- return 0;
-}
-
-int main_ps(int /*argc*/, char* /*argv*/[])
-{
- pid_t least = 0;
- while ( Process* process = FindProcess(least, INT_MAX) )
- {
- Print("%c %i\t`%s'\n", process == current_process ? '*' : ' ',
- (int) process->pid, process->program_image_path);
- least = process->pid + 1;
- }
- return 0;
-}
-
-int main_rs(int /*argc*/, char* /*argv*/[])
-{
-#if defined(__x86_64__)
- Print("rax=0x%lX, ", current_thread->registers.rax);
- Print("rbx=0x%lX, ", current_thread->registers.rbx);
- Print("rcx=0x%lX, ", current_thread->registers.rcx);
- Print("rdx=0x%lX, ", current_thread->registers.rdx);
- Print("rdi=0x%lX, ", current_thread->registers.rdi);
- Print("rsi=0x%lX, ", current_thread->registers.rsi);
- Print("rsp=0x%lX, ", current_thread->registers.rsp);
- Print("rbp=0x%lX, ", current_thread->registers.rbp);
- Print("r8=0x%lX, ", current_thread->registers.r8);
- Print("r9=0x%lX, ", current_thread->registers.r9);
- Print("r10=0x%lX, ", current_thread->registers.r10);
- Print("r11=0x%lX, ", current_thread->registers.r11);
- Print("r12=0x%lX, ", current_thread->registers.r12);
- Print("r13=0x%lX, ", current_thread->registers.r13);
- Print("r14=0x%lX, ", current_thread->registers.r14);
- Print("r15=0x%lX, ", current_thread->registers.r15);
- Print("rip=0x%lX, ", current_thread->registers.rip);
- Print("rflags=0x%lX, ", current_thread->registers.rflags);
- Print("fsbase=0x%lX, ", current_thread->registers.fsbase);
- Print("gsbase=0x%lX, ", current_thread->registers.gsbase);
- Print("cr3=0x%lX, ", current_thread->registers.cr3);
- Print("kernel_stack=0x%lX, ", current_thread->registers.kernel_stack);
- Print("kerrno=%lu, ", current_thread->registers.kerrno);
- Print("signal_pending=%lu.", current_thread->registers.signal_pending);
-#elif defined(__i386__)
- Print("eax=0x%lX, ", current_thread->registers.eax);
- Print("ebx=0x%lX, ", current_thread->registers.ebx);
- Print("ecx=0x%lX, ", current_thread->registers.ecx);
- Print("edx=0x%lX, ", current_thread->registers.edx);
- Print("edi=0x%lX, ", current_thread->registers.edi);
- Print("esi=0x%lX, ", current_thread->registers.esi);
- Print("esp=0x%lX, ", current_thread->registers.esp);
- Print("ebp=0x%lX, ", current_thread->registers.ebp);
- Print("eip=0x%lX, ", current_thread->registers.eip);
- Print("eflags=0x%lX, ", current_thread->registers.eflags);
- Print("fsbase=0x%lX, ", current_thread->registers.fsbase);
- Print("gsbase=0x%lX, ", current_thread->registers.gsbase);
- Print("cr3=0x%lX, ", current_thread->registers.cr3);
- Print("kernel_stack=0x%lX, ", current_thread->registers.kernel_stack);
- Print("kerrno=%lX, ", current_thread->registers.kerrno);
- Print("signal_pending=%lu.", current_thread->registers.signal_pending);
-#endif
- Print("\n");
- return 0;
-}
-
-static void DescribeThread(int tid, Thread* thread)
-{
-#if defined(__x86_64__)
- unsigned long ip = thread->registers.rip;
-#elif defined(__i386__)
- unsigned long ip = thread->registers.eip;
-#endif
-
- Print("%c ", thread == current_thread ? '*' : ' ');
- Print("%i", tid);
- Print("\tip=0x%lx", ip);
- Print("\n");
-}
-
-int main_tid(int argc, char* argv[])
-{
- if ( 2 <= argc )
- {
- int tid = atoi(argv[1]);
- Thread* thread = current_process->firstthread;
- for ( int i = 0; i < tid && thread; i++ )
- thread = thread->nextsibling;
- if ( !thread )
- {
- Print("tid: %i: No such thread\n", tid);
- return 1;
- }
- current_thread = thread;
- Memory::SwitchAddressSpace(current_thread->registers.cr3);
- }
- DescribeThread(ThreadId(current_thread), current_thread);
- return 0;
-}
-
-int main_ts(int /*argc*/, char* /*argv*/[])
-{
- int tid = 0;
- for ( Thread* thread = current_process->firstthread; thread; thread = thread->nextsibling )
- DescribeThread(tid++, thread);
- return 0;
-}
-
-struct command_registration
-{
- const char* command;
- int (*function)(int, char*[]);
- const char* help;
-};
-
-
-static const struct command_registration commands[] =
-{
- { "bt", main_bt, "bt Stack trace" },
- { "dump", main_dump, "dump START [LEN] Dump continuous memory" },
- { "dump8", main_dump, "dump8 START [LEN] Dump 8-bit memory words" },
- { "dump16", main_dump, "dump16 START [LEN] Dump 16-bit memory words" },
- { "dump32", main_dump, "dump32 START [LEN] Dump 32-bit memory words" },
- { "dump64", main_dump, "dump16 START [LEN] Dump 64-bit memory words" },
- { "echo", main_echo, "echo [ARG...] Echo string" },
- { "exit", main_exit, "exit Quit debugger" },
- { "pid", main_pid, "pid [NEWPID] Change current process" },
- { "ps", main_ps, "ps List processes" },
- { "rs", main_rs, "rs Print registers" },
- { "tid", main_tid, "tid [NEWTID] Change current thread" },
- { "ts", main_ts, "ts List threads in current process" },
- { NULL, NULL, NULL },
-};
-
-bool RunCommand()
-{
- const size_t BUFFER_LENGTH = 256;
- static char buffer[BUFFER_LENGTH];
- Print("> ");
- ReadCommand(buffer, BUFFER_LENGTH-1);
-
- static char* argv[256];
-
- int argc = 0;
- char* input = buffer;
- while ( (argv[argc] = strsep(&input, " \t\n")) )
- if ( argv[argc][0] )
- argc++;
-
- if ( !argc )
- return true;
-
- if ( !strcmp(argv[0], "help") )
- {
- Print("You can use the following kernel debugger commands:\n");
- for ( size_t i = 0; commands[i].command; i++ )
- Print("%s\n", commands[i].help);
- Print("\n");
- return true;
- }
-
- for ( size_t i = 0; commands[i].command; i++ )
- if ( !strcmp(argv[0], commands[i].command) )
- return commands[i].function(argc, argv) != -1;
-
- Print("%s: No such kernel debugger command\n", argv[0]);
-
- return true;
-}
-
-void Run(bool entered_through_keyboard)
-{
- static uint16_t saved_video_memory[80*25];
-
- current_thread = CurrentThread();
-
- bool was_enabled = Interrupt::SetEnabled(false);
-
- ignore_next_f10 = entered_through_keyboard;
-
- addr_t saved_addrspace = current_thread->registers.cr3;
-
- memcpy(saved_video_memory, VIDEO_MEMORY, sizeof(saved_video_memory));
- int saved_x, saved_y;
- GetCursor(&saved_x, &saved_y);
-
- column = saved_x, row = saved_y;
- Print("\nSortix kernel debugger - type `help' for help.\n");
-
- while ( RunCommand() );
- SetCursor(saved_x, saved_y);
- memcpy(VIDEO_MEMORY, saved_video_memory, sizeof(saved_video_memory));
-
- Memory::SwitchAddressSpace(saved_addrspace);
-
- Interrupt::SetEnabled(was_enabled);
-}
-
-} // namespace Debugger
-} // namespace Sortix
diff --git a/kernel/elf.cpp b/kernel/elf.cpp
index 0ab75b53..7a46bccf 100644
--- a/kernel/elf.cpp
+++ b/kernel/elf.cpp
@@ -43,7 +43,6 @@
#include
#include
#include
-#include
namespace Sortix {
namespace ELF {
@@ -323,86 +322,6 @@ uintptr_t Load(const void* file_ptr, size_t file_size, Auxiliary* aux)
}
}
- // SECURITY: TODO: Insecure.
- Elf_Shdr* section_string_table_section = (Elf_Shdr*) (file + header->e_shoff + header->e_shstrndx * header->e_shentsize);
- const char* section_string_table = (const char*) (file + section_string_table_section->sh_offset);
- //size_t section_string_table_size = section_string_table_section->sh_size;
-
- const char* string_table = NULL;
- size_t string_table_size = 0;
-
- for ( Elf32_Half i = 0; i < header->e_shnum; i++ )
- {
- size_t max_shs = (file_size - header->e_shoff) / header->e_shentsize;
- if ( max_shs <= i )
- return errno = EINVAL, 0;
- size_t sheader_offset = header->e_shoff + i * header->e_shentsize;
- if ( (uintptr_t) (file + sheader_offset) & (alignof(Elf_Shdr) - 1) )
- return errno = EINVAL, 0;
- Elf_Shdr* sheader = (Elf_Shdr*) (file + sheader_offset);
-
- // SECURITY: TODO: Insecure.
- const char* section_name = section_string_table + sheader->sh_name;
-
- if ( !strcmp(section_name, ".strtab") )
- {
- // SECURITY: TODO: Insecure.
- string_table = (const char*) (file + sheader->sh_offset);
- string_table_size = sheader->sh_size;
- }
- }
-
- for ( Elf32_Half i = 0; i < header->e_shnum; i++ )
- {
- size_t sheader_offset = header->e_shoff + i * header->e_shentsize;
- Elf_Shdr* sheader = (Elf_Shdr*) (file + sheader_offset);
-
- // SECURITY: TODO: Insecure.
- const char* section_name = section_string_table + sheader->sh_name;
-
- if ( !strcmp(section_name, ".symtab") )
- {
- if ( process->symbol_table )
- continue;
-
- // SECURITY: TODO: Insecure.
- Elf_Sym* symbols = (Elf_Sym*) (file + sheader->sh_offset);
- size_t symbols_length = sheader->sh_size / sizeof(Elf_Sym);
-
- if ( symbols_length == 0 )
- continue;
-
- symbols++;
- symbols_length--;
-
- char* string_table_copy = new char[string_table_size];
- if ( !string_table_copy )
- continue;
- memcpy(string_table_copy, string_table, string_table_size);
-
- Symbol* symbols_copy = new Symbol[symbols_length];
- if ( !symbols_copy )
- {
- delete[] string_table_copy;
- continue;
- }
-
- for ( size_t i = 0; i < symbols_length; i++ )
- {
- memset(&symbols_copy[i], 0, sizeof(symbols_copy[i]));
- symbols_copy[i].address = symbols[i].st_value;
- symbols_copy[i].size = symbols[i].st_size;
- // SECURITY: TODO: Insecure.
- symbols_copy[i].name = string_table_copy + symbols[i].st_name;
- }
-
- process->string_table = string_table_copy;
- process->string_table_length = string_table_size;
- process->symbol_table = symbols_copy;
- process->symbol_table_length = symbols_length;
- }
- }
-
return header->e_entry;
}
diff --git a/kernel/include/sortix/kernel/debugger.h b/kernel/include/sortix/kernel/debugger.h
deleted file mode 100644
index 52fe4b65..00000000
--- a/kernel/include/sortix/kernel/debugger.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2013, 2014.
-
- This file is part of Sortix.
-
- Sortix is free software: you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option) any later
- version.
-
- Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- Sortix. If not, see .
-
- sortix/kernel/debugger.h
- Internal kernel debugger.
-
-*******************************************************************************/
-
-#ifndef INCLUDE_SORTIX_KERNEL_DEBUGGER_H
-#define INCLUDE_SORTIX_KERNEL_DEBUGGER_H
-
-namespace Sortix {
-namespace Debugger {
-
-void Run(bool entered_through_keyboard);
-
-} // namespace Debugger
-} // namespace Sortix
-
-#endif
diff --git a/kernel/include/sortix/kernel/process.h b/kernel/include/sortix/kernel/process.h
index 95622688..d88c27bd 100644
--- a/kernel/include/sortix/kernel/process.h
+++ b/kernel/include/sortix/kernel/process.h
@@ -56,7 +56,6 @@ struct ProcessTimer;
struct ioctx_struct;
typedef struct ioctx_struct ioctx_t;
struct segment;
-struct Symbol;
class Process
{
@@ -67,10 +66,6 @@ public:
~Process();
public:
- char* string_table;
- size_t string_table_length;
- Symbol* symbol_table;
- size_t symbol_table_length;
char* program_image_path;
addr_t addrspace;
pid_t pid;
diff --git a/kernel/include/sortix/kernel/symbol.h b/kernel/include/sortix/kernel/symbol.h
deleted file mode 100644
index d4fc64c7..00000000
--- a/kernel/include/sortix/kernel/symbol.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2013.
-
- This file is part of Sortix.
-
- Sortix is free software: you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option) any later
- version.
-
- Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- Sortix. If not, see .
-
- sortix/kernel/symbol.h
- Symbol table declarations.
-
-*******************************************************************************/
-
-#ifndef INCLUDE_SORTIX_KERNEL_SYMBOL_H
-#define INCLUDE_SORTIX_KERNEL_SYMBOL_H
-
-#include
-#include
-
-namespace Sortix {
-
-struct Symbol
-{
- uintptr_t address;
- size_t size;
- const char* name;
-};
-
-void SetKernelSymbolTable(Symbol* table, size_t length);
-const Symbol* GetKernelSymbolTable(size_t* length = NULL);
-const Symbol* GetKernelSymbol(uintptr_t address);
-
-static inline const char* GetKernelSymbolName(uintptr_t address)
-{
- const Symbol* symbol = GetKernelSymbol(address);
- return symbol ? symbol->name : NULL;
-}
-
-} // namespace Sortix
-
-#endif
diff --git a/kernel/interrupt.cpp b/kernel/interrupt.cpp
index 73e0c57e..d1acf9b6 100644
--- a/kernel/interrupt.cpp
+++ b/kernel/interrupt.cpp
@@ -27,7 +27,6 @@
#include
#include
-#include
#include
#include
#include
diff --git a/kernel/kb/layout/us.cpp b/kernel/kb/layout/us.cpp
deleted file mode 100644
index 6598b910..00000000
--- a/kernel/kb/layout/us.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2014.
-
- This file is part of Sortix.
-
- Sortix is free software: you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option) any later
- version.
-
- Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- Sortix. If not, see .
-
- kb/layout/us.cpp
- The United States keyboard layout.
-
-*******************************************************************************/
-
-#include
-
-#include
-
-#include
-#include
-
-#include "us.h"
-
-namespace Sortix {
-
-const unsigned MOD_SHIFT = 1U << 0U;
-const unsigned MOD_CAPS = 1U << 1U;
-const unsigned MOD_LSHIFT = 1U << 2U;
-const unsigned MOD_RSHIFT = 1U << 3U;
-
-const uint32_t LAYOUT_US[4UL*128UL] =
-{
- 0, 0, 0, 0, /* unused: kbkey 0 is invalid */
- 0, 0, 0, 0, /* KBKEY_ESC */
- L'1', L'!', L'1', L'!',
- L'2', L'@', L'2', L'@',
- L'3', L'#', L'3', L'#',
- L'4', L'$', L'4', L'$',
- L'5', L'%', L'5', L'%',
- L'6', L'^', L'6', L'^',
- L'7', L'&', L'7', L'&',
- L'8', L'*', L'8', L'*',
- L'9', L'(', L'9', L'(',
- L'0', L')', L'0', L')',
- L'-', L'_', L'-', L'_',
- L'=', L'+', L'=', L'+',
- L'\b', L'\b', L'\b', L'\b',
- L'\t', L'\t', L'\t', L'\t',
- L'q', L'Q', L'Q', L'q',
- L'w', L'W', L'W', L'w',
- L'e', L'E', L'E', L'e',
- L'r', L'R', L'R', L'r',
- L't', L'T', L'T', L't',
- L'y', L'Y', L'Y', L'y',
- L'u', L'U', L'U', L'u',
- L'i', L'I', L'I', L'i',
- L'o', L'O', L'O', L'o',
- L'p', L'P', L'P', L'p',
- L'[', L'{', L'[', L'{',
- L']', L'}', L']', L'}',
- L'\n', L'\n', L'\n', L'\n',
- 0, 0, 0, 0, /* KBKEY_LCTRL */
- L'a', L'A', L'A', L'a',
- L's', L'S', L'S', L's',
- L'd', L'D', L'D', L'd',
- L'f', L'F', L'F', L'f',
- L'g', L'G', L'G', L'g',
- L'h', L'H', L'H', L'h',
- L'j', L'J', L'J', L'j',
- L'k', L'K', L'K', L'k',
- L'l', L'L', L'L', L'l',
- L';', L':', L';', L':',
- L'\'', L'"', L'\'', L'"',
- L'`', L'~', L'`', L'~',
- 0, 0, 0, 0, /* KBKEY_LSHIFT */
- L'\\', L'|', L'\\', L'|',
- L'z', L'Z', L'Z', L'z',
- L'x', L'X', L'X', L'x',
- L'c', L'C', L'C', L'c',
- L'v', L'V', L'V', L'v',
- L'b', L'B', L'B', L'b',
- L'n', L'N', L'N', L'n',
- L'm', L'M', L'M', L'm',
- L',', L'<', L',', L'<',
- L'.', L'>', L'.', L'>',
- L'/', L'?', L'/', L'?',
- 0, 0, 0, 0, /* KBKEY_RSHIFT */
- L'*', L'*', L'*', L'*',
- 0, 0, 0, 0, /* KBKEY_LALT */
- L' ', L' ', L' ', L' ',
- 0, 0, 0, 0, /* KBKEY_CAPSLOCK */
- 0, 0, 0, 0, /* KBKEY_F1 */
- 0, 0, 0, 0, /* KBKEY_F2 */
- 0, 0, 0, 0, /* KBKEY_F3 */
- 0, 0, 0, 0, /* KBKEY_F4 */
- 0, 0, 0, 0, /* KBKEY_F5 */
- 0, 0, 0, 0, /* KBKEY_F6 */
- 0, 0, 0, 0, /* KBKEY_F7 */
- 0, 0, 0, 0, /* KBKEY_F8 */
- 0, 0, 0, 0, /* KBKEY_F9 */
- 0, 0, 0, 0, /* KBKEY_F10 */
- 0, 0, 0, 0, /* KBKEY_NUMLOCK */
- 0, 0, 0, 0, /* KBKEY_SCROLLLOCK */
- 0, 0, 0, 0, /* KBKEY_KPAD7 */
- 0, 0, 0, 0, /* KBKEY_KPAD8 */
- 0, 0, 0, 0, /* KBKEY_KPAD9 */
- L'-', L'-', L'-', L'-',
- 0, 0, 0, 0, /* KBKEY_KPAD4 */
- 0, 0, 0, 0, /* KBKEY_KPAD5 */
- 0, 0, 0, 0, /* KBKEY_KPAD6 */
- L'+', L'+', L'+', L'+',
- /* Nothing printable after this point */
-};
-
-KBLayoutUS::KBLayoutUS()
-{
- modifiers = 0;
-}
-
-KBLayoutUS::~KBLayoutUS()
-{
-}
-
-bool KBLayoutUS::ProcessModifier(int logickey, int modkey, unsigned flag)
-{
- if ( logickey == modkey )
- return modifiers |= flag, true;
- if ( logickey == -modkey )
- return modifiers &= ~flag, true;
- return false;
-}
-
-uint32_t KBLayoutUS::Translate(int kbkey)
-{
- if ( kbkey == KBKEY_LSHIFT )
- return modifiers |= MOD_LSHIFT, 0;
- if ( kbkey == -KBKEY_LSHIFT )
- return modifiers &= ~MOD_LSHIFT, 0;
- if ( kbkey == KBKEY_RSHIFT )
- return modifiers |= MOD_RSHIFT, 0;
- if ( kbkey == -KBKEY_RSHIFT )
- return modifiers &= ~MOD_RSHIFT, 0;
- if ( kbkey == KBKEY_CAPSLOCK )
- return modifiers ^= MOD_CAPS, 0;
-
- int abskbkey = kbkey < 0 ? -kbkey : kbkey;
-
- if ( (modifiers & MOD_LSHIFT) || (modifiers & MOD_RSHIFT) )
- modifiers |= MOD_SHIFT;
- else
- modifiers &= ~MOD_SHIFT;
-
- unsigned usedmods = modifiers & (MOD_SHIFT | MOD_CAPS);
- size_t index = abskbkey << 2 | usedmods;
-
- // Check if the kbkey is outside the layout structure (not printable).
- size_t numchars = sizeof(LAYOUT_US) / 4UL / sizeof(uint32_t);
- if ( numchars < (size_t) abskbkey )
- return 0;
-
- return LAYOUT_US[index];
-}
-
-} // namespace Sortix
diff --git a/kernel/kb/layout/us.h b/kernel/kb/layout/us.h
deleted file mode 100644
index 0aaf6b00..00000000
--- a/kernel/kb/layout/us.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2011, 2012, 2014.
-
- This file is part of Sortix.
-
- Sortix is free software: you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option) any later
- version.
-
- Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- Sortix. If not, see .
-
- kb/layout/us.h
- The United States keyboard layout.
-
-*******************************************************************************/
-
-#ifndef SORTIX_KB_LAYOUT_US_H
-#define SORTIX_KB_LAYOUT_US_H
-
-#include
-
-namespace Sortix {
-
-class KBLayoutUS
-{
-public:
- KBLayoutUS();
- ~KBLayoutUS();
- uint32_t Translate(int kbkey);
- bool ProcessModifier(int kbkey, int modkey, unsigned flag);
-
-private:
- unsigned modifiers;
-
-};
-
-} // namespace Sortix
-
-#endif
diff --git a/kernel/kernel.cpp b/kernel/kernel.cpp
index 51d44711..b9ccddc2 100644
--- a/kernel/kernel.cpp
+++ b/kernel/kernel.cpp
@@ -63,7 +63,6 @@
#include
#include
#include
-#include
#include
#include
#include
diff --git a/kernel/process.cpp b/kernel/process.cpp
index 14500988..1d16e59f 100644
--- a/kernel/process.cpp
+++ b/kernel/process.cpp
@@ -62,7 +62,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -77,10 +76,6 @@ namespace Sortix {
Process::Process()
{
- string_table = NULL;
- string_table_length = 0;
- symbol_table = NULL;
- symbol_table_length = 0;
program_image_path = NULL;
addrspace = 0;
pid = 0;
@@ -165,8 +160,6 @@ Process::Process()
Process::~Process()
{
- delete[] string_table;
- delete[] symbol_table;
if ( alarm_timer.IsAttached() )
alarm_timer.Detach();
delete[] program_image_path;
@@ -302,10 +295,6 @@ void Process::LastPrayer()
Memory::DestroyAddressSpace(prevaddrspace);
addrspace = 0;
- // Unload the process symbol and string tables.
- delete[] symbol_table; symbol_table = NULL;
- delete[] string_table; string_table = NULL;
-
// Init is nice and will gladly raise our orphaned children and zombies.
Process* init = Scheduler::GetInitProcess();
assert(init);
@@ -726,27 +715,6 @@ Process* Process::Fork()
if ( !(clone->program_image_path = String::Clone(program_image_path)) )
failure = true;
- if ( string_table && (clone->string_table = new char[string_table_length]) )
- {
- memcpy(clone->string_table, string_table, string_table_length);
- clone->string_table_length = string_table_length;
- }
-
- if ( clone->string_table && symbol_table &&
- (clone->symbol_table = new Symbol[symbol_table_length]) )
- {
- for ( size_t i = 0; i < symbol_table_length; i++ )
- {
- clone->symbol_table[i].address = symbol_table[i].address;
- clone->symbol_table[i].size = symbol_table[i].size;
- clone->symbol_table[i].name =
- (const char*)((uintptr_t) symbol_table[i].name -
- (uintptr_t) string_table +
- (uintptr_t) clone->string_table);
- }
- clone->symbol_table_length = symbol_table_length;
- }
-
// If the proces creation failed, ask the process to commit suicide and
// not become a zombie, as we don't wait for it to exit. It will clean
// up all the above resources and delete itself.
@@ -761,11 +729,6 @@ Process* Process::Fork()
void Process::ResetForExecute()
{
- string_table_length = 0;
- symbol_table_length = 0;
- delete[] string_table; string_table = NULL;
- delete[] symbol_table; symbol_table = NULL;
-
DeleteTimers();
for ( int i = 0; i < SIG_MAX_NUM; i++ )
diff --git a/kernel/symbol.cpp b/kernel/symbol.cpp
deleted file mode 100644
index 289a7db4..00000000
--- a/kernel/symbol.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*******************************************************************************
-
- Copyright(C) Jonas 'Sortie' Termansen 2013.
-
- This file is part of Sortix.
-
- Sortix is free software: you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation, either version 3 of the License, or (at your option) any later
- version.
-
- Sortix is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
- details.
-
- You should have received a copy of the GNU General Public License along with
- Sortix. If not, see .
-
- symbol.cpp
- Symbol table access.
-
-*******************************************************************************/
-
-#include
-#include
-
-#include
-
-namespace Sortix {
-
-Symbol* kernel_symbol_table;
-size_t kernel_symbol_table_length;
-
-void SetKernelSymbolTable(Symbol* table, size_t length)
-{
- kernel_symbol_table = table;
- kernel_symbol_table_length = length;
-}
-
-const Symbol* GetKernelSymbolTable(size_t* length)
-{
- if ( length )
- *length = kernel_symbol_table_length;
- return kernel_symbol_table;
-}
-
-static bool MatchesSymbol(const Symbol* symbol, uintptr_t address)
-{
- return symbol->address <= address &&
- address <= symbol->address + symbol->size;
-}
-
-const Symbol* GetKernelSymbol(uintptr_t address)
-{
- for ( size_t i = 0; i < kernel_symbol_table_length; i++ )
- {
- const Symbol* symbol = kernel_symbol_table + i;
- if ( MatchesSymbol(symbol, address) )
- return symbol;
- }
- return NULL;
-}
-
-} // namespace Sortix
diff --git a/kernel/x86-family/interrupt.cpp b/kernel/x86-family/interrupt.cpp
index 47f81a95..75774539 100644
--- a/kernel/x86-family/interrupt.cpp
+++ b/kernel/x86-family/interrupt.cpp
@@ -29,7 +29,6 @@
#include
#include
-#include
#include
#include
#include
@@ -103,9 +102,6 @@ namespace Interrupt {
extern "C" { unsigned long asm_is_cpu_interrupted = 0; }
-const bool RUN_DEBUGGER_ON_KERNEL_CRASH = false;
-const bool RUN_DEBUGGER_ON_USER_CRASH = false;
-
const size_t NUM_KNOWN_EXCEPTIONS = 20;
const char* exception_names[] =
{
@@ -281,10 +277,6 @@ void KernelCrashHandler(struct interrupt_context* intctx)
{
Scheduler::SaveInterruptedContext(intctx, &CurrentThread()->registers);
- // Possibly switch to the kernel debugger in event of a crash.
- if ( RUN_DEBUGGER_ON_KERNEL_CRASH )
- Debugger::Run(false);
-
// Panic the kernel with a diagnostic message.
PanicF("Unhandled CPU Exception id %zu `%s' at ip=0x%zx (cr2=0x%zx, "
"err_code=0x%zx)", intctx->int_no, ExceptionName(intctx),
@@ -311,10 +303,6 @@ void UserCrashHandler(struct interrupt_context* intctx)
return Signal::DispatchHandler(intctx, NULL);
}
- // Possibly switch to the kernel debugger in event of a crash.
- if ( RUN_DEBUGGER_ON_USER_CRASH )
- Debugger::Run(false);
-
// Issue a diagnostic message to the kernel log concerning the crash.
Log::PrintF("The current process (pid %ji `%s') crashed and was terminated:\n",
(intmax_t) CurrentProcess()->pid, CurrentProcess()->program_image_path);