Skip to content

Commit 115fc18

Browse files
committed
RISCV: add support for RISCV
Add support for RISCV64G (and partial support for RISCV32G and RISCV128G). This has been tested to work with RV64G in qemu and LLDB from LLVM main.
1 parent 0ca8a95 commit 115fc18

File tree

19 files changed

+1168
-2
lines changed

19 files changed

+1168
-2
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,8 @@
1111
# Output Directories
1212
/build/
1313
/html/
14+
15+
# Generated Data
16+
/Definitions/RISCV32.json
17+
/Definitions/RISCV64.json
18+
/Definitions/RISCV128.json

CMakeLists.txt

+33-1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "X86" OR
9090
elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "X64" OR
9191
CMAKE_SYSTEM_PROCESSOR MATCHES "AMD64|x86_64")
9292
set(DS2_ARCHITECTURE X86_64)
93+
elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "RISCV32|RISCV64|RISCV128" OR
94+
CMAKE_SYSTEM_PROCESSOR MATCHES "riscv32|riscv64|riscv128")
95+
set(DS2_ARCHITECTURE RISCV)
9396
else()
9497
message(SEND_ERROR "Unknown host architecture: ${CMAKE_SYSTEM_PROCESSOR}")
9598
endif()
@@ -123,7 +126,14 @@ set_target_properties(RegsGen2::RegsGen2 PROPERTIES
123126
IMPORTED_LOCATION ${BINARY_DIR}/${RegsGen2_RELATIVE_PATH})
124127
add_dependencies(RegsGen2::RegsGen2 RegsGen2)
125128

126-
foreach(ARCH ARM ARM64 X86 X86_64)
129+
# Generate different pointer size RISC-V definitions.
130+
# FIXME(compnerd) this assumes all targets are RISCVnnnG, which may not be true.
131+
foreach(WORDSIZE 32 64 128)
132+
configure_file(${PROJECT_SOURCE_DIR}/Definitions/RISCVnnn.json
133+
${PROJECT_SOURCE_DIR}/Definitions/RISCV${WORDSIZE}.json @ONLY)
134+
endforeach()
135+
136+
foreach(ARCH ARM ARM64 RISCV32 RISCV64 RISCV128 X86 X86_64)
127137
add_custom_command(OUTPUT
128138
${CMAKE_CURRENT_BINARY_DIR}/Headers/DebugServer2/Architecture/${ARCH}/RegistersDescriptors.h
129139
COMMAND
@@ -222,6 +232,28 @@ elseif(DS2_ARCHITECTURE MATCHES "X86|X86_64")
222232
PROPERTIES
223233
COMPILE_OPTIONS $<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wno-unused-const-variable>)
224234
endif()
235+
elseif(DS2_ARCHITECTURE STREQUAL RISCV)
236+
target_sources(ds2 PRIVATE
237+
Sources/Architecture/RISCV/SoftwareSingleStep.cpp
238+
Sources/Core/RISCV/HardwareBreakpointManager.cpp
239+
Sources/Core/RISCV/SoftwareBreakpointManager.cpp)
240+
241+
if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "RISCV32" OR
242+
CMAKE_SYSTEM_PROCESSOR MATCHES "riscv32")
243+
target_sources(ds2 PRIVATE
244+
${CMAKE_CURRENT_BINARY_DIR}/Headers/DebugServer2/Architecture/RISCV32/RegistersDescriptors.h
245+
${CMAKE_CURRENT_BINARY_DIR}/Sources/Architecture/RISCV32/RegistersDescriptors.cpp)
246+
elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "RISCV64" OR
247+
CMAKE_SYSTEM_PROCESSOR MATCHES "riscv64")
248+
target_sources(ds2 PRIVATE
249+
${CMAKE_CURRENT_BINARY_DIR}/Headers/DebugServer2/Architecture/RISCV64/RegistersDescriptors.h
250+
${CMAKE_CURRENT_BINARY_DIR}/Sources/Architecture/RISCV64/RegistersDescriptors.cpp)
251+
elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "RISCV128" OR
252+
CMAKE_SYSTEM_PROCESSOR MATCHES "riscv128")
253+
target_sources(ds2 PRIVATE
254+
${CMAKE_CURRENT_BINARY_DIR}/Headers/DebugServer2/Architecture/RISCV128/RegistersDescriptors.h
255+
${CMAKE_CURRENT_BINARY_DIR}/Sources/Architecture/RISCV128/RegistersDescriptors.cpp)
256+
endif()
225257
endif()
226258

227259
# OS Sources

0 commit comments

Comments
 (0)