Migrate RTL subsystem to C++
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 21s
Builds / ExectOS (amd64, release) (push) Failing after 20s
Builds / ExectOS (i686, debug) (push) Failing after 19s
Builds / ExectOS (i686, release) (push) Failing after 18s

This commit is contained in:
2025-09-11 18:28:24 +02:00
parent e507dd0390
commit 9518e7da8e
35 changed files with 3133 additions and 1068 deletions

View File

@@ -2,7 +2,7 @@
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ar.hh
* DESCRIPTION:
* DESCRIPTION: Architecture Library
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/

View File

@@ -2,7 +2,7 @@
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ex.hh
* DESCRIPTION:
* DESCRIPTION: Kernel Executive
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/

25
xtoskrnl/includes/rtl.hh Normal file
View File

@@ -0,0 +1,25 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl.hh
* DESCRIPTION: Runtime Library
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_HH
#define __XTOSKRNL_RTL_HH
#include <xtos.hh>
#include <rtl/atomic.hh>
#include <rtl/bitmap.hh>
#include <rtl/dispatch.hh>
#include <rtl/endian.hh>
#include <rtl/guid.hh>
#include <rtl/llist.hh>
#include <rtl/math.hh>
#include <rtl/memory.hh>
#include <rtl/string.hh>
#include <rtl/widestr.hh>
#endif /* __XTOSKRNL_RTL_HH */

View File

@@ -0,0 +1,97 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/atomic.hh
* DESCRIPTION: Atomic operations support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_ATOMIC_HH
#define __XTOSKRNL_RTL_ATOMIC_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Atomic
{
public:
STATIC XTFASTCALL CHAR And8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT And16(IN PSHORT Address,
IN SHORT Mask);
STATIC XTFASTCALL LONG And32(IN PLONG Address,
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR And64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
STATIC XTFASTCALL UCHAR BitTestAndSet(IN PLONG Base,
IN LONG Offset);
STATIC XTFASTCALL UCHAR BitTestAndSet64(IN PLONGLONG Base,
IN LONGLONG Offset);
STATIC XTFASTCALL CHAR CompareExchange8(IN PCHAR Address,
IN CHAR Comperand,
IN CHAR Exchange);
STATIC XTFASTCALL SHORT CompareExchange16(IN PSHORT Address,
IN SHORT Comperand,
IN SHORT Exchange);
STATIC XTFASTCALL LONG CompareExchange32(IN PLONG Address,
IN LONG Comperand,
IN LONG Exchange);
STATIC XTFASTCALL LONG_PTR CompareExchange64(IN PLONG_PTR Address,
IN LONG_PTR Comperand,
IN LONG_PTR Exchange);
STATIC XTFASTCALL PVOID CompareExchangePointer(IN PVOID *Address,
IN PVOID Comperand,
IN PVOID Exchange);
STATIC XTFASTCALL CHAR Decrement8(IN PCHAR Address);
STATIC XTFASTCALL SHORT Decrement16(IN PSHORT Address);
STATIC XTFASTCALL LONG Decrement32(IN PLONG Address);
STATIC XTFASTCALL LONG_PTR Decrement64(IN PLONG_PTR Address);
STATIC XTFASTCALL CHAR Exchange8(IN PCHAR Address,
IN CHAR Exchange);
STATIC XTFASTCALL SHORT Exchange16(IN PSHORT Address,
IN SHORT Exchange);
STATIC XTFASTCALL LONG Exchange32(IN PLONG Address,
IN LONG Exchange);
STATIC XTFASTCALL LONG_PTR Exchange64(IN PLONG_PTR Address,
IN LONG_PTR Exchange);
STATIC XTFASTCALL CHAR ExchangeAdd8(IN PCHAR Address,
IN CHAR Value);
STATIC XTFASTCALL SHORT ExchangeAdd16(IN PSHORT Address,
IN SHORT Value);
STATIC XTFASTCALL LONG ExchangeAdd32(IN PLONG Address,
IN LONG Value);
STATIC XTFASTCALL LONG_PTR ExchangeAdd64(IN PLONG_PTR Address,
IN LONG_PTR Value);
STATIC XTFASTCALL PVOID ExchangePointer(IN PVOID *Address,
IN PVOID Exchange);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY FlushSingleList(IN PSINGLE_LIST_HEADER Header);
STATIC XTFASTCALL CHAR Increment8(IN PCHAR Address);
STATIC XTFASTCALL SHORT Increment16(IN PSHORT Address);
STATIC XTFASTCALL LONG Increment32(IN PLONG Address);
STATIC XTFASTCALL LONG_PTR Increment64(IN PLONG_PTR Address);
STATIC XTFASTCALL CHAR Or8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT Or16(IN PSHORT Address,
IN SHORT Mask);
STATIC XTFASTCALL LONG Or32(IN PLONG Address,
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR Or64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
STATIC XTFASTCALL XTFASTCALL PSINGLE_LIST_ENTRY PopEntrySingleList(IN PSINGLE_LIST_HEADER Header);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PushEntrySingleList(IN PSINGLE_LIST_HEADER Header,
IN PSINGLE_LIST_ENTRY Entry);
STATIC XTFASTCALL CHAR Xor8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT Xor16(IN PSHORT Address,
IN SHORT Mask);
STATIC XTFASTCALL LONG Xor32(IN PLONG Address,
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR Xor64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
};
}
#endif /* __XTOSKRNL_RTL_ATOMIC_HH */

View File

@@ -0,0 +1,64 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/bitmap.hh
* DESCRIPTION: Bit maps support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_BITMAP_HH
#define __XTOSKRNL_RTL_BITMAP_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class BitMap
{
public:
STATIC XTAPI VOID ClearAllBits(IN PRTL_BITMAP BitMap);
STATIC XTAPI VOID ClearBit(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Bit);
STATIC XTAPI VOID ClearBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR StartingIndex,
IN ULONG_PTR Length);
STATIC XTAPI ULONG ClearSetBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Length,
IN ULONG_PTR Index);
STATIC XTAPI VOID DumpBitMap(IN PRTL_BITMAP BitMap);
STATIC XTAPI ULONG_PTR FindClearBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Length,
IN ULONG_PTR Index);
STATIC XTAPI ULONG_PTR FindSetBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Length,
IN ULONG_PTR Index);
STATIC XTAPI VOID InitializeBitMap(IN PRTL_BITMAP BitMap,
IN PULONG_PTR Buffer,
IN ULONG Size);
STATIC XTAPI VOID SetAllBits(IN PRTL_BITMAP BitMap);
STATIC XTAPI VOID SetBit(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Bit);
STATIC XTAPI VOID SetBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR StartingIndex,
IN ULONG_PTR Length);
STATIC XTAPI ULONG SetClearBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Length,
IN ULONG_PTR Index);
STATIC XTAPI BOOLEAN TestBit(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Bit);
private:
STATIC XTAPI ULONG_PTR CountBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Length,
IN ULONG_PTR StartingIndex,
IN BOOLEAN SetBits);
STATIC XTAPI ULONG_PTR FindBits(IN PRTL_BITMAP BitMap,
IN ULONG_PTR Length,
IN ULONG_PTR StartingIndex,
IN BOOLEAN SetBits);
};
}
#endif /* __XTOSKRNL_RTL_BITMAP_HH */

