[gem5-dev] Change in gem5/gem5[develop]: sim: Add some methods to create derived symbol tables.
Gabe Black has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/24786 ) Change subject: sim: Add some methods to create derived symbol tables. .. sim: Add some methods to create derived symbol tables. These tables are based on passing the symbols in the current table through some sort of operator function which can chose to add those symbols, modified versions of those symbols, or nothing at all into a new symbol table. The new table is returned as a shared_ptr so its memory will be managed automatically. Change-Id: I8809336e2fc2fda63b16a0400536116ca852ca13 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24786 Reviewed-by: Gabe Black Maintainer: Gabe Black Tested-by: kokoro --- M src/base/loader/symtab.hh 1 file changed, 78 insertions(+), 0 deletions(-) Approvals: Gabe Black: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/base/loader/symtab.hh b/src/base/loader/symtab.hh index 30f0a4f..1e99fec 100644 --- a/src/base/loader/symtab.hh +++ b/src/base/loader/symtab.hh @@ -29,8 +29,10 @@ #ifndef __SYMTAB_HH__ #define __SYMTAB_HH__ +#include #include #include +#include #include #include @@ -56,6 +58,9 @@ class SymbolTable { + public: +typedef std::shared_ptr SymbolTablePtr; + private: typedef std::vector SymbolVector; // Map addresses to an index into the symbol vector. @@ -80,6 +85,39 @@ return true; } +typedef std::function SymTabOp; +SymbolTablePtr +operate(SymTabOp op) const +{ +SymbolTablePtr symtab(new SymbolTable); +for (const auto &symbol: symbols) +op(*symtab, symbol); +return symtab; +} + +typedef std::function SymTabFilter; +SymbolTablePtr +filter(SymTabFilter filter) const +{ +SymTabOp apply_filter = +[filter](SymbolTable &symtab, const Symbol &symbol) { +if (filter(symbol)) { +symtab.insert(symbol); +} +}; +return operate(apply_filter); +} + +SymbolTablePtr +filterByBinding(Symbol::Binding binding) const +{ +auto filt = [binding](const Symbol &symbol) { +return symbol.binding == binding; +}; +return filter(filt); +} + public: typedef SymbolVector::iterator iterator; typedef SymbolVector::const_iterator const_iterator; @@ -95,6 +133,46 @@ bool load(const std::string &file); bool empty() const { return symbols.empty(); } +SymbolTablePtr +offset(Addr by) const +{ +SymTabOp op = [by](SymbolTable &symtab, const Symbol &symbol) { +Symbol sym = symbol; +sym.address += by; +symtab.insert(sym); +}; +return operate(op); +} + +SymbolTablePtr +mask(Addr m) const +{ +SymTabOp op = [m](SymbolTable &symtab, const Symbol &symbol) { +Symbol sym = symbol; +sym.address &= m; +symtab.insert(sym); +}; +return operate(op); +} + +SymbolTablePtr +globals() const +{ +return filterByBinding(Symbol::Binding::Global); +} + +SymbolTablePtr +locals() const +{ +return filterByBinding(Symbol::Binding::Local); +} + +SymbolTablePtr +weaks() const +{ +return filterByBinding(Symbol::Binding::Weak); +} + void serialize(const std::string &base, CheckpointOut &cp) const; void unserialize(const std::string &base, CheckpointIn &cp, Symbol::Binding default_binding=Symbol::Binding::Global); -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/24786 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: I8809336e2fc2fda63b16a0400536116ca852ca13 Gerrit-Change-Number: 24786 Gerrit-PatchSet: 33 Gerrit-Owner: Gabe Black Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Bradford Beckmann Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: mem-ruby: Added M5_CLASS_VAR_USED to m_id in OutputUnit
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/29304 ) Change subject: mem-ruby: Added M5_CLASS_VAR_USED to m_id in OutputUnit .. mem-ruby: Added M5_CLASS_VAR_USED to m_id in OutputUnit Clang 9 throws an error that 'm_id' is unused (encountered when compiling X86.fast). M5_CLASS_VAR_USED has been added to avoid this error. Change-Id: I722edd1429a074ff484b5ebbdc431af0089561b5 Issue-on: https://gem5.atlassian.net/browse/GEM5-560 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29304 Maintainer: Bobby R. Bruce Reviewed-by: Jason Lowe-Power Tested-by: kokoro --- M src/mem/ruby/network/garnet2.0/OutputUnit.hh 1 file changed, 2 insertions(+), 1 deletion(-) Approvals: Jason Lowe-Power: Looks good to me, approved Bobby R. Bruce: Looks good to me, approved kokoro: Regressions pass diff --git a/src/mem/ruby/network/garnet2.0/OutputUnit.hh b/src/mem/ruby/network/garnet2.0/OutputUnit.hh index c720888..dbb35ee 100644 --- a/src/mem/ruby/network/garnet2.0/OutputUnit.hh +++ b/src/mem/ruby/network/garnet2.0/OutputUnit.hh @@ -35,6 +35,7 @@ #include #include +#include "base/compiler.hh" #include "mem/ruby/common/Consumer.hh" #include "mem/ruby/network/garnet2.0/CommonTypes.hh" #include "mem/ruby/network/garnet2.0/NetworkLink.hh" @@ -91,7 +92,7 @@ private: Router *m_router; -int m_id; +int M5_CLASS_VAR_USED m_id; PortDirection m_direction; int m_vc_per_vnet; NetworkLink *m_out_link; -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29304 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: I722edd1429a074ff484b5ebbdc431af0089561b5 Gerrit-Change-Number: 29304 Gerrit-PatchSet: 3 Gerrit-Owner: Bobby R. Bruce Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Hoa Nguyen Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Srikant Bharadwaj Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[develop]: mem-garnet: Remove extraneous loop in Router resetStats.
Polydoros Petrakis has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/29254 ) Change subject: mem-garnet: Remove extraneous loop in Router resetStats. .. mem-garnet: Remove extraneous loop in Router resetStats. This outer loop makes no sense. Change-Id: Ibe4b8b50c5843fba2119906f59ea1cb6c1d8c762 --- M src/mem/ruby/network/garnet2.0/Router.cc 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mem/ruby/network/garnet2.0/Router.cc b/src/mem/ruby/network/garnet2.0/Router.cc index 14c0e84..73b7dce 100644 --- a/src/mem/ruby/network/garnet2.0/Router.cc +++ b/src/mem/ruby/network/garnet2.0/Router.cc @@ -215,10 +215,8 @@ void Router::resetStats() { -for (int j = 0; j < m_virtual_networks; j++) { -for (int i = 0; i < m_input_unit.size(); i++) { +for (int i = 0; i < m_input_unit.size(); i++) { m_input_unit[i]->resetStats(); -} } crossbarSwitch.resetStats(); -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29254 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: Ibe4b8b50c5843fba2119906f59ea1cb6c1d8c762 Gerrit-Change-Number: 29254 Gerrit-PatchSet: 1 Gerrit-Owner: Polydoros Petrakis Gerrit-MessageType: newchange ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[develop]: mem-garnet,mem-ruby: Properly reset garnet2.0 statistics.
Polydoros Petrakis has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/29253 ) Change subject: mem-garnet,mem-ruby: Properly reset garnet2.0 statistics. .. mem-garnet,mem-ruby: Properly reset garnet2.0 statistics. Statistics for crossbar activity, and link related statistics were not getting reset when using m5_reset_stats. Change-Id: Ib84c55200e4a86c6f9190de28498112bd43dde9d --- M src/mem/ruby/network/garnet2.0/GarnetNetwork.cc M src/mem/ruby/network/garnet2.0/GarnetNetwork.hh M src/mem/ruby/system/RubySystem.cc 3 files changed, 13 insertions(+), 0 deletions(-) diff --git a/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc b/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc index 1eff921..83ec4a1 100644 --- a/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc +++ b/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc @@ -415,6 +415,17 @@ } void +GarnetNetwork::resetStats() +{ +for (int i = 0; i < m_routers.size(); i++) { +m_routers[i]->resetStats(); +} +for (int i = 0; i < m_networklinks.size(); i++) { +m_networklinks[i]->resetStats(); +} +} + +void GarnetNetwork::print(ostream& out) const { out << "[GarnetNetwork]"; diff --git a/src/mem/ruby/network/garnet2.0/GarnetNetwork.hh b/src/mem/ruby/network/garnet2.0/GarnetNetwork.hh index 9acbeef..3821dd8 100644 --- a/src/mem/ruby/network/garnet2.0/GarnetNetwork.hh +++ b/src/mem/ruby/network/garnet2.0/GarnetNetwork.hh @@ -101,6 +101,7 @@ // Stats void collateStats(); void regStats(); +void resetStats(); void print(std::ostream& out) const; // increment counters diff --git a/src/mem/ruby/system/RubySystem.cc b/src/mem/ruby/system/RubySystem.cc index 57d4966..2aeff8c 100644 --- a/src/mem/ruby/system/RubySystem.cc +++ b/src/mem/ruby/system/RubySystem.cc @@ -407,6 +407,7 @@ RubySystem::resetStats() { m_start_cycle = curCycle(); +m_network->resetStats(); } bool -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29253 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: Ib84c55200e4a86c6f9190de28498112bd43dde9d Gerrit-Change-Number: 29253 Gerrit-PatchSet: 1 Gerrit-Owner: Polydoros Petrakis Gerrit-MessageType: newchange ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[develop]: arch,base,cpu,sim: Statically allocate debugSymbolTable.
Gabe Black has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/24785 ) Change subject: arch,base,cpu,sim: Statically allocate debugSymbolTable. .. arch,base,cpu,sim: Statically allocate debugSymbolTable. This singleton object is used thruoughout the simulator. There is really no reason not to have it statically allocated, except that whether it was allocated seems to sometimes be used as a signal that something already put symbols in it, specifically in SE mode. To keep that functionality for the moment, this change adds an "empty" method to the SymbolTable class to make it easy to check if the symbol table is empty, or if someone already populated it. Change-Id: Ia93510082d3f9809fc504bc5803254d8c308d572 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24785 Reviewed-by: Giacomo Travaglini Maintainer: Giacomo Travaglini Tested-by: kokoro --- M src/arch/arm/freebsd/fs_workload.cc M src/arch/arm/fs_workload.cc M src/arch/arm/linux/fs_workload.cc M src/arch/x86/faults.cc M src/base/cp_annotate.cc M src/base/loader/symtab.cc M src/base/loader/symtab.hh M src/cpu/base.cc M src/cpu/exetrace.cc M src/mem/abstract_mem.cc M src/sim/kernel_workload.cc M src/sim/process.cc M src/sim/pseudo_inst.cc M src/sim/syscall_emul.hh 14 files changed, 27 insertions(+), 32 deletions(-) Approvals: Giacomo Travaglini: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/arch/arm/freebsd/fs_workload.cc b/src/arch/arm/freebsd/fs_workload.cc index ea99b42..e3660d9 100644 --- a/src/arch/arm/freebsd/fs_workload.cc +++ b/src/arch/arm/freebsd/fs_workload.cc @@ -83,7 +83,7 @@ if (params()->early_kernel_symbols) { kernelObj->loadGlobalSymbols(kernelSymtab, 0, 0, _loadAddrMask); kernelObj->loadGlobalSymbols( -Loader::debugSymbolTable, 0, 0, _loadAddrMask); +&Loader::debugSymbolTable, 0, 0, _loadAddrMask); } // Check if the kernel image has a symbol that tells us it supports diff --git a/src/arch/arm/fs_workload.cc b/src/arch/arm/fs_workload.cc index 09c7bb2..4c654b8 100644 --- a/src/arch/arm/fs_workload.cc +++ b/src/arch/arm/fs_workload.cc @@ -91,7 +91,7 @@ "Can't find a matching boot loader / kernel combination!"); if (bootldr) -bootldr->loadGlobalSymbols(Loader::debugSymbolTable); +bootldr->loadGlobalSymbols(&Loader::debugSymbolTable); } void diff --git a/src/arch/arm/linux/fs_workload.cc b/src/arch/arm/linux/fs_workload.cc index 9ebb117..7f0853f 100644 --- a/src/arch/arm/linux/fs_workload.cc +++ b/src/arch/arm/linux/fs_workload.cc @@ -78,7 +78,7 @@ if (params()->early_kernel_symbols) { kernelObj->loadGlobalSymbols(kernelSymtab, 0, 0, _loadAddrMask); kernelObj->loadGlobalSymbols( -Loader::debugSymbolTable, 0, 0, _loadAddrMask); +&Loader::debugSymbolTable, 0, 0, _loadAddrMask); } // Setup boot data structure diff --git a/src/arch/x86/faults.cc b/src/arch/x86/faults.cc index 98bd107..0754da3 100644 --- a/src/arch/x86/faults.cc +++ b/src/arch/x86/faults.cc @@ -169,7 +169,7 @@ panic("Tried to %s unmapped address %#x.\nPC: %#x, Instr: %s", modeStr, addr, tc->pcState().pc(), inst->disassemble(tc->pcState().pc(), - Loader::debugSymbolTable)); + &Loader::debugSymbolTable)); } } } diff --git a/src/base/cp_annotate.cc b/src/base/cp_annotate.cc index c886e39..159e6e0 100644 --- a/src/base/cp_annotate.cc +++ b/src/base/cp_annotate.cc @@ -163,7 +163,7 @@ Addr junk; char sm[50]; if (!TheISA::inUserMode(tc)) -Loader::debugSymbolTable->findNearestSymbol( +Loader::debugSymbolTable.findNearestSymbol( tc->readIntReg(ReturnAddressReg), st, junk); tc->getVirtProxy().readString(sm, sm_string, 50); @@ -337,7 +337,7 @@ Addr sym_addr = 0; if (!TheISA::inUserMode(tc)) { -Loader::debugSymbolTable->findNearestSymbol(next_pc, sym, sym_addr); +Loader::debugSymbolTable.findNearestSymbol(next_pc, sym, sym_addr); } else { Linux::ThreadInfo ti(tc); string app = ti.curTaskName(); @@ -390,7 +390,7 @@ std::string st; Addr junk; if (!TheISA::inUserMode(tc)) -Loader::debugSymbolTable->findNearestSymbol( +Loader::debugSymbolTable.findNearestSymbol( tc->readIntReg(ReturnAddressReg), st, junk); System *sys = tc->getSystemPtr(); StringWrap name(sys->name()); diff --git a/src/base/loader/symtab.cc b/src/base/loader/symtab.cc index a8e1a15..eaada22 100644 --- a/src/base/loader/symtab.cc +++ b/src/base/loader/symtab.cc @@ -44,7 +44,7 @@ namespace Loader { -SymbolTable *debugSymbolTable = NULL; +SymbolTable debugSymbolTable; void Symbol
[gem5-dev] Change in gem5/gem5[develop]: arch,base,cpu,kern,sim: Encapsulate symbols in a class.
Gabe Black has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/24784 ) Change subject: arch,base,cpu,kern,sim: Encapsulate symbols in a class. .. arch,base,cpu,kern,sim: Encapsulate symbols in a class. The SymbolTable class had been tracking symbols as two independent pieces, a name and an address, and acted as a way to translate between them. Symbols can be more complex than that, and so this change encapsulates the information associated with a symbol in a new class. As a step towards simplifying the API for reading symbols from a binary, this change also adds a "binding" field to that class so that global, local and weak symbols can all go in the same table and be differentiated later as needed. That should unify the current API which has a method for each symbol type. While the innards of SymbolTable were being reworked, this change also makes that class more STL like by adding iterators, and begin and end methods. These iterate over a new vector which holds all the symbols. The address and name keyed maps now hold indexes into that vector instead of the other half of the symbol. Change-Id: I8084f86fd737f697ec041bac86a635a315fd1194 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/24784 Reviewed-by: Giacomo Travaglini Maintainer: Gabe Black Tested-by: kokoro --- M src/arch/arm/freebsd/fs_workload.cc M src/arch/arm/insts/static_inst.cc M src/arch/arm/linux/fs_workload.cc M src/arch/arm/stacktrace.cc M src/arch/generic/linux/threadinfo.hh M src/arch/mips/isa/formats/branch.isa M src/arch/power/insts/branch.cc M src/arch/riscv/bare_metal/fs_workload.hh M src/arch/sparc/fs_workload.hh M src/arch/sparc/insts/branch.cc M src/arch/x86/stacktrace.cc M src/base/loader/elf_object.cc M src/base/loader/symtab.cc M src/base/loader/symtab.hh M src/cpu/base.cc M src/cpu/exetrace.cc M src/cpu/profile.cc M src/kern/linux/helpers.cc M src/sim/kernel_workload.hh M src/sim/pseudo_inst.cc M src/sim/workload.hh M src/unittest/nmtest.cc M src/unittest/symtest.cc 23 files changed, 274 insertions(+), 239 deletions(-) Approvals: Giacomo Travaglini: Looks good to me, approved Gabe Black: Looks good to me, approved kokoro: Regressions pass diff --git a/src/arch/arm/freebsd/fs_workload.cc b/src/arch/arm/freebsd/fs_workload.cc index 91a1d89..ea99b42 100644 --- a/src/arch/arm/freebsd/fs_workload.cc +++ b/src/arch/arm/freebsd/fs_workload.cc @@ -88,8 +88,7 @@ // Check if the kernel image has a symbol that tells us it supports // device trees. -Addr addr; -fatal_if(!kernelSymtab->findAddress("fdt_get_range", addr), +fatal_if(kernelSymtab->find("fdt_get_range") == kernelSymtab->end(), "Kernel must have fdt support."); fatal_if(params()->dtb_filename == "", "dtb file is not specified."); diff --git a/src/arch/arm/insts/static_inst.cc b/src/arch/arm/insts/static_inst.cc index 70e5fb9..9c686f6 100644 --- a/src/arch/arm/insts/static_inst.cc +++ b/src/arch/arm/insts/static_inst.cc @@ -393,18 +393,19 @@ ArmStaticInst::printTarget(std::ostream &os, Addr target, const Loader::SymbolTable *symtab) const { -Addr symbolAddr; -std::string symbol; - -if (symtab && symtab->findNearestSymbol(target, symbol, symbolAddr)) { -ccprintf(os, "<%s", symbol); -if (symbolAddr != target) -ccprintf(os, "+%d>", target - symbolAddr); -else -ccprintf(os, ">"); -} else { -ccprintf(os, "%#x", target); +if (symtab) { +auto it = symtab->findNearest(target); +if (it != symtab->end()) { +ccprintf(os, "<%s", it->name); +Addr delta = target - it->address; +if (delta) +ccprintf(os, "+%d>", delta); +else +ccprintf(os, ">"); +return; +} } +ccprintf(os, "%#x", target); } void @@ -477,13 +478,14 @@ const Addr addr, const std::string &suffix) const { -Addr symbolAddr; -std::string symbol; -if (symtab && symtab->findNearestSymbol(addr, symbol, symbolAddr)) { -ccprintf(os, "%s%s", prefix, symbol); -if (symbolAddr != addr) -ccprintf(os, "+%d", addr - symbolAddr); -ccprintf(os, suffix); +if (symtab) { +auto it = symtab->findNearest(addr); +if (it != symtab->end()) { +ccprintf(os, "%s%s", prefix, it->name); +if (it->address != addr) +ccprintf(os, "+%d", addr - it->address); +ccprintf(os, suffix); +} } } diff --git a/src/arch/arm/linux/fs_workload.cc b/src/arch/arm/linux/fs_workload.cc index cc28193..9ebb117 100644 --- a/src/arch/arm/linux/fs_workload.cc +++ b/src/arch/arm/linux/fs_workload.cc @@ -82,11 +82,10 @@ } // Setup boot data structure -Addr addr; /
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc: Tagged API methods in sim/drain.hh
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/27988 ) Change subject: misc: Tagged API methods in sim/drain.hh .. misc: Tagged API methods in sim/drain.hh Change-Id: Id584d0be027048064d5f650ae0f2ea5a7f075a47 Issue-on: https://gem5.atlassian.net/browse/GEM5-172 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27988 Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce Tested-by: kokoro --- A src/doxygen/group_definitions.hh M src/sim/drain.hh 2 files changed, 38 insertions(+), 3 deletions(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/doxygen/group_definitions.hh b/src/doxygen/group_definitions.hh new file mode 100644 index 000..8b3e14c --- /dev/null +++ b/src/doxygen/group_definitions.hh @@ -0,0 +1,5 @@ +/** + * @defgroup api_drain The Drain API. + * + * These methods relate to the "Drainable" interface. + */ diff --git a/src/sim/drain.hh b/src/sim/drain.hh index a775c06..0d74923 100644 --- a/src/sim/drain.hh +++ b/src/sim/drain.hh @@ -65,6 +65,8 @@ * the world through Drainable::getState()) could be used to determine * if all objects have entered the Drained state, the protocol is * actually a bit more elaborate. See Drainable::drain() for details. + * + * @ingroup api_drain */ enum class DrainState { Running, /** Running normally */ @@ -113,11 +115,15 @@ * * @return true if all objects were drained successfully, false if * more simulation is needed. + * + * @ingroup api_drain */ bool tryDrain(); /** * Resume normal simulation in a Drained system. + * + * @ingroup api_drain */ void resume(); @@ -131,18 +137,30 @@ * state since the state isn't stored in checkpoints. This method * performs state fixups on all Drainable objects and the * DrainManager itself. + * + * @ingroup api_drain */ void preCheckpointRestore(); -/** Check if the system is drained */ +/** + * Check if the system is drained + * + * @ingroup api_drain + */ bool isDrained() const { return _state == DrainState::Drained; } -/** Get the simulators global drain state */ +/** + * Get the simulators global drain state + * + * @ingroup api_drain + */ DrainState state() const { return _state; } /** * Notify the DrainManager that a Drainable object has finished * draining. + * + * @ingroup api_drain */ void signalDrainDone(); @@ -246,11 +264,15 @@ * @return DrainState::Drained if the object is drained at this * point in time, DrainState::Draining if it needs further * simulation. + * + * @ingroup api_drain */ virtual DrainState drain() = 0; /** * Resume execution after a successful drain. + * + * @ingroup api_drain */ virtual void drainResume() {}; @@ -261,6 +283,8 @@ * into a state where it is ready to be drained. The method is * safe to call multiple times and there is no need to check that * draining has been requested before calling this method. + * + * @ingroup api_drain */ void signalDrainDone() const { switch (_drainState) { @@ -276,7 +300,11 @@ } public: -/** Return the current drain state of an object. */ +/** + * Return the current drain state of an object. + * + * @ingroup api_drain + */ DrainState drainState() const { return _drainState; } /** @@ -290,6 +318,8 @@ * * This method is only called in the child of the fork. The call * takes place in a drained system. + * + * @ingroup api_drain */ virtual void notifyFork() {}; -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/27988 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: Id584d0be027048064d5f650ae0f2ea5a7f075a47 Gerrit-Change-Number: 27988 Gerrit-PatchSet: 7 Gerrit-Owner: Bobby R. Bruce Gerrit-Reviewer: Alec Roelke Gerrit-Reviewer: Ali Saidi Gerrit-Reviewer: Anthony Gutierrez Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Bradford Beckmann Gerrit-Reviewer: Daniel Carvalho Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Matt Sinclair Gerrit-Reviewer: Matthew Poremba Gerrit-Reviewer: Nikos Nikoleris Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc,sim: Tagged API methods in sim/serialize.hh
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/27989 ) Change subject: misc,sim: Tagged API methods in sim/serialize.hh .. misc,sim: Tagged API methods in sim/serialize.hh Within this some light refactoring has been carried out to avoid accessing member variable directly and removing some unused/unneeded ones from the codebase. Change-Id: I458494f6466628b213816c81f6a8ce42fb91dc3f Issue-on: https://gem5.atlassian.net/browse/GEM5-172 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/27989 Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce Tested-by: kokoro --- M src/dev/storage/disk_image.cc M src/doxygen/group_definitions.hh M src/mem/physical.cc M src/mem/ruby/system/RubySystem.cc M src/sim/serialize.cc M src/sim/serialize.hh 6 files changed, 232 insertions(+), 28 deletions(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/dev/storage/disk_image.cc b/src/dev/storage/disk_image.cc index 1578ea3..319bccf 100644 --- a/src/dev/storage/disk_image.cc +++ b/src/dev/storage/disk_image.cc @@ -444,7 +444,7 @@ { string cowFilename; UNSERIALIZE_SCALAR(cowFilename); -cowFilename = cp.cptDir + "/" + cowFilename; +cowFilename = cp.getCptDir() + "/" + cowFilename; open(cowFilename); } diff --git a/src/doxygen/group_definitions.hh b/src/doxygen/group_definitions.hh index 8b3e14c..e8a1cd9 100644 --- a/src/doxygen/group_definitions.hh +++ b/src/doxygen/group_definitions.hh @@ -3,3 +3,9 @@ * * These methods relate to the "Drainable" interface. */ + +/** + * @defgroup api_serialize The Serialize API. + * + * These methods related to the "Serialize" interface. + */ diff --git a/src/mem/physical.cc b/src/mem/physical.cc index b4246a3..4bd812c 100644 --- a/src/mem/physical.cc +++ b/src/mem/physical.cc @@ -401,7 +401,7 @@ string filename; UNSERIALIZE_SCALAR(filename); -string filepath = cp.cptDir + "/" + filename; +string filepath = cp.getCptDir() + "/" + filename; // mmap memoryfile gzFile compressed_mem = gzopen(filepath.c_str(), "rb"); diff --git a/src/mem/ruby/system/RubySystem.cc b/src/mem/ruby/system/RubySystem.cc index 57d4966..c28f880 100644 --- a/src/mem/ruby/system/RubySystem.cc +++ b/src/mem/ruby/system/RubySystem.cc @@ -331,7 +331,7 @@ UNSERIALIZE_SCALAR(cache_trace_file); UNSERIALIZE_SCALAR(cache_trace_size); -cache_trace_file = cp.cptDir + "/" + cache_trace_file; +cache_trace_file = cp.getCptDir() + "/" + cache_trace_file; readCompressedTrace(cache_trace_file, uncompressed_trace, cache_trace_size); diff --git a/src/sim/serialize.cc b/src/sim/serialize.cc index 6a71dd2..4bb2ab5 100644 --- a/src/sim/serialize.cc +++ b/src/sim/serialize.cc @@ -66,9 +66,9 @@ using namespace std; -int Serializable::ckptMaxCount = 0; -int Serializable::ckptCount = 0; -int Serializable::ckptPrevCount = -1; +int ckptMaxCount = 0; +int ckptCount = 0; +int ckptPrevCount = -1; std::stack Serializable::path; / @@ -266,9 +266,9 @@ } CheckpointIn::CheckpointIn(const string &cpt_dir, SimObjectResolver &resolver) -: db(new IniFile), objNameResolver(resolver), cptDir(setDir(cpt_dir)) +: db(new IniFile), objNameResolver(resolver), _cptDir(setDir(cpt_dir)) { -string filename = cptDir + "/" + CheckpointIn::baseFilename; +string filename = getCptDir() + "/" + CheckpointIn::baseFilename; if (!db->load(filename)) { fatal("Can't load checkpoint file '%s'\n", filename); } diff --git a/src/sim/serialize.hh b/src/sim/serialize.hh index 92b14a9..1f31dd2 100644 --- a/src/sim/serialize.hh +++ b/src/sim/serialize.hh @@ -72,11 +72,17 @@ SimObjectResolver &objNameResolver; +const std::string _cptDir; + public: CheckpointIn(const std::string &cpt_dir, SimObjectResolver &resolver); ~CheckpointIn(); -const std::string cptDir; +/** + * @ingroup api_serialize + * @{ + */ +const std::string getCptDir() { return _cptDir; } bool find(const std::string §ion, const std::string &entry, std::string &value); @@ -84,9 +90,9 @@ bool findObj(const std::string §ion, const std::string &entry, SimObject *&value); - bool entryExists(const std::string §ion, const std::string &entry); bool sectionExists(const std::string §ion); +/** @}*/ //end of api_checkout group // The following static functions have to do with checkpoint // creation rather than restoration. This class makes a handy @@ -99,16 +105,28 @@ // current directory we're serializing into. static std::string currentDirectory; + public: -// Set the current directory. This function takes care of -// inserting curTick() if there's a '%d' in the argument, and -// appe
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc,sim: Tagged API methods and variables in eventq.hh
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/28388 ) Change subject: misc,sim: Tagged API methods and variables in eventq.hh .. misc,sim: Tagged API methods and variables in eventq.hh Change-Id: I76018d4aa08f9bd42a152ec7e0222a0385d3b895 Issue-on: https://gem5.atlassian.net/browse/GEM5-172 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28388 Tested-by: kokoro Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce --- M src/doxygen/group_definitions.hh M src/sim/eventq.hh 2 files changed, 276 insertions(+), 50 deletions(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/doxygen/group_definitions.hh b/src/doxygen/group_definitions.hh index e8a1cd9..c0599bb 100644 --- a/src/doxygen/group_definitions.hh +++ b/src/doxygen/group_definitions.hh @@ -9,3 +9,9 @@ * * These methods related to the "Serialize" interface. */ + +/** + * @defgroup api_eventq The Event Queue API. + * + * These methods relate to the event queue interface. + */ diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index 2976e11..522b394 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -111,6 +111,9 @@ static const FlagsType InitMask = 0xffc0; // mask for init bits public: +/** + * @ingroup api_eventq + */ typedef int8_t Priority; /// Event priorities, to provide tie-breakers for events scheduled @@ -118,61 +121,117 @@ /// priority; these values are used to control events that need to /// be ordered within a cycle. -/// Minimum priority +/** + * Minimum priority + * + * @ingroup api_eventq + */ static const Priority Minimum_Pri = SCHAR_MIN; -/// If we enable tracing on a particular cycle, do that as the -/// very first thing so we don't miss any of the events on -/// that cycle (even if we enter the debugger). +/** + * If we enable tracing on a particular cycle, do that as the + * very first thing so we don't miss any of the events on + * that cycle (even if we enter the debugger). + * + * @ingroup api_eventq + */ static const Priority Debug_Enable_Pri = -101; -/// Breakpoints should happen before anything else (except -/// enabling trace output), so we don't miss any action when -/// debugging. +/** + * Breakpoints should happen before anything else (except + * enabling trace output), so we don't miss any action when + * debugging. + * + * @ingroup api_eventq + */ static const Priority Debug_Break_Pri = -100; -/// CPU switches schedule the new CPU's tick event for the -/// same cycle (after unscheduling the old CPU's tick event). -/// The switch needs to come before any tick events to make -/// sure we don't tick both CPUs in the same cycle. +/** + * CPU switches schedule the new CPU's tick event for the + * same cycle (after unscheduling the old CPU's tick event). + * The switch needs to come before any tick events to make + * sure we don't tick both CPUs in the same cycle. + * + * @ingroup api_eventq + */ static const Priority CPU_Switch_Pri = -31; -/// For some reason "delayed" inter-cluster writebacks are -/// scheduled before regular writebacks (which have default -/// priority). Steve? +/** + * For some reason "delayed" inter-cluster writebacks are + * scheduled before regular writebacks (which have default + * priority). Steve? + * + * @ingroup api_eventq + */ static const Priority Delayed_Writeback_Pri = -1; -/// Default is zero for historical reasons. +/** + * Default is zero for historical reasons. + * + * @ingroup api_eventq + */ static const Priority Default_Pri = 0; -/// DVFS update event leads to stats dump therefore given a lower priority -/// to ensure all relevant states have been updated +/** + * DVFS update event leads to stats dump therefore given a lower priority + * to ensure all relevant states have been updated + * + * @ingroup api_eventq + */ static const Priority DVFS_Update_Pri = 31; -/// Serailization needs to occur before tick events also, so -/// that a serialize/unserialize is identical to an on-line -/// CPU switch. +/** + * Serailization needs to occur before tick events also, so + * that a serialize/unserialize is identical to an on-line + * CPU switch. + * + * @ingroup api_eventq + */ static const Priority Serialize_Pri = 32; -/// CPU ticks must come after other associated CPU events -/// (such as writebacks). +/** + * CPU ticks must come after other associated CPU events +
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc,sim: Tagged API methods in sim/simobject.hh
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/28407 ) Change subject: misc,sim: Tagged API methods in sim/simobject.hh .. misc,sim: Tagged API methods in sim/simobject.hh Change-Id: I1d4f5b67828e3bef64d781831cec4b25d6fcb6b9 Issue-on: https://gem5.atlassian.net/browse/GEM5-172 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28407 Tested-by: kokoro Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce --- M src/doxygen/group_definitions.hh M src/sim/sim_object.hh 2 files changed, 46 insertions(+), 2 deletions(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/doxygen/group_definitions.hh b/src/doxygen/group_definitions.hh index e6e39b7..40069e0 100644 --- a/src/doxygen/group_definitions.hh +++ b/src/doxygen/group_definitions.hh @@ -21,3 +21,9 @@ * * These methods relate to the statistics I/O interface. */ + +/** + * @defgroup api_simobject The SimObject API. + * + * These methods relate to the SimObject interface. + */ diff --git a/src/sim/sim_object.hh b/src/sim/sim_object.hh index 05c1b3e..de89fbf 100644 --- a/src/sim/sim_object.hh +++ b/src/sim/sim_object.hh @@ -103,17 +103,29 @@ ProbeManager *probeManager; protected: -/** Cached copy of the object parameters. */ +/** + * Cached copy of the object parameters. + * + * @ingroup api_simobject + */ const SimObjectParams *_params; public: typedef SimObjectParams Params; +/** + * @ingroup api_simobject + * @{ + */ const Params *params() const { return _params; } SimObject(const Params *_params); +/** @}*/ //end of the api_simobject group virtual ~SimObject(); public: +/** + * @ingroup api_simobject + */ virtual const std::string name() const { return params()->name; } /** @@ -121,6 +133,8 @@ * all ports are connected. Initializations that are independent * of unserialization but rely on a fully instantiated and * connected SimObject graph should be done here. + * + * @ingroup api_simobject */ virtual void init(); @@ -134,6 +148,8 @@ * found. * * @param cp Checkpoint to restore the state from. + * + * @ingroup api_serialize */ virtual void loadState(CheckpointIn &cp); @@ -141,21 +157,29 @@ * initState() is called on each SimObject when *not* restoring * from a checkpoint. This provides a hook for state * initializations that are only required for a "cold start". + * + * @ingroup api_serialize */ virtual void initState(); /** * Register probe points for this object. + * + * @ingroup api_simobject */ virtual void regProbePoints(); /** * Register probe listeners for this object. + * + * @ingroup api_simobject */ virtual void regProbeListeners(); /** * Get the probe manager for this object. + * + * @ingroup api_simobject */ ProbeManager *getProbeManager(); @@ -167,6 +191,8 @@ * @param idx Index in the case of a VectorPort * * @return A reference to the given port + * + * @ingroup api_simobject */ virtual Port &getPort(const std::string &if_name, PortID idx=InvalidPortID); @@ -176,6 +202,8 @@ * All state is initialized (including unserialized state, if any, * such as the curTick() value), so this is the appropriate place to * schedule initial event(s) for objects that need them. + * + * @ingroup api_simobject */ virtual void startup(); @@ -192,6 +220,8 @@ * written all its dirty data back to memory. This method is * typically used to prepare a system with caches for * checkpointing. + * + * @ingroup api_simobject */ virtual void memWriteback() {}; @@ -205,6 +235,8 @@ * * @warn This does not cause any dirty state to be written * back to memory. + * + * @ingroup api_simobject */ virtual void memInvalidate() {}; @@ -226,6 +258,8 @@ * Find the SimObject with the given name and return a pointer to * it. Primarily used for interactive debugging. Argument is * char* rather than std::string to make it callable from gdb. + * + * @ingroup api_simobject */ static SimObject *find(const char *name); }; @@ -241,7 +275,11 @@ public: virtual ~SimObjectResolver() { } -// Find a SimObject given a full path name +/** + * Find a SimObject given a full path name + * + * @ingroup api_serialize + */ virtual SimObject *resolveSimObject(const std::string &name) = 0; }; -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/28407 To unsubscribe, or for help writing mail filt
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc,base,stats: Tagged API methods in base/stats/group.hh
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/28390 ) Change subject: misc,base,stats: Tagged API methods in base/stats/group.hh .. misc,base,stats: Tagged API methods in base/stats/group.hh Change-Id: I61693884d719025f3b1f385793c7a71de0937e79 Issue-on: https://gem5.atlassian.net/browse/GEM5-172 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28390 Tested-by: kokoro Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce --- M src/base/stats/group.hh M src/doxygen/group_definitions.hh 2 files changed, 27 insertions(+), 0 deletions(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/base/stats/group.hh b/src/base/stats/group.hh index 4fd9e79..985bf61 100644 --- a/src/base/stats/group.hh +++ b/src/base/stats/group.hh @@ -83,9 +83,14 @@ class Group { public: +/** + * @ingroup api_stats + * @{ + */ Group() = delete; Group(const Group &) = delete; Group &operator=(const Group &) = delete; +/** @}*/ //end of api_stats /** * Construct a new statistics group. @@ -104,6 +109,8 @@ * @param parent Parent group to associate this object to. * @param name Name of this group, can be NULL to merge this group * with the parent group. + * + * @ingroup api_stats */ Group(Group *parent, const char *name = nullptr); @@ -117,11 +124,15 @@ * description. Stat names and descriptions should typically be * set from the constructor usingo from the constructor using the * ADD_STAT macro. + * + * @ingroup api_stats */ virtual void regStats(); /** * Callback to reset stats. + * + * @ingroup api_stats */ virtual void resetStats(); @@ -129,22 +140,30 @@ * Callback before stats are dumped. This can be overridden by * objects that need to perform calculations in addition to the * capabiltiies implemented in the stat framework. + * + * @ingroup api_stats */ virtual void preDumpStats(); /** * Register a stat with this group. This method is normally called * automatically when a stat is instantiated. + * + * @ingroup api_stats */ void addStat(Stats::Info *info); /** * Get all child groups associated with this object. + * + * @ingroup api_stats */ const std::map &getStatGroups() const; /** * Get all stats associated with this object. + * + * @ingroup api_stats */ const std::vector &getStats() const; @@ -154,6 +173,8 @@ * This method may only be called from a Group constructor or from * regStats. It's typically only called explicitly from Python * when setting up the SimObject hierarchy. + * + * @ingroup api_stats */ void addStatGroup(const char *name, Group *block); diff --git a/src/doxygen/group_definitions.hh b/src/doxygen/group_definitions.hh index c0599bb..e6e39b7 100644 --- a/src/doxygen/group_definitions.hh +++ b/src/doxygen/group_definitions.hh @@ -15,3 +15,9 @@ * * These methods relate to the event queue interface. */ + +/** + * @defgroup api_stats The Stats API. + * + * These methods relate to the statistics I/O interface. + */ -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/28390 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: I61693884d719025f3b1f385793c7a71de0937e79 Gerrit-Change-Number: 28390 Gerrit-PatchSet: 6 Gerrit-Owner: Bobby R. Bruce Gerrit-Reviewer: Alec Roelke Gerrit-Reviewer: Ali Saidi Gerrit-Reviewer: Andreas Sandberg Gerrit-Reviewer: Anthony Gutierrez Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Bradford Beckmann Gerrit-Reviewer: Daniel Carvalho Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Matt Sinclair Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc: Added src/doxygen/html to .gitignore
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/28389 ) Change subject: misc: Added src/doxygen/html to .gitignore .. misc: Added src/doxygen/html to .gitignore Previously `src/doxygen` was ignored, but `src/doxygen` contains some "source" for creating the doxygen html. Therefore this .gitignore entry has been removed and replaced with one that only ignores the generated `src/doxygen/html`. Change-Id: I5add9fe839a00ad9d216d2082beda637ad0ea87d Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28389 Tested-by: kokoro Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce --- M .gitignore 1 file changed, 1 insertion(+), 1 deletion(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/.gitignore b/.gitignore index b851a23..a195609 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,7 @@ .*.swp .*.swo m5out -/src/doxygen +/src/doxygen/html /ext/dramsim2/DRAMSim2 /ext/mcpat/regression/*/*.out /util/m5/*.o -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/28389 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: I5add9fe839a00ad9d216d2082beda637ad0ea87d Gerrit-Change-Number: 28389 Gerrit-PatchSet: 6 Gerrit-Owner: Bobby R. Bruce Gerrit-Reviewer: Alec Roelke Gerrit-Reviewer: Ali Saidi Gerrit-Reviewer: Anthony Gutierrez Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Bradford Beckmann Gerrit-Reviewer: Daniel Carvalho Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Giacomo Travaglini Gerrit-Reviewer: Jared Barocsi Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Matt Sinclair Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Re: Debugging application inside gem5 (m5term)
Hi Gaurav, As Ciro mentioned, I think what you need is add-symbol-file (to keep the existing symbol). To make my life easier, I would still rely on lx-symbols to load symbols for kernel modules as they are loaded, and only use add-symbol-file for the binary you want to debug along with the driver (possibly even after you are done loading kernel modules). Best, On Tue, May 19, 2020 at 1:25 PM Ciro Santilli via gem5-dev < gem5-dev@gem5.org> wrote: > For the gdbserver approach, I haven't found a guest to host networking > possibility in gem5 yet: > > https://stackoverflow.com/questions/48941494/how-to-do-port-forwarding-from-guest-to-host-and-vice-versa-in-gem5 > but maybe I missed it. > > For a non-gdbserver approach, have you tried add-symbol-file as > mentioned at > https://stackoverflow.com/questions/26271901/is-it-possible-to-use-gdb-and-qemu-to-debug-linux-user-space-programs-and-kernel/46636070#46636070 > and > https://stackoverflow.com/questions/20380204/how-to-load-multiple-symbol-files-in-gdb > > BTW, have a look into lx-symbols to help with kernel modules in case > you are not using it yet: > > https://cirosantilli.com/linux-kernel-module-cheat/#gdb-step-debug-kernel-module > > BTW2 Dealing with userland apps perfectly from gem5 GDB stub > (including multiple userland programs with same address) asked at: > > https://stackoverflow.com/questions/9561546/thread-aware-gdb-for-the-linux-kernel > > On Tue, May 19, 2020 at 8:03 PM GAURAV JAIN via gem5-dev > wrote: > > > > Hi All, > > > > We are trying to debug an application running inside gem5 full system. > > > > After running gem5, we are using 'gdb vmlinux' to attach to it so as to > be able to debug the kernel modules. > > > > One approach we tried was using the 'file' command to load the symbol > table for the application and continue. But then that approach would > overwrite the existing symbol table (for the kernel modules) with that of > the application which is not what we desire. > > > > The second approach we tried was running 'gdbserver' inside m5term and > then connect to it through a gdb instance running on the host. > > > > We did - 'gdbserver localhost:1234 ./app', which seemed to be successful > in launching a process and Listening on the port 1234. > > > > On the host, we did - 'gdb ./app' and from inside it, 'target remote > :1234'. > > Doing this did not work and we got the generic error - 'remote:1234 > connection timed out' > > > > It'd be great if someone could provide pointers on how can we debug an > application running in gem5 full system and if either of the two approaches > mentioned above would work. > > > > Thanks, > > Gaurav > > ___ > > gem5-dev mailing list -- gem5-dev@gem5.org > > To unsubscribe send an email to gem5-dev-le...@gem5.org > > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s > ___ > gem5-dev mailing list -- gem5-dev@gem5.org > To unsubscribe send an email to gem5-dev-le...@gem5.org > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s > -- Pouya Fotouhi PhD Candidate Department of Electrical and Computer Engineering University of California, Davis ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc: Fixed GCN3_X86/HSAIL_X86 compilation errors
Matthew Poremba has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/29305 ) Change subject: misc: Fixed GCN3_X86/HSAIL_X86 compilation errors .. misc: Fixed GCN3_X86/HSAIL_X86 compilation errors GCN3_X86 and HSAIL_X86 fail to compile. This patch enables compilation. Issue-on: https://gem5.atlassian.net/browse/GEM5-556 https://gem5.atlassian.net/browse/GEM5-561 Change-Id: Ib0882dcc013ac097d0d5ab9c0ca401ea00391616 --- M src/dev/hsa/hsa_device.cc M src/dev/hsa/hsa_driver.cc M src/dev/hsa/hsa_packet_processor.cc 3 files changed, 5 insertions(+), 31 deletions(-) diff --git a/src/dev/hsa/hsa_device.cc b/src/dev/hsa/hsa_device.cc index c23639e..78ec8e8 100644 --- a/src/dev/hsa/hsa_device.cc +++ b/src/dev/hsa/hsa_device.cc @@ -102,9 +102,8 @@ * grab context zero. */ auto process = sys->getThreadContext(0)->getProcessPtr(); -auto mem_state = process->memState; -if (!mem_state->translate(vaddr, paddr)) { +if (!process->pTable->translate(vaddr, paddr)) { fatal("failed translation: vaddr 0x%x\n", vaddr); } } diff --git a/src/dev/hsa/hsa_driver.cc b/src/dev/hsa/hsa_driver.cc index 08e1db3..3f5c8eb 100644 --- a/src/dev/hsa/hsa_driver.cc +++ b/src/dev/hsa/hsa_driver.cc @@ -87,32 +87,8 @@ * Now map this virtual address to our PIO doorbell interface * in the page tables (non-cacheable). */ -mem_state->map(start, device->hsaPacketProc().pioAddr, length, false); +process->pTable->map(start, device->hsaPacketProc().pioAddr, + length, false); DPRINTF(HSADriver, "amdkfd doorbell mapped to %xp\n", start); return start; } - -/** - * Forward relevant parameters to packet processor; queueID - * is used to link doorbell. The queueIDs are not re-used - * in current implementation, and we allocate only one page - * (4096 bytes) for doorbells, so check if this queue ID can - * be mapped into that page. - */ -void -HSADriver::allocateQueue(const SETranslatingPortProxy &mem_proxy, Addr ioc_buf) -{ -TypedBufferArg args(ioc_buf); -args.copyIn(mem_proxy); - -if (VOID_PTR_ADD32(0, queueId) >= (void*)0x1000) { -fatal("%s: Exceeded maximum number of HSA queues allowed\n", name()); -} - -args->queue_id = queueId++; -auto &hsa_pp = device->hsaPacketProc(); -hsa_pp.setDeviceQueueDesc(args->read_pointer_address, - args->ring_base_address, args->queue_id, - args->ring_size); -args.copyOut(mem_proxy); -} diff --git a/src/dev/hsa/hsa_packet_processor.cc b/src/dev/hsa/hsa_packet_processor.cc index ad59de5..5fa0fbe 100644 --- a/src/dev/hsa/hsa_packet_processor.cc +++ b/src/dev/hsa/hsa_packet_processor.cc @@ -127,7 +127,7 @@ "%s: write of size %d to reg-offset %d (0x%x)\n", __FUNCTION__, pkt->getSize(), daddr, daddr); -uint32_t doorbell_reg = pkt->get(); +uint32_t doorbell_reg = pkt->getLE(); DPRINTF(HSAPacketProcessor, "%s: write data 0x%x to offset %d (0x%x)\n", @@ -152,9 +152,8 @@ // new extensions, it will likely be wrong to just arbitrarily grab context // zero. auto process = sys->getThreadContext(0)->getProcessPtr(); -auto mem_state = process->memState; -if (!mem_state->translate(vaddr, paddr)) +if (!process->pTable->translate(vaddr, paddr)) fatal("failed translation: vaddr 0x%x\n", vaddr); } -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29305 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: Ib0882dcc013ac097d0d5ab9c0ca401ea00391616 Gerrit-Change-Number: 29305 Gerrit-PatchSet: 1 Gerrit-Owner: Matthew Poremba Gerrit-MessageType: newchange ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Re: Debugging application inside gem5 (m5term)
For the gdbserver approach, I haven't found a guest to host networking possibility in gem5 yet: https://stackoverflow.com/questions/48941494/how-to-do-port-forwarding-from-guest-to-host-and-vice-versa-in-gem5 but maybe I missed it. For a non-gdbserver approach, have you tried add-symbol-file as mentioned at https://stackoverflow.com/questions/26271901/is-it-possible-to-use-gdb-and-qemu-to-debug-linux-user-space-programs-and-kernel/46636070#46636070 and https://stackoverflow.com/questions/20380204/how-to-load-multiple-symbol-files-in-gdb BTW, have a look into lx-symbols to help with kernel modules in case you are not using it yet: https://cirosantilli.com/linux-kernel-module-cheat/#gdb-step-debug-kernel-module BTW2 Dealing with userland apps perfectly from gem5 GDB stub (including multiple userland programs with same address) asked at: https://stackoverflow.com/questions/9561546/thread-aware-gdb-for-the-linux-kernel On Tue, May 19, 2020 at 8:03 PM GAURAV JAIN via gem5-dev wrote: > > Hi All, > > We are trying to debug an application running inside gem5 full system. > > After running gem5, we are using 'gdb vmlinux' to attach to it so as to be > able to debug the kernel modules. > > One approach we tried was using the 'file' command to load the symbol table > for the application and continue. But then that approach would overwrite the > existing symbol table (for the kernel modules) with that of the application > which is not what we desire. > > The second approach we tried was running 'gdbserver' inside m5term and then > connect to it through a gdb instance running on the host. > > We did - 'gdbserver localhost:1234 ./app', which seemed to be successful in > launching a process and Listening on the port 1234. > > On the host, we did - 'gdb ./app' and from inside it, 'target remote :1234'. > Doing this did not work and we got the generic error - 'remote:1234 > connection timed out' > > It'd be great if someone could provide pointers on how can we debug an > application running in gem5 full system and if either of the two approaches > mentioned above would work. > > Thanks, > Gaurav > ___ > gem5-dev mailing list -- gem5-dev@gem5.org > To unsubscribe send an email to gem5-dev-le...@gem5.org > %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Debugging application inside gem5 (m5term)
Hi All, We are trying to debug an application running inside gem5 full system. After running gem5, we are using 'gdb vmlinux' to attach to it so as to be able to debug the kernel modules. One approach we tried was using the 'file' command to load the symbol table for the application and continue. But then that approach would overwrite the existing symbol table (for the kernel modules) with that of the application which is not what we desire. The second approach we tried was running 'gdbserver' inside m5term and then connect to it through a gdb instance running on the host. We did - 'gdbserver localhost:1234 ./app', which seemed to be successful in launching a process and Listening on the port 1234. On the host, we did - 'gdb ./app' and from inside it, 'target remote :1234'. Doing this did not work and we got the generic error - 'remote:1234 connection timed out' It'd be great if someone could provide pointers on how can we debug an application running in gem5 full system and if either of the two approaches mentioned above would work. Thanks, Gaurav ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: mem-ruby: Added M5_VAR_USED to m_id in OutputUnit
Bobby R. Bruce has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/29304 ) Change subject: mem-ruby: Added M5_VAR_USED to m_id in OutputUnit .. mem-ruby: Added M5_VAR_USED to m_id in OutputUnit Clang 9 throws an error that 'm_id' is unused (encountered when compiling X86.fast). M5_VAR_USED has been added to avoid this error. Change-Id: I722edd1429a074ff484b5ebbdc431af0089561b5 Issue-on: https://gem5.atlassian.net/browse/GEM5-560 --- M src/mem/ruby/network/garnet2.0/OutputUnit.hh 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mem/ruby/network/garnet2.0/OutputUnit.hh b/src/mem/ruby/network/garnet2.0/OutputUnit.hh index c720888..d1009d2 100644 --- a/src/mem/ruby/network/garnet2.0/OutputUnit.hh +++ b/src/mem/ruby/network/garnet2.0/OutputUnit.hh @@ -35,6 +35,7 @@ #include #include +#include "base/compiler.hh" #include "mem/ruby/common/Consumer.hh" #include "mem/ruby/network/garnet2.0/CommonTypes.hh" #include "mem/ruby/network/garnet2.0/NetworkLink.hh" @@ -91,7 +92,7 @@ private: Router *m_router; -int m_id; +int M5_VAR_USED m_id; PortDirection m_direction; int m_vc_per_vnet; NetworkLink *m_out_link; -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29304 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: I722edd1429a074ff484b5ebbdc431af0089561b5 Gerrit-Change-Number: 29304 Gerrit-PatchSet: 1 Gerrit-Owner: Bobby R. Bruce Gerrit-MessageType: newchange ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[develop]: cpu: fixed unused variable on fast binary
Andrea Mondelli has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/29252 ) Change subject: cpu: fixed unused variable on fast binary .. cpu: fixed unused variable on fast binary When gem5.fast is compiled, an error on a variable used only for debug purposes is raised: build/X86/cpu/o3/mem_dep_unit_impl.hh:262:19: error: unused variable 'producing_store' [-Werror=unused-variable] for (auto producing_store : producing_stores) This patch remove the variable when *.fast is used. Change-Id: Ib77c26073db39644e3525bc16edcb7d3bc871d76 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29252 Tested-by: kokoro Reviewed-by: Bobby R. Bruce Maintainer: Bobby R. Bruce --- M src/cpu/o3/mem_dep_unit_impl.hh 1 file changed, 1 insertion(+), 1 deletion(-) Approvals: Bobby R. Bruce: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/src/cpu/o3/mem_dep_unit_impl.hh b/src/cpu/o3/mem_dep_unit_impl.hh index 9a50341..d1eac29 100644 --- a/src/cpu/o3/mem_dep_unit_impl.hh +++ b/src/cpu/o3/mem_dep_unit_impl.hh @@ -259,7 +259,7 @@ } else { // Otherwise make the instruction dependent on the store/barrier. DPRINTF(MemDepUnit, "Adding to dependency list\n"); -for (auto producing_store : producing_stores) +for (auto M5_VAR_USED producing_store : producing_stores) DPRINTF(MemDepUnit, "\tinst PC %s is dependent on [sn:%lli].\n", inst->pcState(), producing_store); -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29252 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: Ib77c26073db39644e3525bc16edcb7d3bc871d76 Gerrit-Change-Number: 29252 Gerrit-PatchSet: 4 Gerrit-Owner: Andrea Mondelli Gerrit-Reviewer: Andrea Mondelli Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: scons: Revert LTO and partial linking for gcc >=8.1
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/29272 ) Change subject: scons: Revert LTO and partial linking for gcc >=8.1 .. scons: Revert LTO and partial linking for gcc >=8.1 This reverts commit f41abbdb5cf5c67233f3d730885d43517969afda, "scons: Enable LTO and partial linking with gcc >= 8.1." LTO and partial linking does not work on GCC 9.3 on Ubuntu 20.04 when compiling gem5.fast. This error was exposed via the following command: ``` docker run -u $UID:$GID --volume $(pwd):/gem5 -w /gem5 --rm \ gcr.io/gem5-test/ubuntu-20.04_all-dependencies:latest scons \ build/MIPS/gem5.fast ``` The following error was received: ``` usr/bin/ld: cannot find lib.fo.partial.lto.o: No such file or directory /usr/bin/ld: error: could not unlink output file collect2: error: ld returned 1 exit status scons: *** [build/MIPS/mem/ruby/system/lib.fo.partial] Error 1 ``` Issue-on: https://gem5.atlassian.net/browse/GEM5-555 https://gem5.atlassian.net/browse/GEM5-557 Change-Id: Id9e7fc81aec9f94524acc92c05aabdf96bd284cd Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29272 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- M SConstruct 1 file changed, 11 insertions(+), 6 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved kokoro: Regressions pass diff --git a/SConstruct b/SConstruct index 0a18c3d..82fad3b 100755 --- a/SConstruct +++ b/SConstruct @@ -404,22 +404,27 @@ main['GCC_VERSION'] = gcc_version -if compareVersions(gcc_version, '4.9') >= 0 and \ - compareVersions(gcc_version, '8.1') < 0: +if compareVersions(gcc_version, '4.9') >= 0: # Incremental linking with LTO is currently broken in gcc versions -# 4.9 to 8.1. +# 4.9 and above. A version where everything works completely hasn't +# yet been identified. # # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67548 -# +main['BROKEN_INCREMENTAL_LTO'] = True +if compareVersions(gcc_version, '6.0') >= 0: # gcc versions 6.0 and greater accept an -flinker-output flag which # selects what type of output the linker should generate. This is # necessary for incremental lto to work, but is also broken in -# versions of gcc up to 8.1. +# current versions of gcc. It may not be necessary in future +# versions. We add it here since it might be, and as a reminder that +# it exists. It's excluded if lto is being forced. # # https://gcc.gnu.org/gcc-6/changes.html # https://gcc.gnu.org/ml/gcc-patches/2015-11/msg03161.html # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69866 -main['BROKEN_INCREMENTAL_LTO'] = True +if not GetOption('force_lto'): +main.Append(PSHLINKFLAGS='-flinker-output=rel') +main.Append(PLINKFLAGS='-flinker-output=rel') disable_lto = GetOption('no_lto') if not disable_lto and main.get('BROKEN_INCREMENTAL_LTO', False) and \ -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29272 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: Id9e7fc81aec9f94524acc92c05aabdf96bd284cd Gerrit-Change-Number: 29272 Gerrit-PatchSet: 4 Gerrit-Owner: Bobby R. Bruce Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Earl Ou Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Hoa Nguyen Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s
[gem5-dev] Change in gem5/gem5[release-staging-v20.0.0.0]: misc,sim: Fixed std::array bracket compiler error
Bobby R. Bruce has submitted this change. ( https://gem5-review.googlesource.com/c/public/gem5/+/29294 ) Change subject: misc,sim: Fixed std::array bracket compiler error .. misc,sim: Fixed std::array bracket compiler error For versions of Clang before 6.0, Clang returns an error if and std::array initialization is not encompassed in two sets of encompassing braces. This is a known compiler bug: https://bugs.llvm.org/show_bug.cgi?id=21629. As we support Clang 3.9 onwards, we are required to include these redundant braces to ensure compilation. They do not produce any ill-effects when using later clang compilers or with any GCC compiler gem5 presently supports. Change-Id: Ia512a9b9f583b1cfa28f9fc4c24f6e202e46b4cb Issue-on: https://gem5.atlassian.net/browse/GEM5-563 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29294 Reviewed-by: Pouya Fotouhi Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power Tested-by: kokoro --- M src/arch/arm/semihosting.cc M src/sim/pseudo_inst.cc 2 files changed, 5 insertions(+), 5 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, approved; Looks good to me, approved Pouya Fotouhi: Looks good to me, approved kokoro: Regressions pass diff --git a/src/arch/arm/semihosting.cc b/src/arch/arm/semihosting.cc index 7711a86..a7a4d2a 100644 --- a/src/arch/arm/semihosting.cc +++ b/src/arch/arm/semihosting.cc @@ -581,10 +581,10 @@ uint64_t heap_base, heap_limit, stack_base, stack_limit; gatherHeapInfo(tc, false, heap_base, heap_limit, stack_base, stack_limit); -std::array block = { +std::array block = {{ (uint32_t)heap_base, (uint32_t)heap_limit, (uint32_t)stack_base, (uint32_t)stack_limit -}; +}}; portProxy(tc).write(block_addr, block, ArmISA::byteOrder(tc)); return retOK(0); @@ -596,9 +596,9 @@ uint64_t heap_base, heap_limit, stack_base, stack_limit; gatherHeapInfo(tc, true, heap_base, heap_limit, stack_base, stack_limit); -std::array block = { +std::array block = {{ heap_base, heap_limit, stack_base, stack_limit -}; +}}; portProxy(tc).write(block_addr, block, ArmISA::byteOrder(tc)); return retOK(0); diff --git a/src/sim/pseudo_inst.cc b/src/sim/pseudo_inst.cc index b11a5a4..203afc0 100644 --- a/src/sim/pseudo_inst.cc +++ b/src/sim/pseudo_inst.cc @@ -285,7 +285,7 @@ char key[len]; memset(key, '\0', len); -std::array key_regs = { key_str1, key_str2 }; +std::array key_regs = {{ key_str1, key_str2 }}; key_regs = letoh(key_regs); memcpy(key, key_regs.data(), sizeof(key_regs)); -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/29294 To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings Gerrit-Project: public/gem5 Gerrit-Branch: release-staging-v20.0.0.0 Gerrit-Change-Id: Ia512a9b9f583b1cfa28f9fc4c24f6e202e46b4cb Gerrit-Change-Number: 29294 Gerrit-PatchSet: 3 Gerrit-Owner: Bobby R. Bruce Gerrit-Reviewer: Bobby R. Bruce Gerrit-Reviewer: Gabe Black Gerrit-Reviewer: Hoa Nguyen Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Jason Lowe-Power Gerrit-Reviewer: Pouya Fotouhi Gerrit-Reviewer: kokoro Gerrit-MessageType: merged ___ gem5-dev mailing list -- gem5-dev@gem5.org To unsubscribe send an email to gem5-dev-le...@gem5.org %(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s