treewide: clang format and tidy for the new compiler (#409)
diff --git a/examples/02.hello_compartment/hello.cc b/examples/02.hello_compartment/hello.cc index 2a8421b..d71cfa1 100644 --- a/examples/02.hello_compartment/hello.cc +++ b/examples/02.hello_compartment/hello.cc
@@ -4,7 +4,7 @@ #include "hello.h" // This header adds an error handler that writes to the UART on error. // Uncomment it and see that the compartmentalisation policy no longer passes. -//#include <fail-simulator-on-error.h> +// #include <fail-simulator-on-error.h> /// Thread entry point. void __cheri_compartment("hello") entry()
diff --git a/sdk/core/allocator/alloc.h b/sdk/core/allocator/alloc.h index 85f8c6e..4260b82 100644 --- a/sdk/core/allocator/alloc.h +++ b/sdk/core/allocator/alloc.h
@@ -157,19 +157,17 @@ { template<auto F, typename D> - concept Decoder = requires(D d) - { + concept Decoder = requires(D d) { { F(d) - } -> std::same_as<size_t>; + } -> std::same_as<size_t>; }; template<auto F, typename D> - concept Encoder = requires(size_t s) - { + concept Encoder = requires(size_t s) { { F(s) - } -> std::same_as<D>; + } -> std::same_as<D>; }; /** @@ -177,7 +175,7 @@ * a proxy for a pointer. */ template<typename T, typename D, bool Positive, auto Decode, auto Encode> - requires Decoder<Decode, D> && Encoder<Encode, D> + requires Decoder<Decode, D> && Encoder<Encode, D> class Proxy { CHERI::Capability<void> ctx; @@ -286,8 +284,7 @@ * - Collected in a treebin ring, using either/both the TChunk linkages * or/and the MChunk::ring links present in body(). */ -struct __packed __aligned(MallocAlignment) -MChunkHeader +struct __packed __aligned(MallocAlignment) MChunkHeader { /** * Each chunk has a 16-bit metadata field that is used to store a small @@ -589,8 +586,7 @@ * feed an unsafe_remove'd MChunk to such a function or to simply build a new * MChunk header in the heap. */ -class __packed __aligned(MallocAlignment) -MChunk +class __packed __aligned(MallocAlignment) MChunk { friend class MChunkAssertions; friend class TChunk; @@ -710,8 +706,7 @@ * Since we have enough room (large/tree chunks are at least 65 bytes), we just * put full capabilities here, and the format probably won't change, ever. */ -class __packed __aligned(MallocAlignment) -TChunk +class __packed __aligned(MallocAlignment) TChunk { friend class TChunkAssertions; friend class MState; @@ -1505,7 +1500,7 @@ */ static bool __always_inline capaligned_range_do(void *start, size_t size, - bool (*fn)(void **)) + bool (*fn)(void **)) { Debug::Assert((size & (sizeof(void *) - 1)) == 0, "Cap range is not aligned");
diff --git a/sdk/core/allocator/main.cc b/sdk/core/allocator/main.cc index 35f74af..c05ab9c 100644 --- a/sdk/core/allocator/main.cc +++ b/sdk/core/allocator/main.cc
@@ -187,11 +187,11 @@ * */ template<typename T = Revocation::Revoker> - bool wait_for_background_revoker( - Timeout *timeout, - uint32_t epoch, - LockGuard<decltype(lock)> &g, - T &r = revoker) requires(Revocation::SupportsInterruptNotification<T>) + bool wait_for_background_revoker(Timeout *timeout, + uint32_t epoch, + LockGuard<decltype(lock)> &g, + T &r = revoker) + requires(Revocation::SupportsInterruptNotification<T>) { // Release the lock before sleeping g.unlock(); @@ -212,11 +212,11 @@ * */ template<typename T = Revocation::Revoker> - bool wait_for_background_revoker( - Timeout *timeout, - uint32_t epoch, - LockGuard<decltype(lock)> &g, - T &r = revoker) requires(!Revocation::SupportsInterruptNotification<T>) + bool wait_for_background_revoker(Timeout *timeout, + uint32_t epoch, + LockGuard<decltype(lock)> &g, + T &r = revoker) + requires(!Revocation::SupportsInterruptNotification<T>) { // Yield while until a revocation pass has finished. while (!revoker.has_revocation_finished_for_epoch<true>(epoch))
diff --git a/sdk/core/allocator/revoker.h b/sdk/core/allocator/revoker.h index 891445d..38c9698 100644 --- a/sdk/core/allocator/revoker.h +++ b/sdk/core/allocator/revoker.h
@@ -23,21 +23,22 @@ * provided by the board search. */ template<typename T> - concept IsHardwareRevokerDevice = requires(T v, uint32_t epoch) - { - {v.init()}; + concept IsHardwareRevokerDevice = requires(T v, uint32_t epoch) { + { + v.init() + }; { v.system_epoch_get() - } -> std::same_as<uint32_t>; + } -> std::same_as<uint32_t>; { v.template has_revocation_finished_for_epoch<true>(epoch) - } -> std::same_as<uint32_t>; + } -> std::same_as<uint32_t>; { v.template has_revocation_finished_for_epoch<false>(epoch) - } -> std::same_as<uint32_t>; + } -> std::same_as<uint32_t>; { v.system_bg_revoker_kick() - } -> std::same_as<void>; + } -> std::same_as<void>; }; /** @@ -47,14 +48,12 @@ * timeout expired. */ template<typename T> - concept SupportsInterruptNotification = requires(T v, - Timeout *timeout, - uint32_t epoch) - { - { - v.wait_for_completion(timeout, epoch) - } -> std::same_as<bool>; - }; + concept SupportsInterruptNotification = + requires(T v, Timeout *timeout, uint32_t epoch) { + { + v.wait_for_completion(timeout, epoch) + } -> std::same_as<bool>; + }; /** * Class for interacting with the shadow bitmap. This bitmap controls the @@ -275,7 +274,7 @@ size_t TCMBaseAddr, template<typename, size_t> typename Revoker> - requires IsHardwareRevokerDevice<Revoker<WordT, TCMBaseAddr>> + requires IsHardwareRevokerDevice<Revoker<WordT, TCMBaseAddr>> class HardwareAccelerator : public Bitmap<WordT, TCMBaseAddr>, public Revoker<WordT, TCMBaseAddr> {
diff --git a/sdk/core/loader/boot.cc b/sdk/core/loader/boot.cc index 20ff56f..f0c99b8 100644 --- a/sdk/core/loader/boot.cc +++ b/sdk/core/loader/boot.cc
@@ -147,20 +147,21 @@ // The switcher assembly includes the types of import table entries and // trusted stacks. This enumeration and the assembly must be kept in sync. // This will fail if the enumeration value changes. - static_assert(int(SealedImportTableEntries) == 9, + static_assert(static_cast<int>(SealedImportTableEntries) == 9, "If this fails, update switcher/entry.S to the new value"); - static_assert(int(SealedTrustedStacks) == 10, + static_assert(static_cast<int>(SealedTrustedStacks) == 10, "If this fails, update switcher/entry.S to the new value"); // The allocator and static sealing types must be contiguous so that the // token library can hold a permit-unseal capability for both. - static_assert(int(Allocator) + 1 == int(StaticToken), + static_assert(static_cast<int>(Allocator) + 1 == + static_cast<int>(StaticToken), "Allocator and StaticToken must be consecutive"); // The token library includes the types for allocator and statically sealed // objects. This enumeration and the assembly must be kept in sync. This // will fail if the enumeration value changes. - static_assert(int(Allocator) == 11, + static_assert(static_cast<int>(Allocator) == 11, "If this fails, update token_unseal.S to the new value"); // We currently have a 3-bit hardware otype, with different sealing spaces @@ -248,7 +249,8 @@ Root::Type Type = Root::Type::RWGlobal, PermissionSet Permissions = Root::Permissions<Type>, bool Precise = true> - Capability<T> build(auto &&range) requires(RawAddressRange<decltype(range)>) + Capability<T> build(auto &&range) + requires(RawAddressRange<decltype(range)>) { return build<T, Type, Permissions, Precise>(range.start(), range.size()); @@ -261,9 +263,8 @@ template<typename T = void, Root::Type Type = Root::Type::RWGlobal, PermissionSet Permissions = Root::Permissions<Type>> - Capability<T> - build(auto &&range, - ptraddr_t address) requires(RawAddressRange<decltype(range)>) + Capability<T> build(auto &&range, ptraddr_t address) + requires(RawAddressRange<decltype(range)>) { return build<T, Type, Permissions>( range.start(), range.size(), address); @@ -347,13 +348,14 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc99-designator" constexpr SealingType Sentries[] = { - [int(InterruptStatus::Enabled)] = SentryEnabling, - [int(InterruptStatus::Disabled)] = SentryDisabling, - [int(InterruptStatus::Inherited)] = SentryInheriting}; + [static_cast<int>(InterruptStatus::Enabled)] = SentryEnabling, + [static_cast<int>(InterruptStatus::Disabled)] = SentryDisabling, + [static_cast<int>(InterruptStatus::Inherited)] = SentryInheriting}; #pragma clang diagnostic pop - Debug::Invariant( - unsigned(status) < 3, "Invalid interrupt status {}", int(status)); - size_t otype = size_t{Sentries[int(status)]}; + Debug::Invariant(static_cast<unsigned>(status) < 3, + "Invalid interrupt status {}", + static_cast<int>(status)); + size_t otype = size_t{Sentries[static_cast<int>(status)]}; void *key = build<void, Root::Type::Seal>(otype, 1); return ptr.seal(key); } @@ -367,10 +369,11 @@ #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc99-designator" constexpr SealingType Sentries[] = { - [int(InterruptStatus::Enabled)] = ReturnSentryEnabling, - [int(InterruptStatus::Disabled)] = ReturnSentryDisabling}; + [static_cast<int>(InterruptStatus::Enabled)] = ReturnSentryEnabling, + [static_cast<int>(InterruptStatus::Disabled)] = + ReturnSentryDisabling}; #pragma clang diagnostic pop - size_t otype = size_t{Sentries[int(Status)]}; + size_t otype = size_t{Sentries[static_cast<int>(Status)]}; void *key = build<void, Root::Type::Seal>(otype, 1); return ptr.seal(key); } @@ -379,9 +382,8 @@ * Helper to determine whether an object, given by a start address and size, * is completely contained within a specified range. */ - bool contains(const auto &range, - ptraddr_t addr, - size_t size) requires(RawAddressRange<decltype(range)>) + bool contains(const auto &range, ptraddr_t addr, size_t size) + requires(RawAddressRange<decltype(range)>) { return (range.start() <= addr) && (range.start() + range.size() >= addr + size); @@ -393,8 +395,8 @@ * object must be completely contained within the range. */ template<typename T = char> - bool contains(const auto &range, - ptraddr_t addr) requires(RawAddressRange<decltype(range)>) + bool contains(const auto &range, ptraddr_t addr) + requires(RawAddressRange<decltype(range)>) { return contains(range, addr, sizeof(T)); } @@ -444,8 +446,8 @@ * of type `T` from a virtual address range. */ template<typename T, bool Precise = true> - ContiguousPtrRange<T> - build_range(const auto &range) requires(RawAddressRange<decltype(range)>) + ContiguousPtrRange<T> build_range(const auto &range) + requires(RawAddressRange<decltype(range)>) { Capability<T> start = build<T, Root::Type::RWGlobal, @@ -668,8 +670,8 @@ auto exportEntry = build<ExportEntry>( compartment.exportTable, typeAddress); Debug::Invariant( - exportEntry->is_sealing_type(), - "Sealed object points to invalid sealing type"); + exportEntry->is_sealing_type(), + "Sealed object points to invalid sealing type"); *sealingType = exportEntry->functionStart; return true; } @@ -863,8 +865,7 @@ for (size_t i = 0; const auto &config : image.threads()) { Debug::log("Creating thread {}", i); - auto findCompartment = [&]() -> auto & - { + auto findCompartment = [&]() -> auto & { for (auto &compartment : image.compartments()) { Debug::log("Looking in export table {}+{}", @@ -1000,8 +1001,7 @@ // Find the library compartment that contains an address in its code or // data section. - auto findCompartment = [&](ptraddr_t address) -> auto & - { + auto findCompartment = [&](ptraddr_t address) -> auto & { Debug::log("Capreloc address is {}", address); for (auto &compartment : image.libraries_and_compartments()) {
diff --git a/sdk/core/loader/debug.hh b/sdk/core/loader/debug.hh index a89ea7f..24af5ed 100644 --- a/sdk/core/loader/debug.hh +++ b/sdk/core/loader/debug.hh
@@ -27,11 +27,10 @@ /// Concept for something that can be lazily called to produce a bool. template<typename T> - concept LazyAssertion = requires(T v) - { + concept LazyAssertion = requires(T v) { { v() - } -> IsBool; + } -> IsBool; }; } // namespace DebugConcepts @@ -151,7 +150,7 @@ } std::array<char, 10> buf; const char Digits[] = "0123456789"; - for (int i = int(buf.size() - 1); i >= 0; i--) + for (int i = static_cast<int>(buf.size() - 1); i >= 0; i--) { buf.at(static_cast<size_t>(i)) = Digits[s % 10]; s /= 10; @@ -181,7 +180,7 @@ const char Hexdigits[] = "0123456789abcdef"; // Length of string including null terminator static_assert(sizeof(Hexdigits) == 0x11); - for (long i = long(buf.size() - 1); i >= 0; i--) + for (long i = static_cast<long>(buf.size() - 1); i >= 0; i--) { buf.at(static_cast<size_t>(i)) = Hexdigits[s & 0xf]; s >>= 4; @@ -248,7 +247,7 @@ * Append an enumerated type value. */ template<typename T> - requires DebugConcepts::IsEnum<T> + requires DebugConcepts::IsEnum<T> void append(T e) { // `magic_enum::enum_name` requires cap relocs, so don't use it in @@ -482,7 +481,8 @@ * Constructor, performs the assertion check. */ template<typename T> - requires DebugConcepts::IsBool<T> __always_inline + requires DebugConcepts::IsBool<T> + __always_inline Assert(T condition, const char *fmt, Args... args, @@ -513,7 +513,8 @@ * where the assertion condition has side effects. */ template<typename T> - requires DebugConcepts::LazyAssertion<T> __always_inline + requires DebugConcepts::LazyAssertion<T> + __always_inline Assert(T &&condition, const char *fmt, Args... args,
diff --git a/sdk/core/loader/types.h b/sdk/core/loader/types.h index 90e190e..830c041 100644 --- a/sdk/core/loader/types.h +++ b/sdk/core/loader/types.h
@@ -273,21 +273,21 @@ * Helper concept for determining if something is an address. */ template<typename T> - concept IsAddress = std::same_as<T, ptraddr_t> || - std::same_as<T, ptraddr_t &> || std::same_as<T, const ptraddr_t &>; + concept IsAddress = + std::same_as<T, ptraddr_t> || std::same_as<T, ptraddr_t &> || + std::same_as<T, const ptraddr_t &>; /** * Concept for a raw address range. This exposes a range of addresses. */ template<typename T> - concept RawAddressRange = requires(T range) - { + concept RawAddressRange = requires(T range) { { range.size() - } -> IsAddress; + } -> IsAddress; { range.start() - } -> IsAddress; + } -> IsAddress; }; /** @@ -1067,11 +1067,11 @@ /** * The mask to isolate the bits that describe interrupt status. */ - static constexpr uint8_t InterruptStatusMask = uint8_t(0b11) - << InterruptStatusShift; + static constexpr uint8_t InterruptStatusMask = + static_cast<uint8_t>(0b11) << InterruptStatusShift; static constexpr uint8_t InterruptStatusSwitcherMask = - uint8_t(0b10) << InterruptStatusShift; + static_cast<uint8_t>(0b10) << InterruptStatusShift; /* * The switcher tests the high bit of the InterruptStatus word of @@ -1080,11 +1080,13 @@ * that its understanding is correct. */ static_assert( - ((int(InterruptStatus::Enabled) << InterruptStatusShift) & + ((static_cast<int>(InterruptStatus::Enabled) + << InterruptStatusShift) & InterruptStatusSwitcherMask) == 0, "Switcher interpretation of InterruptStatus no longer correct"); static_assert( - ((int(InterruptStatus::Disabled) << InterruptStatusShift) & + ((static_cast<int>(InterruptStatus::Disabled) + << InterruptStatusShift) & InterruptStatusSwitcherMask) != 0, "Switcher interpretation of InterruptStatus no longer correct"); @@ -1096,7 +1098,8 @@ * their first word initialised to point to this, the loader will * set them up to instead hold the value of the sealing key. */ - static constexpr uint8_t SealingTypeEntry = uint8_t(0b100000); + static constexpr uint8_t SealingTypeEntry = + static_cast<uint8_t>(0b100000); static_assert((InterruptStatusMask & SealingTypeEntry) == 0); @@ -1129,7 +1132,7 @@ { uint8_t status = (flags & InterruptStatusMask) >> InterruptStatusShift; - return InterruptStatus(status); + return static_cast<InterruptStatus>(status); } /**
diff --git a/sdk/core/scheduler/multiwait.h b/sdk/core/scheduler/multiwait.h index e1fdb5f..7271b4a 100644 --- a/sdk/core/scheduler/multiwait.h +++ b/sdk/core/scheduler/multiwait.h
@@ -196,11 +196,11 @@ } void *memory = nullptr; SObj sealed = token_sealed_unsealed_alloc( - timeout, - heapCapability, - sealing_type(), - sizeof(MultiWaiterInternal) + (length * sizeof(EventWaiter)), - &memory); + timeout, + heapCapability, + sealing_type(), + sizeof(MultiWaiterInternal) + (length * sizeof(EventWaiter)), + &memory); if (!memory) { error = -ENOMEM;
diff --git a/sdk/core/scheduler/plic.h b/sdk/core/scheduler/plic.h index 246b905..f147d32 100644 --- a/sdk/core/scheduler/plic.h +++ b/sdk/core/scheduler/plic.h
@@ -24,16 +24,25 @@ using SourceID = uint32_t; template<typename T, size_t MaxIntrID, typename SourceID, typename Priority> - concept IsPlic = requires(T v, SourceID id, Priority p) - { - {v.interrupt_enable(id)}; - {v.interrupt_disable(id)}; - {v.interrupt_disable(id)}; - {v.priority_set(id, p)}; + concept IsPlic = requires(T v, SourceID id, Priority p) { + { + v.interrupt_enable(id) + }; + { + v.interrupt_disable(id) + }; + { + v.interrupt_disable(id) + }; + { + v.priority_set(id, p) + }; { v.interrupt_claim() - } -> std::same_as<std::optional<SourceID>>; - {v.interrupt_complete(id)}; + } -> std::same_as<std::optional<SourceID>>; + { + v.interrupt_complete(id) + }; }; /* @@ -142,7 +151,8 @@ { for (size_t i = 0; i < NumberOfInterrupts; i++) { - if (ConfiguredInterrupts[i].number == uint32_t(source)) + if (ConfiguredInterrupts[i].number == + static_cast<uint32_t>(source)) { if constexpr (CompleteInterruptIfEdgeTriggered) {
diff --git a/sdk/core/scheduler/thread.h b/sdk/core/scheduler/thread.h index 7398cb0..f937c46 100644 --- a/sdk/core/scheduler/thread.h +++ b/sdk/core/scheduler/thread.h
@@ -184,9 +184,9 @@ : threadId(threadid), priority(priority), OriginalPriority(priority), - expiryTime(-1), + state(ThreadState::Suspended), - isYielding(false), + sleepQueue(nullptr), tStackPtr(tstack) { @@ -566,7 +566,7 @@ ThreadImpl **sleepQueue; /// If suspended, when will this thread expire. The maximum value is /// special-cased to mean blocked indefinitely. - uint64_t expiryTime; + uint64_t expiryTime{static_cast<uint64_t>(-1)}; /// The number of cycles that this thread has been scheduled for. uint64_t cycles; @@ -654,7 +654,7 @@ * expires, as long as no other threads are runnable or sleeping with * shorter timeouts. */ - bool isYielding : 1; + bool isYielding : 1 {false}; }; using Thread = ThreadImpl<ThreadPrioNum>;
diff --git a/sdk/core/scheduler/timer.h b/sdk/core/scheduler/timer.h index 45355b6..c74a9d5 100644 --- a/sdk/core/scheduler/timer.h +++ b/sdk/core/scheduler/timer.h
@@ -16,10 +16,13 @@ * Concept for the interface to setting the system timer. */ template<typename T> - concept IsTimer = requires(uint32_t cycles) - { - {T::init()}; - {T::setnext(cycles)}; + concept IsTimer = requires(uint32_t cycles) { + { + T::init() + }; + { + T::setnext(cycles) + }; }; static_assert( @@ -156,7 +159,8 @@ { Debug::log("Woke thread {} {} cycles early", head->id_get(), - int64_t(head->expiryTime) - now); + static_cast<int64_t>(head->expiryTime) - + now); head->ready(Thread::WakeReason::Timer); } }
diff --git a/sdk/include/cheri.hh b/sdk/include/cheri.hh index f4d27aa..02e4fae 100644 --- a/sdk/include/cheri.hh +++ b/sdk/include/cheri.hh
@@ -157,7 +157,7 @@ */ constexpr Permission operator*() { - return Permission(__builtin_ffs(permissions) - 1); + return static_cast<Permission>(__builtin_ffs(permissions) - 1); } /** @@ -993,7 +993,8 @@ * Implicit cast to the raw pointer type. */ template<typename U = T> - requires(!std::same_as<U, void>) operator U *() + requires(!std::same_as<U, void>) + operator U *() { return ptr; } @@ -1026,7 +1027,8 @@ * Dereference operator. */ template<typename U = T> - requires(!std::same_as<U, void>) U &operator*() + requires(!std::same_as<U, void>) + U &operator*() { return *ptr; } @@ -1073,7 +1075,8 @@ * Subscript operator. */ template<typename U = T> - requires(!std::same_as<U, void>) U &operator[](size_t index) + requires(!std::same_as<U, void>) + U &operator[](size_t index) { return ptr[index]; } @@ -1119,16 +1122,11 @@ * library smart pointers, etc. */ template<typename T> - concept IsSmartPointerLike = requires(T b) - { + concept IsSmartPointerLike = requires(T b) { { b.get() - } -> IsPointer; - } - &&requires(T b) - { - b = b.get(); - }; + } -> IsPointer; + } && requires(T b) { b = b.get(); }; /** * Checks that `ptr` is valid, unsealed, has at least `Permissions`, @@ -1156,15 +1154,11 @@ template<PermissionSet Permissions = PermissionSet{Permission::Load}, bool CheckStack = true, bool EnforceStrictPermissions = false> - __always_inline inline bool check_pointer( - auto &ptr, - size_t space = sizeof( - std::remove_pointer< - decltype(ptr)>)) requires(std:: - is_pointer_v< - std::remove_cvref_t<decltype(ptr)>> || - IsSmartPointerLike< - std::remove_cvref_t<decltype(ptr)>>) + __always_inline inline bool + check_pointer(auto &ptr, + size_t space = sizeof(std::remove_pointer<decltype(ptr)>)) + requires(std::is_pointer_v<std::remove_cvref_t<decltype(ptr)>> || + IsSmartPointerLike<std::remove_cvref_t<decltype(ptr)>>) { // We can skip a stack check if we've asked for Global because the // stack does not have this permission.
diff --git a/sdk/include/compartment-macros.h b/sdk/include/compartment-macros.h index ed728f1..b8d921a 100644 --- a/sdk/include/compartment-macros.h +++ b/sdk/include/compartment-macros.h
@@ -233,7 +233,7 @@ __attribute__((section(".sealed_objects"), used)) \ __if_cxx(inline) struct __##name##_type \ name = /* NOLINT(bugprone-macro-parentheses) */ \ - {(uint32_t)&__sealing_key_##compartment##_##keyName, \ + {(uint32_t) & __sealing_key_##compartment##_##keyName, \ 0, \ {initialiser, ##__VA_ARGS__}}
diff --git a/sdk/include/debug.h b/sdk/include/debug.h index 9e6a56a..a4fed5a 100644 --- a/sdk/include/debug.h +++ b/sdk/include/debug.h
@@ -10,19 +10,20 @@ * * Should not be used directly. */ -# define CHERIOT_DEBUG_MAP_ARGUMENT(x) \ - { \ - (uintptr_t)(x), _Generic((x), \ - _Bool: DebugFormatArgumentBool, \ - char: DebugFormatArgumentCharacter, \ - short: DebugFormatArgumentSignedNumber32, \ - unsigned short: DebugFormatArgumentUnsignedNumber32, \ - int: DebugFormatArgumentSignedNumber32, \ - unsigned int: DebugFormatArgumentUnsignedNumber32, \ - signed long long: DebugFormatArgumentSignedNumber64, \ - unsigned long long: DebugFormatArgumentUnsignedNumber64, \ - char *: DebugFormatArgumentCString, \ - default: DebugFormatArgumentPointer) \ +# define CHERIOT_DEBUG_MAP_ARGUMENT(x) \ + { \ + (uintptr_t)(x), \ + _Generic((x), \ + _Bool: DebugFormatArgumentBool, \ + char: DebugFormatArgumentCharacter, \ + short: DebugFormatArgumentSignedNumber32, \ + unsigned short: DebugFormatArgumentUnsignedNumber32, \ + int: DebugFormatArgumentSignedNumber32, \ + unsigned int: DebugFormatArgumentUnsignedNumber32, \ + signed long long: DebugFormatArgumentSignedNumber64, \ + unsigned long long: DebugFormatArgumentUnsignedNumber64, \ + char *: DebugFormatArgumentCString, \ + default: DebugFormatArgumentPointer) \ } /**
diff --git a/sdk/include/debug.hh b/sdk/include/debug.hh index 9cfaa56..a3dda60 100644 --- a/sdk/include/debug.hh +++ b/sdk/include/debug.hh
@@ -27,11 +27,10 @@ /// Concept for something that can be lazily called to produce a bool. template<typename T> - concept LazyAssertion = requires(T v) - { + concept LazyAssertion = requires(T v) { { v() - } -> IsBool; + } -> IsBool; }; template<typename T> @@ -87,12 +86,12 @@ * magic_enum to provide a string and then a numeric value. */ template<typename T> -void debug_enum_helper(uintptr_t value, - DebugWriter &writer) requires DebugConcepts::IsEnum<T> +void debug_enum_helper(uintptr_t value, DebugWriter &writer) + requires DebugConcepts::IsEnum<T> { writer.write(magic_enum::enum_name<T>(static_cast<T>(value))); writer.write('('); - writer.write(uint32_t(value)); + writer.write(static_cast<uint32_t>(value)); writer.write(')'); } @@ -413,7 +412,7 @@ */ template<typename... Args> __always_inline inline void -make_debug_arguments_list(DebugFormatArgument *arguments, Args... args) +make_debug_arguments_list(DebugFormatArgument *arguments, Args &...args) { if constexpr (sizeof...(Args) > 0) { @@ -654,7 +653,8 @@ * Constructor, performs the assertion check. */ template<typename T> - requires DebugConcepts::IsBool<T> __always_inline + requires DebugConcepts::IsBool<T> + __always_inline Assert(T condition, const char *fmt, Args... args, @@ -685,7 +685,8 @@ * where the assertion condition has side effects. */ template<typename T> - requires DebugConcepts::LazyAssertion<T> __always_inline + requires DebugConcepts::LazyAssertion<T> + __always_inline Assert(T &&condition, const char *fmt, Args... args,
diff --git a/sdk/include/ds/pointer.h b/sdk/include/ds/pointer.h index 598c726..64126a2 100644 --- a/sdk/include/ds/pointer.h +++ b/sdk/include/ds/pointer.h
@@ -47,40 +47,39 @@ */ template<typename P, typename T> concept Proxies = std::same_as<T, typename P::Type> && - requires(P &proxy, P &proxy2, T *ptr) - { - /* Probe for operator=(T*) */ - { - proxy = ptr - } -> std::same_as<P &>; + requires(P &proxy, P &proxy2, T *ptr) { + /* Probe for operator=(T*) */ + { + proxy = ptr + } -> std::same_as<P &>; - /* Probe for operator T*() */ - { - ptr == proxy - } -> std::same_as<bool>; + /* Probe for operator T*() */ + { + ptr == proxy + } -> std::same_as<bool>; - /* TODO: How to probe for operator-> ? */ + /* TODO: How to probe for operator-> ? */ - /* Probe for operator==(T*) */ - { - proxy == ptr - } -> std::same_as<bool>; + /* Probe for operator==(T*) */ + { + proxy == ptr + } -> std::same_as<bool>; - /* Probe for operator==(P&) */ - { - proxy == proxy2 - } -> std::same_as<bool>; + /* Probe for operator==(P&) */ + { + proxy == proxy2 + } -> std::same_as<bool>; - /* Probe for operator<=>(T*) */ - { - proxy <=> ptr - } -> std::same_as<std::strong_ordering>; + /* Probe for operator<=>(T*) */ + { + proxy <=> ptr + } -> std::same_as<std::strong_ordering>; - /* Probe for operator<=>(P) */ - { - proxy <=> proxy2 - } -> std::same_as<std::strong_ordering>; - }; + /* Probe for operator<=>(P) */ + { + proxy <=> proxy2 + } -> std::same_as<std::strong_ordering>; + }; /** * Pointer references are pointer proxies, shockingly enough.
diff --git a/sdk/include/ds/xoroshiro.h b/sdk/include/ds/xoroshiro.h index 500851f..b05baa4 100644 --- a/sdk/include/ds/xoroshiro.h +++ b/sdk/include/ds/xoroshiro.h
@@ -66,7 +66,7 @@ { for (int b = 0; b < 64; b++) { - if (Jump[i] & uint64_t(1) << b) + if (Jump[i] & static_cast<uint64_t>(1) << b) { s0 ^= x; s1 ^= y; @@ -124,7 +124,8 @@ /** * Jump. If supported, this is equivalent to 2^64 calls to next(). */ - void jump() requires(Jump0 != 0) && (Jump1 != 0) + void jump() + requires(Jump0 != 0) && (Jump1 != 0) { jump(Jump0, Jump1); } @@ -133,7 +134,8 @@ * Jump a *really* long way. If supported, this is equivalent to * 2^96 calls to next(). */ - void long_jump() requires(LongJump0 != 0) && (LongJump1 != 0) + void long_jump() + requires(LongJump0 != 0) && (LongJump1 != 0) { jump(LongJump0, LongJump1); }
diff --git a/sdk/include/function_wrapper.hh b/sdk/include/function_wrapper.hh index 50ca248..81ec439 100644 --- a/sdk/include/function_wrapper.hh +++ b/sdk/include/function_wrapper.hh
@@ -83,8 +83,8 @@ * This is a non-owning reference, delete its copy and move * constructors to avoid accidental copies. */ - FunctionWrapper(FunctionWrapper &) = delete; - FunctionWrapper(FunctionWrapper &&) = delete; + FunctionWrapper(FunctionWrapper &) = delete; + FunctionWrapper(FunctionWrapper &&) = delete; FunctionWrapper &operator=(FunctionWrapper &&) = delete; /**
diff --git a/sdk/include/futex.h b/sdk/include/futex.h index 482919a..ef1e7ed 100644 --- a/sdk/include/futex.h +++ b/sdk/include/futex.h
@@ -6,15 +6,17 @@ #include <stdint.h> #include <timeout.h> -enum [[clang::flag_enum]] FutexWaitFlags{ - /// No flags - FutexNone = 0, - /** - * This futex uses priority inheritance. The low 16 bits of the futex word - * are assumed to hold the thread ID of the thread that currently holds the - * lock. - */ - FutexPriorityInheritance = (1 << 0)}; +enum [[clang::flag_enum]] FutexWaitFlags +{ + /// No flags + FutexNone = 0, + /** + * This futex uses priority inheritance. The low 16 bits of the futex word + * are assumed to hold the thread ID of the thread that currently holds the + * lock. + */ + FutexPriorityInheritance = (1 << 0) +}; /** * Compare the value at `address` to `expected` and, if they match, sleep the
diff --git a/sdk/include/locks.hh b/sdk/include/locks.hh index 6819f84..4b15761 100644 --- a/sdk/include/locks.hh +++ b/sdk/include/locks.hh
@@ -102,7 +102,8 @@ * documentation of `flaglock_priority_inheriting_get_owner_thread_id` * for more information. */ - __always_inline uint16_t get_owner_thread_id() requires(IsPriorityInherited) + __always_inline uint16_t get_owner_thread_id() + requires(IsPriorityInherited) { return flaglock_priority_inheriting_get_owner_thread_id(&state); } @@ -235,18 +236,20 @@ using FlagLockPriorityInherited = FlagLockGeneric<true>; template<typename T> -concept Lockable = requires(T l) -{ - {l.lock()}; - {l.unlock()}; +concept Lockable = requires(T l) { + { + l.lock() + }; + { + l.unlock() + }; }; template<typename T> -concept TryLockable = Lockable<T> && requires(T l, Timeout *t) -{ +concept TryLockable = Lockable<T> && requires(T l, Timeout *t) { { l.try_lock(t) - } -> std::same_as<bool>; + } -> std::same_as<bool>; }; static_assert(TryLockable<NoLock>); @@ -275,8 +278,8 @@ } /// Constructor, attempts to acquire the lock with a timeout. - [[nodiscard]] explicit LockGuard(Lock &lock, Timeout *timeout) requires( - TryLockable<Lock>) + [[nodiscard]] explicit LockGuard(Lock &lock, Timeout *timeout) + requires(TryLockable<Lock>) : wrappedLock(&lock), isOwned(false) { try_lock(timeout); @@ -326,7 +329,8 @@ * it with the specified timeout. This must be called with the lock * unlocked. Returns true if the lock has been acquired, false otherwise. */ - bool try_lock(Timeout *timeout) requires(TryLockable<Lock>) + bool try_lock(Timeout *timeout) + requires(TryLockable<Lock>) { LockDebug::Assert(!isOwned, "Trying to lock an already-locked lock"); isOwned = wrappedLock->try_lock(timeout);
diff --git a/sdk/include/multiwaiter.h b/sdk/include/multiwaiter.h index 418228c..acbb3eb 100644 --- a/sdk/include/multiwaiter.h +++ b/sdk/include/multiwaiter.h
@@ -44,11 +44,13 @@ EventWaiterFutex }; -enum [[clang::flag_enum]] EventWaiterEventChannelFlags{ - /// Automatically clear the bits we waited on. - EventWaiterEventChannelClearOnExit = (1 << 24), - /// Notify when all bits were set. - EventWaiterEventChannelWaitAll = (1 << 26)}; +enum [[clang::flag_enum]] EventWaiterEventChannelFlags +{ + /// Automatically clear the bits we waited on. + EventWaiterEventChannelClearOnExit = (1 << 24), + /// Notify when all bits were set. + EventWaiterEventChannelWaitAll = (1 << 26) +}; /** * Structure describing a change to the set of managed event sources for an
diff --git a/sdk/include/platform/arty-a7/platform-ethernet.hh b/sdk/include/platform/arty-a7/platform-ethernet.hh index dc5392a..5cd3784 100644 --- a/sdk/include/platform/arty-a7/platform-ethernet.hh +++ b/sdk/include/platform/arty-a7/platform-ethernet.hh
@@ -420,10 +420,10 @@ mdio_write(uint8_t phyAddress, PHYRegister registerAddress, uint16_t data) { mdio_wait_for_ready(); - auto &mdioAddress = mmio_register<RegisterOffset::MDIOAddress>(); - auto &mdioWrite = mmio_register<RegisterOffset::MDIODataWrite>(); - uint32_t writeCommand = - (0 << 10) | (phyAddress << 5) | uint32_t(registerAddress); + auto &mdioAddress = mmio_register<RegisterOffset::MDIOAddress>(); + auto &mdioWrite = mmio_register<RegisterOffset::MDIODataWrite>(); + uint32_t writeCommand = (0 << 10) | (phyAddress << 5) | + static_cast<uint32_t>(registerAddress); mdioAddress = writeCommand; mdioWrite = data; mdio_start_transaction(); @@ -437,7 +437,7 @@ mdio_wait_for_ready(); auto &mdioAddress = mmio_register<RegisterOffset::MDIOAddress>(); uint32_t readCommand = - (1 << 10) | (phyAddress << 5) | uint8_t(registerAddress); + (1 << 10) | (phyAddress << 5) | static_cast<uint8_t>(registerAddress); mdioAddress = readCommand; mdio_start_transaction(); mdio_wait_for_ready();
diff --git a/sdk/include/platform/concepts/entropy.h b/sdk/include/platform/concepts/entropy.h index e0933a7..ff6218c 100644 --- a/sdk/include/platform/concepts/entropy.h +++ b/sdk/include/platform/concepts/entropy.h
@@ -7,15 +7,14 @@ * Concept for an Ethernet adaptor. */ template<typename T> -concept IsEntropySource = requires(T source) -{ +concept IsEntropySource = requires(T source) { /** * Must export a flag indicating whether this is a cryptographically * secure random number. */ { T::IsSecure - } -> std::convertible_to<const bool>; + } -> std::convertible_to<const bool>; /** * Must return a random number. All bits of the value type are assumed to @@ -24,7 +23,7 @@ */ { source() - } -> std::same_as<typename T::ValueType>; + } -> std::same_as<typename T::ValueType>; /** * Must provide a method that reseeds the entropy source. If this is a @@ -32,5 +31,7 @@ * may be an empty function. There are no constraints on the return type * of this. */ - {source.reseed()}; + { + source.reseed() + }; };
diff --git a/sdk/include/platform/concepts/ethernet.hh b/sdk/include/platform/concepts/ethernet.hh index 700bb82..b5421bf 100644 --- a/sdk/include/platform/concepts/ethernet.hh +++ b/sdk/include/platform/concepts/ethernet.hh
@@ -11,17 +11,16 @@ * This is not required to be copyable. */ template<typename T> -concept ReceivedEthernetFrame = requires(T frame) -{ +concept ReceivedEthernetFrame = requires(T frame) { { frame->length - } -> std::convertible_to<uint16_t>; + } -> std::convertible_to<uint16_t>; { frame->buffer - } -> std::convertible_to<const uint8_t *>; + } -> std::convertible_to<const uint8_t *>; { frame->buffer - } -> std::convertible_to<bool>; + } -> std::convertible_to<bool>; }; /** @@ -31,14 +30,13 @@ concept EthernetAdaptor = requires(T adaptor, const uint8_t *buffer, uint16_t length, - std::array<uint8_t, 6> macAddress) -{ + std::array<uint8_t, 6> macAddress) { /** * The default MAC address for this adaptor. Must return a 6-byte array. */ { T::mac_address_default() - } -> std::same_as<std::array<uint8_t, 6>>; + } -> std::same_as<std::array<uint8_t, 6>>; /** * Is the default MAC address unique? If the device (e.g. soft MAC) * doesn't have its own hardware MAC address then callers may prefer to @@ -46,22 +44,26 @@ */ { T::has_unique_mac_address() - } -> std::convertible_to<bool>; + } -> std::convertible_to<bool>; /** * Set the MAC address of this adaptor. */ - {adaptor.mac_address_set(macAddress)}; + { + adaptor.mac_address_set(macAddress) + }; /** * Set the MAC address of this adaptor to the default value. */ - {adaptor.mac_address_set()}; + { + adaptor.mac_address_set() + }; /** * Check if PHY link is up. */ { adaptor.phy_link_status() - } -> std::convertible_to<bool>; + } -> std::convertible_to<bool>; /** * Receive a frame. Returns an optional value (convertible to bool) that @@ -70,7 +72,7 @@ */ { adaptor.receive_frame() - } -> ReceivedEthernetFrame; + } -> ReceivedEthernetFrame; /** * Send a frame identified by a base and length. Returns true if the frame @@ -85,7 +87,7 @@ buffer, length, [](const uint8_t *buffer, uint16_t length) { return true; }) - } -> std::same_as<bool>; + } -> std::same_as<bool>; /** * Read the current interrupt counter for receive interrupts. If this @@ -94,7 +96,7 @@ */ { adaptor.receive_interrupt_value() - } -> std::same_as<uint32_t>; + } -> std::same_as<uint32_t>; /** * Called after `receive_frame` fails to return new frames to block until a @@ -105,5 +107,5 @@ */ { adaptor.receive_interrupt_complete(nullptr, 0) - } -> std::same_as<int>; + } -> std::same_as<int>; };
diff --git a/sdk/include/platform/generic-riscv/platform-timer.hh b/sdk/include/platform/generic-riscv/platform-timer.hh index 7b0d1f6..5f3e226 100644 --- a/sdk/include/platform/generic-riscv/platform-timer.hh +++ b/sdk/include/platform/generic-riscv/platform-timer.hh
@@ -52,7 +52,7 @@ timeHigh = *timerHigh; timeLow = *pmtimer; } while (timeHigh != *timerHigh); - return (uint64_t(timeHigh) << 32) | timeLow; + return (static_cast<uint64_t>(timeHigh) << 32) | timeLow; } /**
diff --git a/sdk/include/platform/generic-riscv/platform-uart.hh b/sdk/include/platform/generic-riscv/platform-uart.hh index 4b1c916..705a6fb 100644 --- a/sdk/include/platform/generic-riscv/platform-uart.hh +++ b/sdk/include/platform/generic-riscv/platform-uart.hh
@@ -10,19 +10,22 @@ * Concept for checking that a UART driver exposes the right interface. */ template<typename T> -concept IsUart = requires(volatile T *v, uint8_t byte) -{ - {v->init()}; +concept IsUart = requires(volatile T *v, uint8_t byte) { + { + v->init() + }; { v->can_write() - } -> std::same_as<bool>; + } -> std::same_as<bool>; { v->can_read() - } -> std::same_as<bool>; + } -> std::same_as<bool>; { v->blocking_read() - } -> std::same_as<uint8_t>; - {v->blocking_write(byte)}; + } -> std::same_as<uint8_t>; + { + v->blocking_write(byte) + }; }; /**
diff --git a/sdk/include/platform/sunburst/platform-ethernet.hh b/sdk/include/platform/sunburst/platform-ethernet.hh index 64a4f95..017810c 100644 --- a/sdk/include/platform/sunburst/platform-ethernet.hh +++ b/sdk/include/platform/sunburst/platform-ethernet.hh
@@ -133,161 +133,171 @@ /** * Flag bits of the TransmitControl register. */ - enum [[clang::flag_enum]] TransmitControl : uint16_t{ - TransmitEnable = 1 << 0, - TransmitCrcEnable = 1 << 1, - TransmitPaddingEnable = 1 << 2, - TransmitFlowControlEnable = 1 << 3, - FlushTransmitQueue = 1 << 4, - TransmitChecksumGenerationIp = 1 << 5, - TransmitChecksumGenerationTcp = 1 << 6, - TransmitChecksumGenerationIcmp = 1 << 9, + enum [[clang::flag_enum]] TransmitControl : uint16_t + { + TransmitEnable = 1 << 0, + TransmitCrcEnable = 1 << 1, + TransmitPaddingEnable = 1 << 2, + TransmitFlowControlEnable = 1 << 3, + FlushTransmitQueue = 1 << 4, + TransmitChecksumGenerationIp = 1 << 5, + TransmitChecksumGenerationTcp = 1 << 6, + TransmitChecksumGenerationIcmp = 1 << 9, }; /** * Flag bits of the ReceiveControl1 register. */ - enum [[clang::flag_enum]] ReceiveControl1 : uint16_t{ - ReceiveEnable = 1 << 0, - ReceiveInverseFilter = 1 << 1, - ReceiveAllEnable = 1 << 4, - ReceiveUnicastEnable = 1 << 5, - ReceiveMulticastEnable = 1 << 6, - ReceiveBroadcastEnable = 1 << 7, - ReceiveMulticastAddressFilteringWithMacAddressEnable = 1 << 8, - ReceiveErrorFrameEnable = 1 << 9, - ReceiveFlowControlEnable = 1 << 10, - ReceivePhysicalAddressFilteringWithMacAddressEnable = 1 << 11, - ReceiveIpFrameChecksumCheckEnable = 1 << 12, - ReceiveTcpFrameChecksumCheckEnable = 1 << 13, - ReceiveUdpFrameChecksumCheckEnable = 1 << 14, - FlushReceiveQueue = 1 << 15, + enum [[clang::flag_enum]] ReceiveControl1 : uint16_t + { + ReceiveEnable = 1 << 0, + ReceiveInverseFilter = 1 << 1, + ReceiveAllEnable = 1 << 4, + ReceiveUnicastEnable = 1 << 5, + ReceiveMulticastEnable = 1 << 6, + ReceiveBroadcastEnable = 1 << 7, + ReceiveMulticastAddressFilteringWithMacAddressEnable = 1 << 8, + ReceiveErrorFrameEnable = 1 << 9, + ReceiveFlowControlEnable = 1 << 10, + ReceivePhysicalAddressFilteringWithMacAddressEnable = 1 << 11, + ReceiveIpFrameChecksumCheckEnable = 1 << 12, + ReceiveTcpFrameChecksumCheckEnable = 1 << 13, + ReceiveUdpFrameChecksumCheckEnable = 1 << 14, + FlushReceiveQueue = 1 << 15, }; /** * Flag bits of the ReceiveControl2 register. */ - enum [[clang::flag_enum]] ReceiveControl2 : uint16_t{ - ReceiveSourceAddressFiltering = 1 << 0, - ReceiveIcmpFrameChecksumEnable = 1 << 1, - UdpLiteFrameEnable = 1 << 2, - ReceiveIpv4Ipv6UdpFrameChecksumEqualZero = 1 << 3, - ReceiveIpv4Ipv6FragmentFramePass = 1 << 4, - DataBurst4Bytes = 0b000 << 5, - DataBurst8Bytes = 0b001 << 5, - DataBurst16Bytes = 0b010 << 5, - DataBurst32Bytes = 0b011 << 5, - DataBurstSingleFrame = 0b100 << 5, + enum [[clang::flag_enum]] ReceiveControl2 : uint16_t + { + ReceiveSourceAddressFiltering = 1 << 0, + ReceiveIcmpFrameChecksumEnable = 1 << 1, + UdpLiteFrameEnable = 1 << 2, + ReceiveIpv4Ipv6UdpFrameChecksumEqualZero = 1 << 3, + ReceiveIpv4Ipv6FragmentFramePass = 1 << 4, + DataBurst4Bytes = 0b000 << 5, + DataBurst8Bytes = 0b001 << 5, + DataBurst16Bytes = 0b010 << 5, + DataBurst32Bytes = 0b011 << 5, + DataBurstSingleFrame = 0b100 << 5, }; /** * Flag bits of the ReceiveFrameHeaderStatus register. */ - enum [[clang::flag_enum]] ReceiveFrameHeaderStatus : uint16_t{ - ReceiveCrcError = 1 << 0, - ReceiveRuntFrame = 1 << 1, - ReceiveFrameTooLong = 1 << 2, - ReceiveFrameType = 1 << 3, - ReceiveMiiError = 1 << 4, - ReceiveUnicastFrame = 1 << 5, - ReceiveMulticastFrame = 1 << 6, - ReceiveBroadcastFrame = 1 << 7, - ReceiveUdpFrameChecksumStatus = 1 << 10, - ReceiveTcpFrameChecksumStatus = 1 << 11, - ReceiveIpFrameChecksumStatus = 1 << 12, - ReceiveIcmpFrameChecksumStatus = 1 << 13, - ReceiveFrameValid = 1 << 15, + enum [[clang::flag_enum]] ReceiveFrameHeaderStatus : uint16_t + { + ReceiveCrcError = 1 << 0, + ReceiveRuntFrame = 1 << 1, + ReceiveFrameTooLong = 1 << 2, + ReceiveFrameType = 1 << 3, + ReceiveMiiError = 1 << 4, + ReceiveUnicastFrame = 1 << 5, + ReceiveMulticastFrame = 1 << 6, + ReceiveBroadcastFrame = 1 << 7, + ReceiveUdpFrameChecksumStatus = 1 << 10, + ReceiveTcpFrameChecksumStatus = 1 << 11, + ReceiveIpFrameChecksumStatus = 1 << 12, + ReceiveIcmpFrameChecksumStatus = 1 << 13, + ReceiveFrameValid = 1 << 15, }; /** * Flag bits of the ReceiveQueueCommand register. */ - enum [[clang::flag_enum]] ReceiveQueueCommand : uint16_t{ - ReleaseReceiveErrorFrame = 1 << 0, - StartDmaAccess = 1 << 3, - AutoDequeueReceiveQueueFrameEnable = 1 << 4, - ReceiveFrameCountThresholdEnable = 1 << 5, - ReceiveDataByteCountThresholdEnable = 1 << 6, - ReceiveDurationTimerThresholdEnable = 1 << 7, - ReceiveIpHeaderTwoByteOffsetEnable = 1 << 9, - ReceiveFrameCountThresholdStatus = 1 << 10, - ReceiveDataByteCountThresholdstatus = 1 << 11, - ReceiveDurationTimerThresholdStatus = 1 << 12, + enum [[clang::flag_enum]] ReceiveQueueCommand : uint16_t + { + ReleaseReceiveErrorFrame = 1 << 0, + StartDmaAccess = 1 << 3, + AutoDequeueReceiveQueueFrameEnable = 1 << 4, + ReceiveFrameCountThresholdEnable = 1 << 5, + ReceiveDataByteCountThresholdEnable = 1 << 6, + ReceiveDurationTimerThresholdEnable = 1 << 7, + ReceiveIpHeaderTwoByteOffsetEnable = 1 << 9, + ReceiveFrameCountThresholdStatus = 1 << 10, + ReceiveDataByteCountThresholdstatus = 1 << 11, + ReceiveDurationTimerThresholdStatus = 1 << 12, }; /** * Flag bits of the TransmitQueueCommand register. */ - enum [[clang::flag_enum]] TransmitQueueCommand : uint16_t{ - ManualEnqueueTransmitQueueFrameEnable = 1 << 0, - TransmitQueueMemoryAvailableMonitor = 1 << 1, - AutoEnqueueTransmitQueueFrameEnable = 1 << 2, + enum [[clang::flag_enum]] TransmitQueueCommand : uint16_t + { + ManualEnqueueTransmitQueueFrameEnable = 1 << 0, + TransmitQueueMemoryAvailableMonitor = 1 << 1, + AutoEnqueueTransmitQueueFrameEnable = 1 << 2, }; /** * Flag bits of the TransmitFrameDataPointer and ReceiveFrameDataPointer * register. */ - enum [[clang::flag_enum]] FrameDataPointer : uint16_t{ - /** - * When this bit is set, the frame data pointer register increments - * automatically on accesses to the data register. - */ - FrameDataPointerAutoIncrement = 1 << 14, + enum [[clang::flag_enum]] FrameDataPointer : uint16_t + { + /** + * When this bit is set, the frame data pointer register increments + * automatically on accesses to the data register. + */ + FrameDataPointerAutoIncrement = 1 << 14, }; /** * Flags bits of the InterruptStatus and InterruptEnable registers. */ - enum [[clang::flag_enum]] Interrupt : uint16_t{ - EnergyDetectInterrupt = 1 << 2, - LinkupDetectInterrupt = 1 << 3, - ReceiveMagicPacketDetectInterrupt = 1 << 4, - ReceiveWakeupFrameDetectInterrupt = 1 << 5, - TransmitSpaceAvailableInterrupt = 1 << 6, - ReceiveProcessStoppedInterrupt = 1 << 7, - TransmitProcessStoppedInterrupt = 1 << 8, - ReceiveOverrunInterrupt = 1 << 11, - ReceiveInterrupt = 1 << 13, - TransmitInterrupt = 1 << 14, - LinkChangeInterruptStatus = 1 << 15, + enum [[clang::flag_enum]] Interrupt : uint16_t + { + EnergyDetectInterrupt = 1 << 2, + LinkupDetectInterrupt = 1 << 3, + ReceiveMagicPacketDetectInterrupt = 1 << 4, + ReceiveWakeupFrameDetectInterrupt = 1 << 5, + TransmitSpaceAvailableInterrupt = 1 << 6, + ReceiveProcessStoppedInterrupt = 1 << 7, + TransmitProcessStoppedInterrupt = 1 << 8, + ReceiveOverrunInterrupt = 1 << 11, + ReceiveInterrupt = 1 << 13, + TransmitInterrupt = 1 << 14, + LinkChangeInterruptStatus = 1 << 15, }; /** * Flags bits of the Port1Control register. */ - enum [[clang::flag_enum]] Port1Control : uint16_t{ - Advertised10BTHalfDuplexCapability = 1 << 0, - Advertised10BTFullDuplexCapability = 1 << 1, - Advertised100BTHalfDuplexCapability = 1 << 2, - Advertised100BTFullDuplexCapability = 1 << 3, - AdvertisedFlowControlCapability = 1 << 4, - ForceDuplex = 1 << 5, - ForceSpeed = 1 << 6, - AutoNegotiationEnable = 1 << 7, - ForceMDIX = 1 << 9, - DisableAutoMDIMDIX = 1 << 10, - RestartAutoNegotiation = 1 << 13, - TransmitterDisable = 1 << 14, - LedOff = 1 << 15, + enum [[clang::flag_enum]] Port1Control : uint16_t + { + Advertised10BTHalfDuplexCapability = 1 << 0, + Advertised10BTFullDuplexCapability = 1 << 1, + Advertised100BTHalfDuplexCapability = 1 << 2, + Advertised100BTFullDuplexCapability = 1 << 3, + AdvertisedFlowControlCapability = 1 << 4, + ForceDuplex = 1 << 5, + ForceSpeed = 1 << 6, + AutoNegotiationEnable = 1 << 7, + ForceMDIX = 1 << 9, + DisableAutoMDIMDIX = 1 << 10, + RestartAutoNegotiation = 1 << 13, + TransmitterDisable = 1 << 14, + LedOff = 1 << 15, }; /** * Flags bits of the Port1Status register. */ - enum [[clang::flag_enum]] Port1Status : uint16_t{ - Partner10BTHalfDuplexCapability = 1 << 0, - Partner10BTFullDuplexCapability = 1 << 1, - Partner100BTHalfDuplexCapability = 1 << 2, - Partner100BTFullDuplexCapability = 1 << 3, - PartnerFlowControlCapability = 1 << 4, - LinkGood = 1 << 5, - AutoNegotiationDone = 1 << 6, - MDIXStatus = 1 << 7, - OperationDuplex = 1 << 9, - OperationSpeed = 1 << 10, - PolarityReverse = 1 << 13, - HPMDIX = 1 << 15, + enum [[clang::flag_enum]] Port1Status : uint16_t + { + Partner10BTHalfDuplexCapability = 1 << 0, + Partner10BTFullDuplexCapability = 1 << 1, + Partner100BTHalfDuplexCapability = 1 << 2, + Partner100BTFullDuplexCapability = 1 << 3, + PartnerFlowControlCapability = 1 << 4, + LinkGood = 1 << 5, + AutoNegotiationDone = 1 << 6, + MDIXStatus = 1 << 7, + OperationDuplex = 1 << 9, + OperationSpeed = 1 << 10, + PolarityReverse = 1 << 13, + HPMDIX = 1 << 15, }; /**
diff --git a/sdk/include/platform/sunburst/platform-i2c.hh b/sdk/include/platform/sunburst/platform-i2c.hh index ef93eee..9d86acb 100644 --- a/sdk/include/platform/sunburst/platform-i2c.hh +++ b/sdk/include/platform/sunburst/platform-i2c.hh
@@ -182,105 +182,113 @@ }; /// Control Register Fields - enum [[clang::flag_enum]] : uint32_t{ - /// Enable Host I2C functionality - ControlEnableHost = 1 << 0, - /// Enable Target I2C functionality - ControlEnableTarget = 1 << 1, - /// Enable I2C line loopback test If line loopback is enabled, the - /// internal design sees ACQ and RX data as "1" - ControlLineLoopback = 1 << 2, - /// Enable NACKing the address on a stretch timeout. This is a target - /// mode feature. If enabled, a stretch timeout will cause the device to - /// NACK the address byte. If disabled, it will ACK instead. - ControlNackAddressAfterTimeout = 1 << 3, - /// Enable ACK Control Mode, which works with the `targetAckControl` - /// register to allow software to control upper-layer (N)ACKing. - ControlAckControlEnable = 1 << 4, - /// Enable the bus monitor in multi-controller mode. - ControlMultiControllerMonitorEnable = 1 << 5, - /// If set, causes a read transfer addressed to the this target to set - /// the corresponding bit in the `targetEvents` register. While the - /// `transmitPending` field is 1, subsequent read transactions will - /// stretch the clock, even if there is data in the Transmit FIFO. - ControlTransmitStretchEnable = 1 << 6, + enum [[clang::flag_enum]] : uint32_t + { + /// Enable Host I2C functionality + ControlEnableHost = 1 << 0, + /// Enable Target I2C functionality + ControlEnableTarget = 1 << 1, + /// Enable I2C line loopback test If line loopback is enabled, the + /// internal design sees ACQ and RX data as "1" + ControlLineLoopback = 1 << 2, + /// Enable NACKing the address on a stretch timeout. This is a target + /// mode feature. If enabled, a stretch timeout will cause the device to + /// NACK the address byte. If disabled, it will ACK instead. + ControlNackAddressAfterTimeout = 1 << 3, + /// Enable ACK Control Mode, which works with the `targetAckControl` + /// register to allow software to control upper-layer (N)ACKing. + ControlAckControlEnable = 1 << 4, + /// Enable the bus monitor in multi-controller mode. + ControlMultiControllerMonitorEnable = 1 << 5, + /// If set, causes a read transfer addressed to the this target to set + /// the corresponding bit in the `targetEvents` register. While the + /// `transmitPending` field is 1, subsequent read transactions will + /// stretch the clock, even if there is data in the Transmit FIFO. + ControlTransmitStretchEnable = 1 << 6, }; /// Status Register Fields - enum [[clang::flag_enum]] : uint32_t{ - /// Host mode Format FIFO is full - StatusFormatFull = 1 << 0, - /// Host mode Receive FIFO is full - StatusReceiveFull = 1 << 1, - /// Host mode Format FIFO is empty - StatusFormatEmpty = 1 << 2, - /// Host functionality is idle. No Host transaction is in progress - StatusHostIdle = 1 << 3, - /// Target functionality is idle. No Target transaction is in progress - StatusTargetIdle = 1 << 4, - /// Host mode Receive FIFO is empty - SmatusReceiveEmpty = 1 << 5, - /// Target mode Transmit FIFO is full - StatusTransmitFull = 1 << 6, - /// Target mode Acquired FIFO is full - StatusAcquiredFull = 1 << 7, - /// Target mode Transmit FIFO is empty - StatusTransmitEmpty = 1 << 8, - /// Target mode Acquired FIFO is empty - StatusAcquiredEmpty = 1 << 9, - /// Target mode stretching at (N)ACK phase due to zero count - /// in the `targetAckControl` register. - StatusAckControlStretch = 1 << 10, + enum [[clang::flag_enum]] : uint32_t + { + /// Host mode Format FIFO is full + StatusFormatFull = 1 << 0, + /// Host mode Receive FIFO is full + StatusReceiveFull = 1 << 1, + /// Host mode Format FIFO is empty + StatusFormatEmpty = 1 << 2, + /// Host functionality is idle. No Host transaction is in progress + StatusHostIdle = 1 << 3, + /// Target functionality is idle. No Target transaction is in progress + StatusTargetIdle = 1 << 4, + /// Host mode Receive FIFO is empty + SmatusReceiveEmpty = 1 << 5, + /// Target mode Transmit FIFO is full + StatusTransmitFull = 1 << 6, + /// Target mode Acquired FIFO is full + StatusAcquiredFull = 1 << 7, + /// Target mode Transmit FIFO is empty + StatusTransmitEmpty = 1 << 8, + /// Target mode Acquired FIFO is empty + StatusAcquiredEmpty = 1 << 9, + /// Target mode stretching at (N)ACK phase due to zero count + /// in the `targetAckControl` register. + StatusAckControlStretch = 1 << 10, }; /// FormatData Register Fields - enum [[clang::flag_enum]] : uint32_t{ - /// Issue a START condition before transmitting BYTE. - FormatDataStart = 1 << 8, - /// Issue a STOP condition after this operation - FormatDataStop = 1 << 9, - /// Read BYTE bytes from I2C. (256 if BYTE==0) - FormatDataReadBytes = 1 << 10, - /** - * Do not NACK the last byte read, let the read - * operation continue - */ - FormatDataReadCount = 1 << 11, - /// Do not signal an exception if the current byte is not ACK’d - FormatDataNakOk = 1 << 12, + enum [[clang::flag_enum]] : uint32_t + { + /// Issue a START condition before transmitting BYTE. + FormatDataStart = 1 << 8, + /// Issue a STOP condition after this operation + FormatDataStop = 1 << 9, + /// Read BYTE bytes from I2C. (256 if BYTE==0) + FormatDataReadBytes = 1 << 10, + /** + * Do not NACK the last byte read, let the read + * operation continue + */ + FormatDataReadCount = 1 << 11, + /// Do not signal an exception if the current byte is not ACK’d + FormatDataNakOk = 1 << 12, }; /// FifoControl Register Fields - enum [[clang::flag_enum]] : uint32_t{ - /// Receive fifo reset. Write 1 to the register resets it. Read returns 0 - FifoControlReceiveReset = 1 << 0, - /// Format fifo reset. Write 1 to the register resets it. Read returns 0 - FifoControlFormatReset = 1 << 1, - /// Acquired FIFO reset. Write 1 to the register resets it. Read returns 0 - FifoControlAcquiredReset = 1 << 7, - /// Transmit FIFO reset. Write 1 to the register resets it. Read returns 0 - FifoControlTransmitReset = 1 << 8, + enum [[clang::flag_enum]] : uint32_t + { + /// Receive fifo reset. Write 1 to the register resets it. Read returns + /// 0 + FifoControlReceiveReset = 1 << 0, + /// Format fifo reset. Write 1 to the register resets it. Read returns 0 + FifoControlFormatReset = 1 << 1, + /// Acquired FIFO reset. Write 1 to the register resets it. Read returns + /// 0 + FifoControlAcquiredReset = 1 << 7, + /// Transmit FIFO reset. Write 1 to the register resets it. Read returns + /// 0 + FifoControlTransmitReset = 1 << 8, }; /// ControllerEvents Register Fields - enum [[clang::flag_enum]] : uint32_t{ - /// Controller FSM is halted due to receiving an unexpected NACK. - ControllerEventsNack = 1 << 0, - /** - * Controller FSM is halted due to a Host-Mode active transaction being - * ended by the `hostNackHandlerTimeout` mechanism. - */ - ControllerEventsUnhandledNackTimeout = 1 << 1, - /** - * Controller FSM is halted due to a Host-Mode active transaction being - * terminated because of a bus timeout activated by `timeoutControl`. - */ - ControllerEventsBusTimeout = 1 << 2, - /** - * Controller FSM is halted due to a Host-Mode active transaction being - * terminated because of lost arbitration. - */ - ControllerEventsArbitrationLost = 1 << 3, + enum [[clang::flag_enum]] : uint32_t + { + /// Controller FSM is halted due to receiving an unexpected NACK. + ControllerEventsNack = 1 << 0, + /** + * Controller FSM is halted due to a Host-Mode active transaction being + * ended by the `hostNackHandlerTimeout` mechanism. + */ + ControllerEventsUnhandledNackTimeout = 1 << 1, + /** + * Controller FSM is halted due to a Host-Mode active transaction being + * terminated because of a bus timeout activated by `timeoutControl`. + */ + ControllerEventsBusTimeout = 1 << 2, + /** + * Controller FSM is halted due to a Host-Mode active transaction being + * terminated because of lost arbitration. + */ + ControllerEventsArbitrationLost = 1 << 3, }; // Referred to as 'RX FIFO' in the documentation
diff --git a/sdk/include/platform/sunburst/platform-rgbctrl.hh b/sdk/include/platform/sunburst/platform-rgbctrl.hh index 1e5a153..067d9e0 100644 --- a/sdk/include/platform/sunburst/platform-rgbctrl.hh +++ b/sdk/include/platform/sunburst/platform-rgbctrl.hh
@@ -33,23 +33,25 @@ uint32_t status; /// Control Register Fields - enum [[clang::flag_enum]] ControlFields : uint32_t{ - /// Write 1 to set RGB LEDs to specified colours. - ControlSet = 1 << 0, - /** - * Write 1 to turn off RGB LEDs. - * Write to ControlSet to turn on again. - */ - ControlOff = 1 << 1, + enum [[clang::flag_enum]] ControlFields : uint32_t + { + /// Write 1 to set RGB LEDs to specified colours. + ControlSet = 1 << 0, + /** + * Write 1 to turn off RGB LEDs. + * Write to ControlSet to turn on again. + */ + ControlOff = 1 << 1, }; /// Status Register Fields - enum [[clang::flag_enum]] StatusFields : uint32_t{ - /** - * When asserted controller is idle and new colours can be set, - * otherwise writes to regLed0, regLed1, and control are ignored. - */ - StatusIdle = 1 << 0, + enum [[clang::flag_enum]] StatusFields : uint32_t + { + /** + * When asserted controller is idle and new colours can be set, + * otherwise writes to regLed0, regLed1, and control are ignored. + */ + StatusIdle = 1 << 0, }; /**
diff --git a/sdk/include/platform/sunburst/platform-spi.hh b/sdk/include/platform/sunburst/platform-spi.hh index 45ebce4..e835640 100644 --- a/sdk/include/platform/sunburst/platform-spi.hh +++ b/sdk/include/platform/sunburst/platform-spi.hh
@@ -7,25 +7,25 @@ namespace SonataSpi { /// Sonata SPI Interrupts - typedef enum [[clang::flag_enum]] - : uint32_t{ - /// Raised when a SPI operation completes and the block has become idle. - InterruptComplete = 1 << 4, - /* - * Asserted whilst the transmit FIFO level is at or below the - * transmit watermark. - */ - InterruptTransmitWatermark = 1 << 3, - /// Asserted whilst the transmit FIFO is empty. - InterruptTransmitEmpty = 1 << 2, - /* - * Asserted whilst the receive FIFO level is at or above the receive - * watermark. - */ - InterruptReceiveWatermark = 1 << 1, - /// Asserted whilst the receive FIFO is full. - InterruptReceiveFull = 1 << 0, - } Interrupt; + typedef enum [[clang::flag_enum]] : uint32_t + { + /// Raised when a SPI operation completes and the block has become idle. + InterruptComplete = 1 << 4, + /* + * Asserted whilst the transmit FIFO level is at or below the + * transmit watermark. + */ + InterruptTransmitWatermark = 1 << 3, + /// Asserted whilst the transmit FIFO is empty. + InterruptTransmitEmpty = 1 << 2, + /* + * Asserted whilst the receive FIFO level is at or above the receive + * watermark. + */ + InterruptReceiveWatermark = 1 << 1, + /// Asserted whilst the receive FIFO is full. + InterruptReceiveFull = 1 << 0, + } Interrupt; /// Configuration Register Fields enum : uint32_t @@ -313,7 +313,7 @@ { // Wait for at least one byte to be available in the RX FIFO while ((status & StatusRxFifoLevel) == 0) {} - data[i] = uint8_t(receiveFifo); + data[i] = static_cast<uint8_t>(receiveFifo); } } }
diff --git a/sdk/include/platform/sunburst/platform-uart.hh b/sdk/include/platform/sunburst/platform-uart.hh index 09f217d..6513112 100644 --- a/sdk/include/platform/sunburst/platform-uart.hh +++ b/sdk/include/platform/sunburst/platform-uart.hh
@@ -75,36 +75,37 @@ uint32_t timeoutControl; /// OpenTitan UART Interrupts - typedef enum [[clang::flag_enum]] - : uint32_t{ - /// Raised if the transmit FIFO is empty. - InterruptTransmitEmpty = 1 << 8, - /// Raised if the receiver has detected a parity error. - InterruptReceiveParityErr = 1 << 7, - /// Raised if the receive FIFO has characters remaining in the FIFO - /// without being - /// retreived for the programmed time period. - InterruptReceiveTimeout = 1 << 6, - /// Raised if break condition has been detected on receive. - InterruptReceiveBreakErr = 1 << 5, - /// Raised if a framing error has been detected on receive. - InterruptReceiveFrameErr = 1 << 4, - /// Raised if the receive FIFO has overflowed. - InterruptReceiveOverflow = 1 << 3, - /// Raised if the transmit FIFO has emptied and no transmit is ongoing. - InterruptTransmitDone = 1 << 2, - /// Raised if the receive FIFO is past the high-water mark. - InterruptReceiveWatermark = 1 << 1, - /// Raised if the transmit FIFO is past the high-water mark. - InterruptTransmitWatermark = 1 << 0, - } OpenTitanUartInterrupt; + typedef enum [[clang::flag_enum]] : uint32_t + { + /// Raised if the transmit FIFO is empty. + InterruptTransmitEmpty = 1 << 8, + /// Raised if the receiver has detected a parity error. + InterruptReceiveParityErr = 1 << 7, + /// Raised if the receive FIFO has characters remaining in the FIFO + /// without being + /// retreived for the programmed time period. + InterruptReceiveTimeout = 1 << 6, + /// Raised if break condition has been detected on receive. + InterruptReceiveBreakErr = 1 << 5, + /// Raised if a framing error has been detected on receive. + InterruptReceiveFrameErr = 1 << 4, + /// Raised if the receive FIFO has overflowed. + InterruptReceiveOverflow = 1 << 3, + /// Raised if the transmit FIFO has emptied and no transmit is ongoing. + InterruptTransmitDone = 1 << 2, + /// Raised if the receive FIFO is past the high-water mark. + InterruptReceiveWatermark = 1 << 1, + /// Raised if the transmit FIFO is past the high-water mark. + InterruptTransmitWatermark = 1 << 0, + } OpenTitanUartInterrupt; /// FIFO Control Register Fields - enum [[clang::flag_enum]] : uint32_t{ - /// Reset the transmit FIFO. - FifoControlTransmitReset = 1 << 1, - /// Reset the receive FIFO. - FifoControlReceiveReset = 1 << 0, + enum [[clang::flag_enum]] : uint32_t + { + /// Reset the transmit FIFO. + FifoControlTransmitReset = 1 << 1, + /// Reset the receive FIFO. + FifoControlReceiveReset = 1 << 0, }; /// Control Register Fields
diff --git a/sdk/include/platform/sunburst/platform-usbdev.hh b/sdk/include/platform/sunburst/platform-usbdev.hh index 1a279bc..cc03ea5 100644 --- a/sdk/include/platform/sunburst/platform-usbdev.hh +++ b/sdk/include/platform/sunburst/platform-usbdev.hh
@@ -250,9 +250,9 @@ [[nodiscard]] uint64_t supply_buffers(uint64_t bufferBitmap) volatile { constexpr uint32_t SetupFullBit = - uint32_t(UsbStatusField::AvailableSetupFull); + static_cast<uint32_t>(UsbStatusField::AvailableSetupFull); constexpr uint32_t OutFullBit = - uint32_t(UsbStatusField::AvailableOutFull); + static_cast<uint32_t>(UsbStatusField::AvailableOutFull); for (uint8_t index = 0; index < BufferCount; index++) { @@ -286,7 +286,7 @@ */ void interrupt_enable(UsbdevInterrupt interrupt) volatile { - interruptEnable = interruptEnable | uint32_t(interrupt); + interruptEnable = interruptEnable | static_cast<uint32_t>(interrupt); } /** @@ -294,7 +294,7 @@ */ void interrupt_disable(UsbdevInterrupt interrupt) volatile { - interruptEnable = interruptEnable & ~uint32_t(interrupt); + interruptEnable = interruptEnable & ~static_cast<uint32_t>(interrupt); } /** @@ -310,8 +310,10 @@ */ [[nodiscard]] int init(uint64_t &bufferBitmap) volatile { - bufferBitmap = supply_buffers((uint64_t(1u) << BufferCount) - 1u); - phyConfig = uint32_t(PhyConfigField::UseDifferentialReceiver); + bufferBitmap = + supply_buffers((static_cast<uint64_t>(1u) << BufferCount) - 1u); + phyConfig = + static_cast<uint32_t>(PhyConfigField::UseDifferentialReceiver); return 0; } @@ -404,7 +406,8 @@ { return -1; } - usbControl = usbControl | uint32_t(UsbControlField::Enable); + usbControl = + usbControl | static_cast<uint32_t>(UsbControlField::Enable); return 0; } @@ -415,7 +418,8 @@ */ void disconnect() volatile { - usbControl = usbControl & ~uint32_t(UsbControlField::Enable); + usbControl = + usbControl & ~static_cast<uint32_t>(UsbControlField::Enable); } /** @@ -425,7 +429,7 @@ */ [[nodiscard]] bool connected() volatile { - return (usbControl & uint32_t(UsbControlField::Enable)); + return (usbControl & static_cast<uint32_t>(UsbControlField::Enable)); } /** @@ -443,8 +447,9 @@ { return -1; // Device addresses are only 7 bits long. } - constexpr uint32_t Mask = uint32_t(UsbControlField::DeviceAddress); - usbControl = (usbControl & ~Mask) | (address << 16); + constexpr uint32_t Mask = + static_cast<uint32_t>(UsbControlField::DeviceAddress); + usbControl = (usbControl & ~Mask) | (address << 16); return 0; } @@ -463,8 +468,9 @@ [[nodiscard]] int retrieve_collected_packet(uint8_t &endpointId, uint8_t &bufferId) volatile { - constexpr uint32_t BufferIdMask = uint32_t(ConfigInField::BufferId); - uint32_t sent = inSent; + constexpr uint32_t BufferIdMask = + static_cast<uint32_t>(ConfigInField::BufferId); + uint32_t sent = inSent; // Clear the first encountered packet sent indication. for (endpointId = 0; endpointId < MaxEndpoints; endpointId++) @@ -504,9 +510,10 @@ usbdev_transfer(buffer(bufferId), data, size, true); } - constexpr uint32_t ReadyBit = uint32_t(ConfigInField::Ready); - configIn[endpointId] = bufferId | (size << 8); - configIn[endpointId] = configIn[endpointId] | ReadyBit; + constexpr uint32_t ReadyBit = + static_cast<uint32_t>(ConfigInField::Ready); + configIn[endpointId] = bufferId | (size << 8); + configIn[endpointId] = configIn[endpointId] | ReadyBit; } /// The information associated with a received packet @@ -516,22 +523,28 @@ /// The endpoint ID the received packet was received on constexpr uint8_t endpoint_id() { - return (info & uint32_t(ReceiveBufferField::EndpointId)) >> 20; + return (info & + static_cast<uint32_t>(ReceiveBufferField::EndpointId)) >> + 20; } /// The size of the received packet constexpr uint16_t size() { - return (info & uint32_t(ReceiveBufferField::Size)) >> 8; + return (info & static_cast<uint32_t>(ReceiveBufferField::Size)) >> + 8; } /// Whether the received packet was a setup packet constexpr bool is_setup() { - return (info & uint32_t(ReceiveBufferField::Setup)) != 0; + return (info & static_cast<uint32_t>(ReceiveBufferField::Setup)) != + 0; } /// The buffer ID used to store the received packet constexpr uint8_t buffer_id() { - return (info & uint32_t(ReceiveBufferField::BufferId)) >> 0; + return (info & + static_cast<uint32_t>(ReceiveBufferField::BufferId)) >> + 0; } }; @@ -546,7 +559,7 @@ */ [[nodiscard]] std::optional<ReceiveBufferInfo> packet_take() volatile { - if (!(usbStatus & uint32_t(UsbStatusField::ReceiveDepth))) + if (!(usbStatus & static_cast<uint32_t>(UsbStatusField::ReceiveDepth))) { return {}; // No packets received }
diff --git a/sdk/include/thread_pool.h b/sdk/include/thread_pool.h index 0dd87b8..c8be4c2 100644 --- a/sdk/include/thread_pool.h +++ b/sdk/include/thread_pool.h
@@ -163,11 +163,11 @@ // type. Timeout t{UnlimitedTimeout}; void *sealed = token_sealed_unsealed_alloc( - &t, - MALLOC_CAPABILITY, - detail::sealing_key_for_type<LambdaType>(), - sizeof(lambda), - &buffer); + &t, + MALLOC_CAPABILITY, + detail::sealing_key_for_type<LambdaType>(), + sizeof(lambda), + &buffer); /* * Copy the lambda into the new allocation. *
diff --git a/sdk/include/token.h b/sdk/include/token.h index b1e2a09..b8247a0 100644 --- a/sdk/include/token.h +++ b/sdk/include/token.h
@@ -203,7 +203,7 @@ */ void *unsealed = nullptr; SObj sealed = token_sealed_unsealed_alloc( - timeout, heapCapability, key, sizeof(T), &unsealed); + timeout, heapCapability, key, sizeof(T), &unsealed); return {static_cast<T *>(unsealed), Sealed<T>{sealed}}; }
diff --git a/sdk/include/utils.hh b/sdk/include/utils.hh index 917fc40..704ede8 100644 --- a/sdk/include/utils.hh +++ b/sdk/include/utils.hh
@@ -38,12 +38,12 @@ class NoCopyNoMove { public: - NoCopyNoMove() = default; - NoCopyNoMove(const NoCopyNoMove &) = delete; + NoCopyNoMove() = default; + NoCopyNoMove(const NoCopyNoMove &) = delete; NoCopyNoMove &operator=(const NoCopyNoMove &) = delete; NoCopyNoMove(NoCopyNoMove &&) = delete; - NoCopyNoMove &operator=(NoCopyNoMove &&) = delete; - ~NoCopyNoMove() = default; + NoCopyNoMove &operator=(NoCopyNoMove &&) = delete; + ~NoCopyNoMove() = default; }; /**
diff --git a/sdk/lib/compartment_helpers/claim_fast.cc b/sdk/lib/compartment_helpers/claim_fast.cc index a509c1f..8d93a7a 100644 --- a/sdk/lib/compartment_helpers/claim_fast.cc +++ b/sdk/lib/compartment_helpers/claim_fast.cc
@@ -12,7 +12,7 @@ void **hazards = switcher_thread_hazard_slots(); auto *epochCounter{const_cast< cheriot::atomic<uint32_t> *>(SHARED_OBJECT_WITH_PERMISSIONS( - cheriot::atomic<uint32_t>, allocator_epoch, true, false, false, false))}; + cheriot::atomic<uint32_t>, allocator_epoch, true, false, false, false))}; uint32_t epoch = epochCounter->load(); int values = 2; // Skip processing pointers that don't refer to heap memory.
diff --git a/sdk/lib/cxxrt/guard.cc b/sdk/lib/cxxrt/guard.cc index a60f690..04d7319 100644 --- a/sdk/lib/cxxrt/guard.cc +++ b/sdk/lib/cxxrt/guard.cc
@@ -33,7 +33,7 @@ /// The high half (second on a little-endian system). uint32_t high; /// The bit used for the lock (the high bit on a little-endian system) - static constexpr uint32_t LockBit = uint32_t(1) << 31; + static constexpr uint32_t LockBit = static_cast<uint32_t>(1) << 31; public: /**
diff --git a/sdk/lib/debug/debug.cc b/sdk/lib/debug/debug.cc index 2642d9f..2643db1 100644 --- a/sdk/lib/debug/debug.cc +++ b/sdk/lib/debug/debug.cc
@@ -113,7 +113,7 @@ } std::array<char, 10> buf; const char Digits[] = "0123456789"; - for (int i = int(buf.size() - 1); i >= 0; i--) + for (int i = static_cast<int>(buf.size() - 1); i >= 0; i--) { buf[static_cast<size_t>(i)] = Digits[s % 10]; s /= 10; @@ -146,7 +146,7 @@ } std::array<char, 20> buf; const char Digits[] = "0123456789"; - for (int i = int(buf.size() - 1); i >= 0; i--) + for (int i = static_cast<int>(buf.size() - 1); i >= 0; i--) { buf[static_cast<size_t>(i)] = Digits[s % 10]; s /= 10; @@ -176,7 +176,7 @@ const char Hexdigits[] = "0123456789abcdef"; // Length of string including null terminator static_assert(sizeof(Hexdigits) == 0x11); - for (long i = long(buf.size() - 1); i >= 0; i--) + for (long i = static_cast<long>(buf.size() - 1); i >= 0; i--) { buf.at(static_cast<size_t>(i)) = Hexdigits[s & 0xf]; s >>= 4;
diff --git a/sdk/lib/event_group/event_group.cc b/sdk/lib/event_group/event_group.cc index 446c8eb..87f7ce7 100644 --- a/sdk/lib/event_group/event_group.cc +++ b/sdk/lib/event_group/event_group.cc
@@ -38,7 +38,7 @@ EventGroup **outGroup) { auto threads = thread_count(); - if (threads == uint16_t(-1)) + if (threads == static_cast<uint16_t>(-1)) { return -ERANGE; }
diff --git a/tests.extra/hardware_revoker_IRQs/top.cc b/tests.extra/hardware_revoker_IRQs/top.cc index f3e50d3..9cb7d67 100644 --- a/tests.extra/hardware_revoker_IRQs/top.cc +++ b/tests.extra/hardware_revoker_IRQs/top.cc
@@ -5,11 +5,31 @@ #if __has_include(<platform-hardware_revoker.hh>) # include <platform-hardware_revoker.hh> + +using Revoker = HardwareRevoker<uint32_t, REVOKABLE_MEMORY_START>; + +#elif defined(CLANG_TIDY) + +struct Revoker +{ + static constexpr bool IsAsynchronous = true; + + uint32_t system_epoch_get() + { + return 0; + } + int wait_for_completion(Timeout *, uint32_t) + { + return 0; + } + void system_bg_revoker_kick() {} + void init() {} +}; + #else # error No platform-hardware_revoker.hh found, are you building for the right platform? #endif -using Revoker = HardwareRevoker<uint32_t, REVOKABLE_MEMORY_START>; static_assert(Revoker::IsAsynchronous, "This test is for async revokers"); void __cheri_compartment("top") entry()
diff --git a/tests/allocator-test.cc b/tests/allocator-test.cc index 27b78e3..52ad944 100644 --- a/tests/allocator-test.cc +++ b/tests/allocator-test.cc
@@ -372,11 +372,11 @@ ssize_t claimSize = heap_claim(SECOND_HEAP, alloc); claimCount++; TEST((allocSize <= claimSize) && - (claimSize <= allocSize + CHERIOTHeapMinChunkSize), - "{}-byte allocation claimed as {} bytes (claim number {})", - allocSize, - claimSize, - claimCount); + (claimSize <= allocSize + CHERIOTHeapMinChunkSize), + "{}-byte allocation claimed as {} bytes (claim number {})", + allocSize, + claimSize, + claimCount); }; claim(); int ret = heap_free(SECOND_HEAP, alloc);
diff --git a/tests/compartment_calls.h b/tests/compartment_calls.h index 6e4103d..c418218 100644 --- a/tests/compartment_calls.h +++ b/tests/compartment_calls.h
@@ -40,7 +40,7 @@ int x6); __cheri_compartment("compartment_calls_inner") int test_incorrect_export_table( __cheri_callback void (*fn)(), - bool *outTestFailed); + bool *outTestFailed); __cheri_compartment( "compartment_calls_inner_with_" "handler") int test_incorrect_export_table_with_handler(__cheri_callback int (*fn)());
diff --git a/tests/compartment_calls_inner.cc b/tests/compartment_calls_inner.cc index efd6138..f0d1c8f 100644 --- a/tests/compartment_calls_inner.cc +++ b/tests/compartment_calls_inner.cc
@@ -98,7 +98,7 @@ } int test_incorrect_export_table(__cheri_callback void (*fn)(), - bool *outTestFailed) + bool *outTestFailed) { /* * Trigger a cross-compartment call with an invalid export entry.
diff --git a/tests/stack_integrity_thread.cc b/tests/stack_integrity_thread.cc index ee9f427..bfeab94 100644 --- a/tests/stack_integrity_thread.cc +++ b/tests/stack_integrity_thread.cc
@@ -144,7 +144,7 @@ return -EINVAL; } -int set_csp_permissions_on_call(PermissionSet newPermissions, +int set_csp_permissions_on_call(PermissionSet newPermissions, __cheri_callback int (*fn)()) { CALL_CHERI_CALLBACK(fn, "candperm csp, csp, %1\n", newPermissions.as_raw()); @@ -180,7 +180,7 @@ } int exhaust_trusted_stack(__cheri_callback int (*fn)(), - bool *outLeakedSwitcherCapability) + bool *outLeakedSwitcherCapability) { return self_recursion(fn); }
diff --git a/tests/stack_tests.h b/tests/stack_tests.h index 90b49df..a209e2e 100644 --- a/tests/stack_tests.h +++ b/tests/stack_tests.h
@@ -6,14 +6,14 @@ __cheri_compartment("stack_integrity_thread") int exhaust_trusted_stack( __cheri_callback int (*fn)(), - bool *outLeakedSwitcherCapability); + bool *outLeakedSwitcherCapability); __cheri_compartment("stack_integrity_thread") int exhaust_thread_stack(); __cheri_compartment("stack_integrity_thread") int exhaust_thread_stack_spill( __cheri_callback int (*fn)()); __cheri_compartment("stack_integrity_thread") int set_csp_permissions_on_fault( PermissionSet newPermissions); __cheri_compartment("stack_integrity_thread") int set_csp_permissions_on_call( - PermissionSet newPermissions, + PermissionSet newPermissions, __cheri_callback int (*fn)()); __cheri_compartment("stack_integrity_thread") int test_stack_invalid_on_fault(); __cheri_compartment("stack_integrity_thread") int test_stack_invalid_on_call(
diff --git a/tests/test-runner.cc b/tests/test-runner.cc index 6d89591..5aaf023 100644 --- a/tests/test-runner.cc +++ b/tests/test-runner.cc
@@ -111,8 +111,9 @@ "Iterator of PermissionSet failed"); } // These need to be checked visually - debug_log("Trying to print 8-bit integer: {}", uint8_t(0x12)); - debug_log("Trying to print unsigned 8-bit integer: {}", int8_t(34)); + debug_log("Trying to print 8-bit integer: {}", static_cast<uint8_t>(0x12)); + debug_log("Trying to print unsigned 8-bit integer: {}", + static_cast<int8_t>(34)); debug_log("Trying to print char: {}", 'c'); debug_log("Trying to print 32-bit integer: {}", 12345); debug_log("Trying to print 64-bit integer: {}", 123456789012345LL);