diff options
author | Jerry Zhao <jerryz123@berkeley.edu> | 2023-07-12 18:20:57 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-12 18:20:57 -0700 |
commit | e85d2923a5e4fdd7d61cd0cc9f0685c97f451769 (patch) | |
tree | 787daefac40fc7983b44eea5adb2b8da60d40992 | |
parent | ed5dccb2911f3b2dda731e5fe65e6c03ad0b46fb (diff) | |
parent | 3b0d3c2004e97bbbcc1ae17a4053f1913b01991f (diff) | |
download | riscv-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.in | 6 | ||||
-rw-r--r-- | disasm/disasm.mk.in | 1 | ||||
-rw-r--r-- | disasm/isa_parser.cc (renamed from riscv/isa_parser.cc) | 7 | ||||
-rw-r--r-- | riscv/isa_parser.h | 9 | ||||
-rw-r--r-- | riscv/processor.cc | 2 | ||||
-rw-r--r-- | riscv/riscv.mk.in | 1 | ||||
-rw-r--r-- | spike_main/spike_main.mk.in | 4 |
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 |