From 2d1d01661b0c21fad05532f8a0bbfe0efbe2663a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 19 Oct 2018 11:20:49 +0200 Subject: [PATCH] Add a way to initialize VFS globals. This is needed since the kernel loader doesn't even zero out bss, much less call any static constructors. --- VirtualFileSystem/FileSystem.cpp | 10 ++++++++-- VirtualFileSystem/FileSystem.h | 1 + VirtualFileSystem/VirtualFileSystem.cpp | 5 +++++ VirtualFileSystem/VirtualFileSystem.h | 2 ++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/VirtualFileSystem/FileSystem.cpp b/VirtualFileSystem/FileSystem.cpp index 6b13854ece..e8b774e767 100644 --- a/VirtualFileSystem/FileSystem.cpp +++ b/VirtualFileSystem/FileSystem.cpp @@ -2,16 +2,22 @@ #include #include "FileSystem.h" -static dword s_lastFileSystemID = 0; +static dword s_lastFileSystemID; +static HashMap* map; static HashMap& fileSystems() { - static HashMap* map; if (!map) map = new HashMap(); return *map; } +void FileSystem::initializeGlobals() +{ + s_lastFileSystemID = 0; + map = 0; +} + FileSystem::FileSystem() : m_id(++s_lastFileSystemID) { diff --git a/VirtualFileSystem/FileSystem.h b/VirtualFileSystem/FileSystem.h index 80c3021426..a32e8c4077 100644 --- a/VirtualFileSystem/FileSystem.h +++ b/VirtualFileSystem/FileSystem.h @@ -18,6 +18,7 @@ static const dword mepoch = 476763780; class FileSystem : public Retainable { public: + static void initializeGlobals(); virtual ~FileSystem(); dword id() const { return m_id; } diff --git a/VirtualFileSystem/VirtualFileSystem.cpp b/VirtualFileSystem/VirtualFileSystem.cpp index 15104a2f9d..f0f712a6a5 100644 --- a/VirtualFileSystem/VirtualFileSystem.cpp +++ b/VirtualFileSystem/VirtualFileSystem.cpp @@ -7,6 +7,11 @@ //#define VFS_DEBUG +void VirtualFileSystem::initializeGlobals() +{ + FileSystem::initializeGlobals(); +} + static dword encodedDevice(unsigned major, unsigned minor) { return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12); diff --git a/VirtualFileSystem/VirtualFileSystem.h b/VirtualFileSystem/VirtualFileSystem.h index 5c59a372cc..c16efa130f 100644 --- a/VirtualFileSystem/VirtualFileSystem.h +++ b/VirtualFileSystem/VirtualFileSystem.h @@ -14,6 +14,8 @@ class FileSystem; class VirtualFileSystem { public: + static void initializeGlobals(); + struct Node { InodeIdentifier inode;