aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry Zhao <jerryz123@berkeley.edu>2023-07-12 18:20:57 -0700
committerGitHub <noreply@github.com>2023-07-12 18:20:57 -0700
commite85d2923a5e4fdd7d61cd0cc9f0685c97f451769 (patch)
tree787daefac40fc7983b44eea5adb2b8da60d40992
parented5dccb2911f3b2dda731e5fe65e6c03ad0b46fb (diff)
parent3b0d3c2004e97bbbcc1ae17a4053f1913b01991f (diff)
downloadriscv-isa-sim-e85d2923a5e4fdd7d61cd0cc9f0685c97f451769.zip
riscv-isa-sim-e85d2923a5e4fdd7d61cd0cc9f0685c97f451769.tar.gz
riscv-isa-sim-e85d2923a5e4fdd7d61cd0cc9f0685c97f451769.tar.bz2
Merge pull request #1409 from riscv-software-src/ext-symbols
Add all symbols from extension.o to spike main
-rw-r--r--Makefile.in6
-rw-r--r--disasm/disasm.mk.in1
-rw-r--r--disasm/isa_parser.cc (renamed from riscv/isa_parser.cc)7
-rw-r--r--riscv/isa_parser.h9
-rw-r--r--riscv/processor.cc2
-rw-r--r--riscv/riscv.mk.in1
-rw-r--r--spike_main/spike_main.mk.in4
7 files changed, 13 insertions, 17 deletions
diff --git a/Makefile.in b/Makefile.in
index b5013bd..f236576 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -264,7 +264,7 @@ $$($(2)_test_objs) : %.o : %.cc
$(COMPILE) -c $$<
$$($(2)_test_exes) : %-utst : %.t.o $$($(2)_test_libnames)
- $(LINK) -o $$@ $$< $$($(2)_test_libnames) $(LIBS)
+ $(LINK) $$($(2)_LDFLAGS) -o $$@ $$< $$($(2)_test_libnames) $(LIBS)
$(2)_deps += $$($(2)_test_deps)
$(2)_junk += \
@@ -292,7 +292,7 @@ $$($(2)_prog_objs) : %.o : %.cc
$(COMPILE) -c $$<
$$($(2)_prog_exes) : % : %.o $$($(2)_prog_libnames)
- $(LINK) -o $$@ $$< $$($(2)_prog_libnames) $(LIBS)
+ $(LINK) $$($(2)_LDFLAGS) -o $$@ $$< $$($(2)_prog_libnames) $(LIBS)
$(2)_deps += $$($(2)_prog_deps)
$(2)_junk += $$($(2)_prog_objs) $$($(2)_prog_deps) $$($(2)_prog_exes)
@@ -307,7 +307,7 @@ $$($(2)_install_prog_objs) : %.o : %.cc $$($(2)_gen_hdrs)
$(COMPILE) -c $$<
$$($(2)_install_prog_exes) : % : %.o $$($(2)_prog_libnames)
- $(LINK) -o $$@ $$< $$($(2)_prog_libnames) $(LIBS)
+ $(LINK) $$($(2)_LDFLAGS) -o $$@ $$< $$($(2)_prog_libnames) $(LIBS)
$(2)_deps += $$($(2)_install_prog_deps)
$(2)_junk += \
diff --git a/disasm/disasm.mk.in b/disasm/disasm.mk.in
index 445c430..090911b 100644
--- a/disasm/disasm.mk.in
+++ b/disasm/disasm.mk.in
@@ -1,5 +1,6 @@
disasm_srcs = \
disasm.cc \
+ isa_parser.cc \
regnames.cc \
disasm_install_lib = yes
diff --git a/riscv/isa_parser.cc b/disasm/isa_parser.cc
index 59472a4..c18a72d 100644
--- a/riscv/isa_parser.cc
+++ b/disasm/isa_parser.cc
@@ -1,5 +1,4 @@
#include "isa_parser.h"
-#include "extension.h"
static std::string strtolower(const char* str)
{
@@ -292,11 +291,7 @@ isa_parser_t::isa_parser_t(const char* str, const char *priv)
if (ext_str.size() == 1) {
bad_isa_string(str, "single 'X' is not a proper name");
} else if (ext_str != "xdummy") {
- extension_t* x = find_extension(ext_str.substr(1).c_str())();
- if (!extensions.insert(std::make_pair(x->name(), x)).second) {
- fprintf(stderr, "extensions must have unique names (got two named \"%s\"!)\n", x->name());
- abort();
- }
+ extensions.insert(ext_str.substr(1));
}
} else {
bad_isa_string(str, ("unsupported extension: " + ext_str).c_str());
diff --git a/riscv/isa_parser.h b/riscv/isa_parser.h
index 5b04347..335a42b 100644
--- a/riscv/isa_parser.h
+++ b/riscv/isa_parser.h
@@ -6,9 +6,7 @@
#include <bitset>
#include <string>
-#include <unordered_map>
-
-class extension_t;
+#include <set>
typedef enum {
// 65('A') ~ 90('Z') is reserved for standard isa in misa
@@ -109,15 +107,14 @@ public:
std::bitset<NUM_ISA_EXTENSIONS> get_extension_table() const { return extension_table; }
- const std::unordered_map<std::string, extension_t*> &
- get_extensions() const { return extensions; }
+ const std::set<std::string> &get_extensions() const { return extensions; }
protected:
unsigned max_xlen;
reg_t max_isa;
std::bitset<NUM_ISA_EXTENSIONS> extension_table;
std::string isa_string;
- std::unordered_map<std::string, extension_t*> extensions;
+ std::set<std::string> extensions;
};
#endif
diff --git a/riscv/processor.cc b/riscv/processor.cc
index 1d5675a..e81375a 100644
--- a/riscv/processor.cc
+++ b/riscv/processor.cc
@@ -61,7 +61,7 @@ processor_t::processor_t(const isa_parser_t *isa, const cfg_t *cfg,
disassembler = new disassembler_t(isa);
for (auto e : isa->get_extensions())
- register_extension(e.second);
+ register_extension(find_extension(e.c_str())());
set_pmp_granularity(1 << PMP_SHIFT);
set_pmp_num(cfg->pmpregions);
diff --git a/riscv/riscv.mk.in b/riscv/riscv.mk.in
index 1ad8b23..3a0333c 100644
--- a/riscv/riscv.mk.in
+++ b/riscv/riscv.mk.in
@@ -49,7 +49,6 @@ riscv_precompiled_hdrs = \
insn_template.h \
riscv_srcs = \
- isa_parser.cc \
processor.cc \
execute.cc \
dts.cc \
diff --git a/spike_main/spike_main.mk.in b/spike_main/spike_main.mk.in
index 25a7a6c..c842c4e 100644
--- a/spike_main/spike_main.mk.in
+++ b/spike_main/spike_main.mk.in
@@ -14,3 +14,7 @@ spike_main_install_prog_srcs = \
spike_main_srcs = \
spike_main_CFLAGS = -fPIC
+
+# This hack adds all symbols from extension.o to spike's dynamic symbol
+# table, which is required for dynamically loaded --extension libraries
+spike_main_LDFLAGS = extension.o