View File

@@ -0,0 +1,26 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/dispatch.hh
* DESCRIPTION: Dispatching support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_DISPATCH_HH
#define __XTOSKRNL_RTL_DISPATCH_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Dispatcher
{
public:
STATIC XTAPI VOID GetStackLimits(OUT PULONG_PTR StackBase,
OUT PULONG_PTR StackLimit);
};
}
#endif /* __XTOSKRNL_RTL_DISPATCH_HH */

View File

@@ -0,0 +1,27 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/endian.hh
* DESCRIPTION: Endian conversion routines
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_ENDIAN_HH
#define __XTOSKRNL_RTL_ENDIAN_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Endianness
{
public:
STATIC XTAPI USHORT SwapByte16(IN USHORT Source);
STATIC XTAPI ULONG SwapByte32(IN ULONG Source);
STATIC XTAPI ULONGLONG SwapByte64(IN ULONGLONG Source);
};
}
#endif /* __XTOSKRNL_RTL_ENDIAN_HH */

View File

@@ -0,0 +1,26 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/gui.hh
* DESCRIPTION: Endian conversion routines
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_GUID_HH
#define __XTOSKRNL_RTL_GUID_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Guid
{
public:
STATIC XTAPI BOOLEAN CompareGuids(IN PGUID Guid1,
IN PGUID Guid2);
};
}
#endif /* __XTOSKRNL_RTL_GUID_HH */

View File

@@ -0,0 +1,33 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/llist.hh
* DESCRIPTION: Linked list manipulation routines
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_LLIST_HH
#define __XTOSKRNL_RTL_LLIST_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class LinkedList
{
public:
STATIC XTCDECL VOID InitializeListHead(IN PLIST_ENTRY ListHead);
STATIC XTCDECL VOID InitializeListHead32(IN PLIST_ENTRY32 ListHead);
STATIC XTCDECL VOID InsertHeadList(IN OUT PLIST_ENTRY ListHead,
IN PLIST_ENTRY Entry);
STATIC XTCDECL VOID InsertTailList(IN OUT PLIST_ENTRY ListHead,
IN PLIST_ENTRY Entry);
STATIC XTCDECL BOOLEAN ListEmpty(IN PLIST_ENTRY ListHead);
STATIC XTCDECL BOOLEAN ListLoop(IN PLIST_ENTRY ListHead);
STATIC XTCDECL VOID RemoveEntryList(IN PLIST_ENTRY Entry);
};
}
#endif /* __XTOSKRNL_RTL_LLIST_HH */

