diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2025-07-14 16:42:26 +0000 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2025-07-14 16:42:26 +0000 |
| commit | d1aaaeb615e148a13f46223c84819ba828e5209f (patch) | |
| tree | 9a1fb3d5ff429f4bf96f999dbc6751ec1cc6b976 /kern | |
| parent | ec572bff8150e2f8cd2dc99e053c5e8c8a0b99e3 (diff) | |
| download | teachos-d1aaaeb615e148a13f46223c84819ba828e5209f.tar.xz teachos-d1aaaeb615e148a13f46223c84819ba828e5209f.zip | |
arch: make linkable
Diffstat (limited to 'kern')
| -rw-r--r-- | kern/CMakeLists.txt | 7 | ||||
| -rw-r--r-- | kern/include/kern/asm_pointer.hpp | 76 |
2 files changed, 80 insertions, 3 deletions
diff --git a/kern/CMakeLists.txt b/kern/CMakeLists.txt index 9bfe9e8..52c2cb5 100644 --- a/kern/CMakeLists.txt +++ b/kern/CMakeLists.txt @@ -1,4 +1,7 @@ -add_library("kern" OBJECT +add_library("kern" OBJECT) +add_library("os::kern" ALIAS "kern") + +target_sources("kern" PRIVATE "src/abort.cpp" "src/error.cpp" "src/main.cpp" @@ -11,6 +14,4 @@ target_include_directories("kern" PUBLIC target_link_libraries("kern" PUBLIC "arch::any" - - "gcc" ) diff --git a/kern/include/kern/asm_pointer.hpp b/kern/include/kern/asm_pointer.hpp new file mode 100644 index 0000000..4c25658 --- /dev/null +++ b/kern/include/kern/asm_pointer.hpp @@ -0,0 +1,76 @@ +#ifndef TEACHOS_MEMORY_ASM_POINTER_HPP +#define TEACHOS_MEMORY_ASM_POINTER_HPP + +namespace teachos::memory +{ + + /** + * @brief A pointer that is defined in some assembly source file. + * + * @tparam Type The type of the pointer + * @since 0.0.1 + */ + template<typename Type> + struct asm_pointer + { + /** + * @brief The type of the underlying pointer. + */ + using pointer = Type *; + + /** + * @brief Construct a new asm_pointer for a given assembly-defined pointer. + * + * @param pointer A pointer defined in assembly. + */ + constexpr asm_pointer(Type *& pointer) + : m_pointer{&pointer} + { + // Nothing to do + } + + /** + * @brief Access the underlying pointer. + * + * @return The pointer wrapped by this asm_pointer. + */ + auto constexpr operator*() -> pointer & { return *m_pointer; } + + /** + * @brief Access the underlying pointer. + * + * @return The pointer wrapped by this asm_pointer. + */ + auto constexpr operator*() const -> pointer const & { return *m_pointer; } + + private: + pointer * m_pointer; + }; + + /** + * @copydoc asm_pointer + * + * @note This specialization allows the use of this type for pointers to constant data. + * @since 0.0.1 + */ + template<typename Type> + struct asm_pointer<Type const> + { + /** @copydoc asm_pointer<Type>::asm_pointer */ + constexpr asm_pointer(Type const & pointer) + : m_pointer{&pointer} + { + } + + /** @copydoc asm_pointer<Type>::operator*() */ + auto constexpr operator*() -> Type const & { return *m_pointer; } + /** @copydoc asm_pointer<Type>::operator*() const */ + auto constexpr operator*() const -> Type const & { return *m_pointer; } + + private: + Type const * m_pointer; + }; + +} // namespace teachos::memory + +#endif // TEACHOS_MEMORY_ASM_POINTER_HPP |
