From afc0e54b786a660437d30e5751853b03f5a15816 Mon Sep 17 00:00:00 2001 From: Roan Richmond Date: Fri, 17 Jul 2026 11:49:56 +0100 Subject: [PATCH 1/3] Explicitly cast enums for arithmetic operations arithmetic between different enumeration types is deprecated [-Werror=deprecated-enum-enum-conversion]. --- sw-sysemu/devices/DW_apb_timers.h | 4 ++-- sw-sysemu/memory/etsoc1/main_memory.cpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sw-sysemu/devices/DW_apb_timers.h b/sw-sysemu/devices/DW_apb_timers.h index 9776c9fe4..98680812f 100644 --- a/sw-sysemu/devices/DW_apb_timers.h +++ b/sw-sysemu/devices/DW_apb_timers.h @@ -83,7 +83,7 @@ struct DW_apb_timers : public MemoryRegion { if (n != 4) throw memory_error(first() + pos); - if (pos < (NUM_TIMERS * REG_STRIDE)) { + if (pos < (static_cast(NUM_TIMERS) * static_cast(REG_STRIDE))) { size_type timer = pos / REG_STRIDE; size_type timer_pos = pos % REG_STRIDE; @@ -144,7 +144,7 @@ struct DW_apb_timers : public MemoryRegion { if (n != 4) throw memory_error(first() + pos); - if (pos >= (NUM_TIMERS * REG_STRIDE)) + if (pos >= (static_cast(NUM_TIMERS) * static_cast(REG_STRIDE))) return; size_type timer = pos / REG_STRIDE; diff --git a/sw-sysemu/memory/etsoc1/main_memory.cpp b/sw-sysemu/memory/etsoc1/main_memory.cpp index ecccd101c..e7eacb937 100644 --- a/sw-sysemu/memory/etsoc1/main_memory.cpp +++ b/sw-sysemu/memory/etsoc1/main_memory.cpp @@ -263,32 +263,32 @@ void MainMemory::spio_apb_timers_clock_tick(System& chip) void MainMemory::pc_mm_mailbox_read(const Agent& agent, addr_type offset, size_type n, void* result) { - read(agent, pu_mbox_base + MailboxRegion::pu_mbox_pc_mm_pos + offset, n, result); + read(agent, pu_mbox_base + static_cast(MailboxRegion::pu_mbox_pc_mm_pos) + offset, n, result); } void MainMemory::pc_mm_mailbox_write(const Agent& agent, addr_type offset, size_type n, const void* source) { - write(agent, pu_mbox_base + MailboxRegion::pu_mbox_pc_mm_pos + offset, n, source); + write(agent, pu_mbox_base + static_cast(MailboxRegion::pu_mbox_pc_mm_pos) + offset, n, source); } void MainMemory::pc_sp_mailbox_read(const Agent& agent, addr_type offset, size_type n, void* result) { - read(agent, pu_mbox_base + MailboxRegion::pu_mbox_pc_sp_pos + offset, n, result); + read(agent, pu_mbox_base + static_cast(MailboxRegion::pu_mbox_pc_sp_pos) + offset, n, result); } void MainMemory::pc_sp_mailbox_write(const Agent& agent, addr_type offset, size_type n, const void* source) { - write(agent, pu_mbox_base + MailboxRegion::pu_mbox_pc_sp_pos + offset, n, source); + write(agent, pu_mbox_base + static_cast(MailboxRegion::pu_mbox_pc_sp_pos) + offset, n, source); } void MainMemory::pu_trg_pcie_mmm_int_inc(const Agent& agent) { uint32_t trigger = 1; - write(agent, pu_mbox_base + bemu::MailboxRegion::pu_trg_pcie_pos + bemu::MMM_INT_INC, + write(agent, pu_mbox_base + static_cast(bemu::MailboxRegion::pu_trg_pcie_pos) + bemu::MMM_INT_INC, sizeof(trigger), reinterpret_cast(&trigger)); } @@ -296,7 +296,7 @@ void MainMemory::pu_trg_pcie_mmm_int_inc(const Agent& agent) void MainMemory::pu_trg_pcie_ipi_trigger(const Agent& agent) { uint32_t trigger = 1; - write(agent, pu_mbox_base + bemu::MailboxRegion::pu_trg_pcie_pos + bemu::IPI_TRIGGER, + write(agent, pu_mbox_base + static_cast(bemu::MailboxRegion::pu_trg_pcie_pos) + bemu::IPI_TRIGGER, sizeof(trigger), reinterpret_cast(&trigger)); } From 35261c1df4ec48d7f78d4569b535f67d6a2ae775 Mon Sep 17 00:00:00 2001 From: Roan Richmond Date: Fri, 17 Jul 2026 13:36:37 +0100 Subject: [PATCH 2/3] Remove implicit capture of `this` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 --- sw-sysemu/sw-sysemu/SysEmuImp.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sw-sysemu/sw-sysemu/SysEmuImp.cpp b/sw-sysemu/sw-sysemu/SysEmuImp.cpp index 4b46b34a6..14031d478 100644 --- a/sw-sysemu/sw-sysemu/SysEmuImp.cpp +++ b/sw-sysemu/sw-sysemu/SysEmuImp.cpp @@ -215,7 +215,7 @@ void SysEmuImp::process() { void SysEmuImp::mmioRead(uint64_t address, size_t size, std::byte* dst) { resume(); std::promise p; - auto request = [=, &p]() { + auto request = [=, this, &p]() { SE_LOG(INFO) << "Device memory read at: " << std::hex << address << " size: " << size << " host dst: " << dst; auto pci_addr = address; uint64_t host_access_offset = 0; @@ -260,7 +260,7 @@ void SysEmuImp::mmioRead(uint64_t address, size_t size, std::byte* dst) { void SysEmuImp::mmioWrite(uint64_t address, size_t size, const std::byte* src) { resume(); std::promise p; - auto request = [=, &p]() { + auto request = [=, this, &p]() { SE_LOG(INFO) << "Device memory write at: " << std::hex << address << " size: " << size << " host src: " << src; auto pci_addr = address; uint64_t host_access_offset = 0; @@ -300,7 +300,7 @@ void SysEmuImp::mmioWrite(uint64_t address, size_t size, const std::byte* src) { void SysEmuImp::raiseDevicePuPlicPcieMessageInterrupt() { resume(); - auto request = [=]() { + auto request = [=, this]() { SE_LOG(INFO) << "raiseDevicePuPlicPcieMessageInterrupt"; LOG_AGENT(INFO, agent_, "raise_device_interrupt(type = %s)", "PU"); chip_->memory.pu_trg_pcie_mmm_int_inc(agent_); @@ -333,7 +333,7 @@ bool SysEmuImp::raise_host_interrupt(uint32_t bitmap) { void SysEmuImp::raiseDeviceSpioPlicPcieMessageInterrupt() { resume(); - auto request = [=]() { + auto request = [=, this]() { SE_LOG(INFO) << "raiseDeviceSpioPlicPcieMessageInterrupt"; LOG_AGENT(INFO, agent_, "raise_device_interrupt(type = %s)", "SP"); chip_->memory.pu_trg_pcie_ipi_trigger(agent_); @@ -372,7 +372,7 @@ void SysEmuImp::notify_iatu_ctrl_2_reg_write(int pcie_id, uint32_t iatu, uint32_ SysEmuImp::~SysEmuImp() { std::promise p; - auto request = [=, &p]() { + auto request = [=, this, &p]() { try { chip_->set_emu_done(true); p.set_value(); From 43d10c671ce5308a8337faf2ad81648a7bc020c3 Mon Sep 17 00:00:00 2001 From: Roan Richmond Date: Fri, 17 Jul 2026 14:05:14 +0100 Subject: [PATCH 3/3] Allow `no-template-body` errors as warnings Otherwise the build will fail with: error: there are no arguments to '__throw_logic_error' that depend on a template parameter, so a declaration of '__throw_logic_error' must be available [-Wtemplate-body]. --- gp-sdk/device/riscv_helpers.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/gp-sdk/device/riscv_helpers.cmake b/gp-sdk/device/riscv_helpers.cmake index da0ebf750..bc1a93ba7 100644 --- a/gp-sdk/device/riscv_helpers.cmake +++ b/gp-sdk/device/riscv_helpers.cmake @@ -82,6 +82,7 @@ function(add_riscv_executable TARGET_NAME) # baremetal & startup -fno-exceptions -fno-rtti -fno-unwind-tables -fno-use-cxa-atexit -fno-threadsafe-statics -ffreestanding + -Wno-template-body ) target_compile_features(${TARGET_NAME} PUBLIC cxx_std_17)