View File

@@ -0,0 +1,51 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/math.hh
* DESCRIPTION: Kernel math support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_MATH_HH
#define __XTOSKRNL_RTL_MATH_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Math
{
public:
STATIC XTAPI LARGE_INTEGER ConvertToLargeInteger32(IN LONG Value);
STATIC XTAPI LARGE_INTEGER ConvertToLargeIntegerUnsigned32(IN ULONG Value);
STATIC XTAPI INT CountLeadingZeroes32(IN ULONG Value);
STATIC XTAPI INT CountLeadingZeroes64(IN ULONGLONG Value);
STATIC XTAPI INT CountTrailingZeroes32(IN ULONG Value);
STATIC XTAPI INT CountTrailingZeroes64(IN ULONGLONG Value);
STATIC XTAPI LONGLONG Divide32(IN LONG Dividend,
IN LONG Divisor,
OUT PLONG Remainder);
STATIC XTAPI LONGLONG Divide64(IN LONGLONG Dividend,
IN LONGLONG Divisor,
OUT PLONGLONG Remainder);
STATIC XTAPI ULONGLONG DivideUnsigned32(IN ULONG Dividend,
IN ULONG Divisor,
OUT PULONG Remainder);
STATIC XTAPI ULONGLONG DivideUnsigned64(IN ULONGLONG Dividend,
IN ULONGLONG Divisor,
OUT PULONGLONG Remainder);
STATIC XTAPI LARGE_INTEGER DivideLargeInteger(IN LARGE_INTEGER Dividend,
IN ULONG Divisor,
OUT PULONG Remainder);
STATIC XTAPI LONG GetBaseExponent(IN DOUBLE Value,
OUT PDOUBLE PowerOfTen);
STATIC XTAPI BOOLEAN InfiniteDouble(IN DOUBLE Value);
STATIC XTAPI LARGE_INTEGER MultiplyLargeInteger(IN LARGE_INTEGER Multiplicand,
IN LONG Multiplier);
STATIC XTAPI BOOLEAN NanDouble(IN DOUBLE Value);
};
}
#endif /* __XTOSKRNL_RTL_MATH_HH */

View File

@@ -0,0 +1,41 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/memory.hh
* DESCRIPTION: Memory related routines
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_MEMORY_HH
#define __XTOSKRNL_RTL_MEMORY_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Memory
{
public:
STATIC XTAPI SIZE_T CompareMemory(IN PCVOID LeftBuffer,
IN PCVOID RightBuffer,
IN SIZE_T Length);
STATIC XTAPI VOID CopyMemory(OUT PVOID Destination,
IN PCVOID Source,
IN SIZE_T Length);
STATIC XTAPI VOID MoveMemory(OUT PVOID Destination,
IN PCVOID Source,
IN SIZE_T Length);
STATIC XTAPI BOOLEAN SameMemory(IN PCVOID LeftBuffer,
IN PCVOID RightBuffer,
IN SIZE_T Length);
STATIC XTAPI VOID SetMemory(OUT PVOID Destination,
IN UCHAR Byte,
IN SIZE_T Length);
STATIC XTAPI VOID ZeroMemory(OUT PVOID Destination,
IN SIZE_T Length);
};
}
#endif /* __XTOSKRNL_RTL_MEMORY_HH */

View File

@@ -0,0 +1,55 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/string.hh
* DESCRIPTION: String support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_STRING_HH
#define __XTOSKRNL_RTL_STRING_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class String
{
public:
STATIC XTAPI SIZE_T CompareString(IN PCSTR String1,
IN PCSTR String2,
IN SIZE_T Length);
STATIC XTAPI SIZE_T CompareStringInsensitive(IN PCSTR String1,
IN PCSTR String2,
IN SIZE_T Length);
STATIC XTAPI PCHAR ConcatenateString(OUT PCHAR Destination,
IN PCHAR Source,
IN SIZE_T Count);
STATIC XTAPI VOID CopyString(IN PCHAR Destination,
IN PCSTR Source,
IN ULONG Length);
STATIC XTAPI PCSTR FindString(IN PCSTR Source,
IN PCSTR Search);
STATIC XTAPI PCSTR FindStringInsensitive(IN PCSTR Source,
IN PCSTR Search);
STATIC XTAPI VOID ReverseString(IN OUT PCHAR String,
IN ULONG Length);
STATIC XTAPI SIZE_T StringLength(IN PCSTR String,
IN SIZE_T MaxLength);
STATIC XTAPI SIZE_T StringToWideString(OUT PWCHAR Destination,
IN PCSTR *Source,
IN SIZE_T Length);
STATIC XTAPI PCHAR TokenizeString(IN PCHAR String,
IN PCSTR Delimiter,
IN OUT PCHAR *SavePtr);
STATIC XTAPI CHAR ToLowerCharacter(IN CHAR Character);
STATIC XTAPI CHAR ToUpperCharacter(IN CHAR Character);
STATIC XTAPI PCHAR TrimLeftString(IN PCHAR String);
STATIC XTAPI PCHAR TrimRightString(IN PCHAR String);
STATIC XTAPI PCHAR TrimString(IN PCHAR String);
};
}
#endif /* __XTOSKRNL_RTL_STRING_HH */

