diff --git a/Kernel/FileSystem/ProcFS.cpp b/Kernel/FileSystem/ProcFS.cpp index 782c3f97e8..95e5d220ea 100644 --- a/Kernel/FileSystem/ProcFS.cpp +++ b/Kernel/FileSystem/ProcFS.cpp @@ -502,7 +502,7 @@ Optional procfs$pid_cwd(InodeIdentifier identifier) Optional procfs$self(InodeIdentifier) { char buffer[16]; - ksprintf(buffer, "%u", current->pid()); + sprintf(buffer, "%u", current->pid()); return KBuffer::copy((const u8*)buffer, strlen(buffer)); } @@ -1055,7 +1055,7 @@ bool ProcFSInode::traverse_as_directory(Functionnchunk * CHUNK_SIZE; + + if (old_size == new_size) + return ptr; + + auto* new_ptr = kmalloc(new_size); + memcpy(new_ptr, ptr, min(old_size, new_size)); + kfree(ptr); + return new_ptr; +} + void* operator new(size_t size) { return kmalloc(size); diff --git a/Kernel/Heap/kmalloc.h b/Kernel/Heap/kmalloc.h index 172f5cb508..0feb6e2fec 100644 --- a/Kernel/Heap/kmalloc.h +++ b/Kernel/Heap/kmalloc.h @@ -9,6 +9,7 @@ void kmalloc_init(); [[gnu::malloc, gnu::returns_nonnull, gnu::alloc_size(1)]] void* kmalloc_eternal(size_t); [[gnu::malloc, gnu::returns_nonnull, gnu::alloc_size(1)]] void* kmalloc_page_aligned(size_t); [[gnu::malloc, gnu::returns_nonnull, gnu::alloc_size(1)]] void* kmalloc_aligned(size_t, size_t alignment); +void* krealloc(void*, size_t); void kfree(void*); void kfree_aligned(void*); diff --git a/Kernel/Makefile b/Kernel/Makefile index 01fd177929..b75072a25e 100644 --- a/Kernel/Makefile +++ b/Kernel/Makefile @@ -115,7 +115,7 @@ kernel.map: kernel @echo "MKMAP $@"; sh mkmap.sh $(KERNEL): $(OBJS) - @echo "LD $@"; $(LD) $(LDFLAGS) -o $@ $(OBJS) -lgcc + @echo "LD $@"; $(LD) $(LDFLAGS) -o $@ $(OBJS) -lgcc -lstdc++ .cpp.o: @echo "CXX $<"; $(CXX) $(CXXFLAGS) -o $@ -c $< diff --git a/Kernel/StdLib.cpp b/Kernel/StdLib.cpp index 6e9e4dbc33..a0b033cd71 100644 --- a/Kernel/StdLib.cpp +++ b/Kernel/StdLib.cpp @@ -174,4 +174,13 @@ char* strstr(const char* haystack, const char* needle) ASSERT_NOT_REACHED(); } +void* realloc(void* p, size_t s) +{ + return krealloc(p, s); +} + +void free(void* p) +{ + return kfree(p); +} } diff --git a/Kernel/TTY/SlavePTY.cpp b/Kernel/TTY/SlavePTY.cpp index ce5461175b..b368b56c24 100644 --- a/Kernel/TTY/SlavePTY.cpp +++ b/Kernel/TTY/SlavePTY.cpp @@ -10,7 +10,7 @@ SlavePTY::SlavePTY(MasterPTY& master, unsigned index) , m_master(master) , m_index(index) { - ksprintf(m_tty_name, "/dev/pts/%u", m_index); + sprintf(m_tty_name, "/dev/pts/%u", m_index); set_uid(current->process().uid()); set_gid(current->process().gid()); DevPtsFS::register_slave_pty(*this); diff --git a/Kernel/TTY/VirtualConsole.cpp b/Kernel/TTY/VirtualConsole.cpp index 78d72f1421..44d35b7a06 100644 --- a/Kernel/TTY/VirtualConsole.cpp +++ b/Kernel/TTY/VirtualConsole.cpp @@ -41,7 +41,7 @@ VirtualConsole::VirtualConsole(unsigned index, InitialContents initial_contents) : TTY(4, index) , m_index(index) { - ksprintf(m_tty_name, "/dev/tty%u", m_index); + sprintf(m_tty_name, "/dev/tty%u", m_index); set_size(80, 25); m_horizontal_tabs = static_cast(kmalloc_eternal(columns())); for (unsigned i = 0; i < columns(); ++i) diff --git a/Kernel/kprintf.cpp b/Kernel/kprintf.cpp index 333929d1a0..cb52fca244 100644 --- a/Kernel/kprintf.cpp +++ b/Kernel/kprintf.cpp @@ -96,7 +96,7 @@ static void buffer_putch(char*& bufptr, char ch) *bufptr++ = ch; } -int ksprintf(char* buffer, const char* fmt, ...) +int sprintf(char* buffer, const char* fmt, ...) { va_list ap; va_start(ap, fmt); diff --git a/Kernel/kstdio.h b/Kernel/kstdio.h index db41888c26..9a5a91d27f 100644 --- a/Kernel/kstdio.h +++ b/Kernel/kstdio.h @@ -6,7 +6,7 @@ extern "C" { int dbgprintf(const char* fmt, ...); int dbgputstr(const char*, int); int kprintf(const char* fmt, ...); -int ksprintf(char* buf, const char* fmt, ...); +int sprintf(char* buf, const char* fmt, ...); void set_serial_debug(bool on_or_off); int get_serial_debug(); } diff --git a/Libraries/LibELF/ELFLoader.cpp b/Libraries/LibELF/ELFLoader.cpp index 8c1e8302fa..f1f0a0f14b 100644 --- a/Libraries/LibELF/ELFLoader.cpp +++ b/Libraries/LibELF/ELFLoader.cpp @@ -1,6 +1,7 @@ #include "ELFLoader.h" #include #include +#include #ifdef KERNEL #include @@ -138,7 +139,12 @@ String ELFLoader::symbolicate(u32 address) const if (i == 0) return "!!"; auto& symbol = sorted_symbols[i - 1]; - return String::format("%s +%u", symbol.name, address - symbol.address); + int status = 0; + auto* demangled_name = abi::__cxa_demangle(symbol.name, nullptr, nullptr, &status); + auto string = String::format("%s +%u", status == 0 ? demangled_name : symbol.name, address - symbol.address); + if (status == 0) + kfree(demangled_name); + return string; } } return "??";