View File

@@ -0,0 +1,87 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/widestr.hh
* DESCRIPTION: Wide string support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_WIDESTR_HH
#define __XTOSKRNL_RTL_WIDESTR_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class WideString
{
public:
STATIC XTAPI SIZE_T CompareWideString(IN PCWSTR String1,
IN PCWSTR String2,
IN SIZE_T Length);
STATIC XTAPI SIZE_T CompareWideStringInsensitive(IN PCWSTR String1,
IN PCWSTR String2,
IN SIZE_T Length);
STATIC XTAPI PWCHAR ConcatenateWideString(OUT PWCHAR Destination,
IN PWCHAR Source,
IN SIZE_T Count);
STATIC XTAPI VOID CopyWideString(IN PWCHAR Destination,
IN PCWSTR Source,
IN ULONG Length);
STATIC XTAPI PCWSTR FindWideString(IN PCWSTR Source,
IN PCWSTR Search);
STATIC XTAPI PCWSTR FindWideStringInsensitive(IN PCWSTR Source,
IN PCWSTR Search);
STATIC XTAPI XTSTATUS FormatWideString(IN PRTL_PRINT_CONTEXT Context,
IN PCWSTR Format,
IN VA_LIST ArgumentList);
STATIC XTAPI VOID ReverseWideString(IN OUT PWCHAR String,
IN ULONG Length);
STATIC XTAPI PWCHAR TokenizeWideString(IN PWCHAR String,
IN PCWSTR Delimiter,
IN OUT PWCHAR *SavePtr);
STATIC XTAPI WCHAR ToLowerWideCharacter(IN WCHAR Character);
STATIC XTAPI WCHAR ToUpperWideCharacter(IN WCHAR Character);
STATIC XTAPI PWCHAR TrimLeftWideString(IN PWCHAR String);
STATIC XTAPI PWCHAR TrimRightWideString(IN PWCHAR String);
STATIC XTAPI PWCHAR TrimWideString(IN PWCHAR String);
STATIC XTAPI SIZE_T WideStringLength(IN PCWSTR String,
IN SIZE_T MaxLength);
private:
STATIC XTAPI XTSTATUS FormatArgumentSpecifier(IN PRTL_PRINT_CONTEXT Context,
IN PCWSTR Format,
IN PVA_LIST ArgumentList,
IN OUT PULONG Index);
STATIC XTAPI ULONGLONG GetArgument(IN PVA_LIST ArgumentList,
IN ULONG ArgumentNumber,
IN LONG ArgumentSize);
STATIC XTAPI ULONGLONG GetSpecifierValue(IN PWCHAR *Format);
STATIC XTAPI XTSTATUS WriteWideCharacter(IN PRTL_PRINT_CONTEXT Context,
IN WCHAR Character);
STATIC XTCDECL XTSTATUS WriteCustomValue(IN PRTL_PRINT_CONTEXT Context,
IN PCWSTR Format,
IN ...);
STATIC XTAPI XTSTATUS WriteDoubleValue(IN PRTL_PRINT_CONTEXT Context,
IN PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
IN DOUBLE Value);
STATIC XTAPI XTSTATUS WriteHexDoubleValue(IN PRTL_PRINT_CONTEXT Context,
IN PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
IN DOUBLE Double);
STATIC XTAPI XTSTATUS WriteIntegerValue(IN PRTL_PRINT_CONTEXT Context,
IN PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
IN ULONGLONG Integer);
STATIC XTAPI XTSTATUS WriteStringValue(PRTL_PRINT_CONTEXT Context,
PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
PCSTR String,
SIZE_T StringLength);
STATIC XTAPI XTSTATUS WriteValue(PRTL_PRINT_CONTEXT Context,
PRTL_PRINT_FORMAT_PROPERTIES FormatProperties,
PCWSTR String,
SIZE_T StringLength);
};
}
#endif /* __XTOSKRNL_RTL_WIDESTR_HH */

View File

@@ -28,4 +28,6 @@ extern "C" {
#include <ar.hh>
#include <ex.hh>
#include <hl.hh>
#include <ke.hh>
#include <rtl.hh>