Ryan Gambord has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/17609

Change subject: general: Updating Params usage in SimObjects
......................................................................

general: Updating Params usage in SimObjects

Applying standard params() method and usage

Change-Id: Ic3664b37f55d0c0f0de95975190794a266c58350
---
M src/arch/alpha/linux/system.hh
M src/arch/alpha/system.hh
M src/arch/arm/pmu.cc
M src/arch/arm/pmu.hh
M src/arch/mips/system.hh
M src/arch/riscv/system.hh
M src/arch/sparc/system.hh
M src/arch/x86/pagetable_walker.hh
M src/arch/x86/system.hh
M src/cpu/base.hh
M src/dev/arm/base_gic.cc
M src/dev/arm/base_gic.hh
M src/dev/arm/generic_timer.cc
M src/dev/arm/generic_timer.hh
M src/dev/net/sinic.hh
M src/dev/storage/ide_ctrl.hh
M src/mem/comm_monitor.hh
M src/mem/mem_checker_monitor.hh
M src/mem/qos/policy_pf.hh
M src/mem/ruby/network/BasicLink.hh
M src/mem/ruby/network/BasicRouter.hh
M src/mem/ruby/network/fault_model/FaultModel.hh
M src/mem/ruby/network/garnet2.0/GarnetLink.hh
M src/mem/ruby/network/garnet2.0/GarnetNetwork.cc
M src/mem/ruby/network/garnet2.0/NetworkLink.hh
M src/mem/ruby/network/simple/SimpleLink.hh
M src/mem/ruby/network/simple/SimpleNetwork.cc
M src/mem/ruby/slicc_interface/AbstractController.hh
M src/sim/clocked_object.hh
M src/sim/system.hh
30 files changed, 142 insertions(+), 94 deletions(-)



diff --git a/src/arch/alpha/linux/system.hh b/src/arch/alpha/linux/system.hh
index 4f030c9..e56f85f 100644
--- a/src/arch/alpha/linux/system.hh
+++ b/src/arch/alpha/linux/system.hh
@@ -144,7 +144,9 @@

     void setDelayLoop(ThreadContext *tc);

-    const Params *params() const { return (const Params *)_params; }
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
 };

 #endif // __ARCH_ALPHA_LINUX_SYSTEM_HH__
diff --git a/src/arch/alpha/system.hh b/src/arch/alpha/system.hh
index d0be461..c52f9da 100644
--- a/src/arch/alpha/system.hh
+++ b/src/arch/alpha/system.hh
@@ -97,7 +97,9 @@
      */
     FSTranslatingPortProxy virtProxy;

-    const Params *params() const { return (const Params *)_params; }
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+


/** Setup all the function events. Must be done after init() for Alpha since
@@ -128,4 +130,3 @@
 };

 #endif // __ARCH_ALPHA_SYSTEM_HH__
-
diff --git a/src/arch/arm/pmu.cc b/src/arch/arm/pmu.cc
index 62353cf..b784549 100644
--- a/src/arch/arm/pmu.cc
+++ b/src/arch/arm/pmu.cc
@@ -97,10 +97,10 @@
 PMU::setThreadContext(ThreadContext *tc)
 {
DPRINTF(PMUVerbose, "Assigning PMU to ContextID %i.\n", tc->contextId());
-    auto pmu_params = static_cast<const ArmPMUParams *>(params());
+    const Params *p = params();

-    if (pmu_params->interrupt)
-        interrupt = pmu_params->interrupt->get(tc);
+    if (p->interrupt)
+        interrupt = p->interrupt->get(tc);
 }

 void
diff --git a/src/arch/arm/pmu.hh b/src/arch/arm/pmu.hh
index f5f52133..969a493 100644
--- a/src/arch/arm/pmu.hh
+++ b/src/arch/arm/pmu.hh
@@ -96,7 +96,12 @@
  */
 class PMU : public SimObject, public ArmISA::BaseISADevice {
   public:
-    PMU(const ArmPMUParams *p);
+    typedef ArmPMUParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
+    PMU(const Params *p);
     ~PMU();

     void addEventProbe(unsigned int id, SimObject *obj, const char *name);
diff --git a/src/arch/mips/system.hh b/src/arch/mips/system.hh
index 6b74ac1..222aa7a 100644
--- a/src/arch/mips/system.hh
+++ b/src/arch/mips/system.hh
@@ -49,6 +49,10 @@
 {
   public:
     typedef MipsSystemParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
     MipsSystem(Params *p);
     ~MipsSystem();

@@ -76,8 +80,6 @@
 #endif

   protected:
-    const Params *params() const { return (const Params *)_params; }
-
     /** Add a function-based event to the console code. */
     template <class T>
     T *
@@ -91,4 +93,3 @@
 };

 #endif
-
diff --git a/src/arch/riscv/system.hh b/src/arch/riscv/system.hh
index 85b8d6a..916e164 100644
--- a/src/arch/riscv/system.hh
+++ b/src/arch/riscv/system.hh
@@ -89,7 +89,9 @@
 #endif

   protected:
-    const Params *params() const { return (const Params *)_params; }
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+

     /** Add a function-based event to the console code. */
     template <class T>
@@ -104,4 +106,3 @@
 };

 #endif
-
diff --git a/src/arch/sparc/system.hh b/src/arch/sparc/system.hh
index ac877a9..1615d4d 100644
--- a/src/arch/sparc/system.hh
+++ b/src/arch/sparc/system.hh
@@ -97,7 +97,9 @@
     Tick sysTick;

   protected:
-    const Params *params() const { return (const Params *)_params; }
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+

     /** Add a function-based event to reset binary. */
     template <class T>
@@ -132,4 +134,3 @@
 };

 #endif
-
diff --git a/src/arch/x86/pagetable_walker.hh b/src/arch/x86/pagetable_walker.hh
index c1f4ed2..0371099 100644
--- a/src/arch/x86/pagetable_walker.hh
+++ b/src/arch/x86/pagetable_walker.hh
@@ -194,11 +194,8 @@

         typedef X86PagetableWalkerParams Params;

-        const Params *
-        params() const
-        {
-            return static_cast<const Params *>(_params);
-        }
+        const Params * params() const
+        { return dynamic_cast<const Params *>(_params); }

         Walker(const Params *params) :
             MemObject(params), port(name() + ".port", this),
diff --git a/src/arch/x86/system.hh b/src/arch/x86/system.hh
index c9e90a4..8f61420 100644
--- a/src/arch/x86/system.hh
+++ b/src/arch/x86/system.hh
@@ -78,7 +78,12 @@
 {
   public:
     typedef X86SystemParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
     X86System(Params *p);
+
     ~X86System();

 /**
@@ -101,8 +106,6 @@
     void writeOutMPTable(Addr fp,
             Addr &fpSize, Addr &tableSize, Addr table = 0);

-    const Params *params() const { return (const Params *)_params; }
-
     virtual Addr fixFuncEventAddr(Addr addr)
     {
         // XXX This may eventually have to do something useful.
@@ -111,4 +114,3 @@
 };

 #endif
-
diff --git a/src/cpu/base.hh b/src/cpu/base.hh
index 9075d4b..357aa76 100644
--- a/src/cpu/base.hh
+++ b/src/cpu/base.hh
@@ -51,24 +51,26 @@
 // Before we do anything else, check if this build is the NULL ISA,
 // and if so stop here
 #include "config/the_isa.hh"
+
 #if THE_ISA == NULL_ISA
 #include "arch/null/cpu_dummy.hh"
+
 #else
 #include "arch/interrupts.hh"
 #include "arch/isa_traits.hh"
 #include "arch/microcode_rom.hh"
 #include "base/statistics.hh"
+#include "debug/Mwait.hh"
 #include "mem/mem_object.hh"
+#include "params/BaseCPU.hh"
 #include "sim/eventq.hh"
 #include "sim/full_system.hh"
 #include "sim/insttracer.hh"
 #include "sim/probe/pmu.hh"
 #include "sim/probe/probe.hh"
 #include "sim/system.hh"
-#include "debug/Mwait.hh"

 class BaseCPU;
-struct BaseCPUParams;
 class CheckerCPU;
 class ThreadContext;

@@ -296,7 +298,7 @@
   public:
     typedef BaseCPUParams Params;
     const Params *params() const
-    { return reinterpret_cast<const Params *>(_params); }
+    { return dynamic_cast<const Params *>(_params); }
     BaseCPU(Params *params, bool is_checker = false);
     virtual ~BaseCPU();

diff --git a/src/dev/arm/base_gic.cc b/src/dev/arm/base_gic.cc
index a23c123..a008d34 100644
--- a/src/dev/arm/base_gic.cc
+++ b/src/dev/arm/base_gic.cc
@@ -36,15 +36,10 @@
  *
  * Authors: Andreas Sandberg
  */
-
 #include "dev/arm/base_gic.hh"

 #include "cpu/thread_context.hh"
 #include "dev/arm/realview.hh"
-#include "params/ArmInterruptPin.hh"
-#include "params/ArmPPI.hh"
-#include "params/ArmSPI.hh"
-#include "params/BaseGic.hh"

 BaseGic::BaseGic(const Params *p)
         : PioDevice(p),
@@ -71,18 +66,12 @@
     getSystem()->setGIC(this);
 }

-const BaseGic::Params *
-BaseGic::params() const
-{
-    return dynamic_cast<const Params *>(_params);
-}
-
-ArmInterruptPinGen::ArmInterruptPinGen(const ArmInterruptPinParams *p)
+ArmInterruptPinGen::ArmInterruptPinGen(const Params *p)
   : SimObject(p)
 {
 }

-ArmSPIGen::ArmSPIGen(const ArmSPIParams *p)
+ArmSPIGen::ArmSPIGen(const Params *p)
     : ArmInterruptPinGen(p), pin(new ArmSPI(p->platform, p->num))
 {
 }
@@ -93,7 +82,7 @@
     return pin;
 }

-ArmPPIGen::ArmPPIGen(const ArmPPIParams *p)
+ArmPPIGen::ArmPPIGen(const Params *p)
     : ArmInterruptPinGen(p)
 {
 }
@@ -111,7 +100,7 @@
         return pin_it->second;
     } else {
         // Generate PPI Pin
-        auto p = static_cast<const ArmPPIParams *>(_params);
+        const Params *p = params();
         ArmPPI *pin = new ArmPPI(p->platform, tc, p->num);

         pins.insert({cid, pin});
diff --git a/src/dev/arm/base_gic.hh b/src/dev/arm/base_gic.hh
index 7c0cc0e..029083a 100644
--- a/src/dev/arm/base_gic.hh
+++ b/src/dev/arm/base_gic.hh
@@ -48,6 +48,10 @@

 #include "arch/arm/system.hh"
 #include "dev/io_device.hh"
+#include "params/ArmInterruptPin.hh"
+#include "params/ArmPPI.hh"
+#include "params/ArmSPI.hh"
+#include "params/BaseGic.hh"

 class Platform;
 class RealView;
@@ -56,22 +60,18 @@
 class ArmSPI;
 class ArmPPI;

-struct ArmInterruptPinParams;
-struct ArmPPIParams;
-struct ArmSPIParams;
-struct BaseGicParams;
-
 class BaseGic :  public PioDevice
 {
   public:
     typedef BaseGicParams Params;

+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
     BaseGic(const Params *p);
     virtual ~BaseGic();
     void init() override;

-    const Params * params() const;
-
     /**
      * Post an interrupt from a device that is connected to the GIC.
      *
@@ -133,7 +133,12 @@
 class ArmInterruptPinGen : public SimObject
 {
   public:
-    ArmInterruptPinGen(const ArmInterruptPinParams *p);
+    typedef ArmInterruptPinParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
+    ArmInterruptPinGen(const Params *p);

     virtual ArmInterruptPin* get(ThreadContext *tc = nullptr) = 0;
 };
@@ -146,7 +151,12 @@
 class ArmSPIGen : public ArmInterruptPinGen
 {
   public:
-    ArmSPIGen(const ArmSPIParams *p);
+    typedef ArmSPIParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
+    ArmSPIGen(const Params *p);

     ArmInterruptPin* get(ThreadContext *tc = nullptr) override;
   protected:
@@ -161,7 +171,12 @@
 class ArmPPIGen : public ArmInterruptPinGen
 {
   public:
-    ArmPPIGen(const ArmPPIParams *p);
+    typedef ArmPPIParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
+    ArmPPIGen(const Params *p);

     ArmInterruptPin* get(ThreadContext* tc = nullptr) override;
   protected:
diff --git a/src/dev/arm/generic_timer.cc b/src/dev/arm/generic_timer.cc
index 396926f..ee01c19 100644
--- a/src/dev/arm/generic_timer.cc
+++ b/src/dev/arm/generic_timer.cc
@@ -219,7 +219,7 @@
     updateCounter();
 }

-GenericTimer::GenericTimer(GenericTimerParams *p)
+GenericTimer::GenericTimer(Params *p)
     : ClockedObject(p),
       system(*p->system)
 {
@@ -227,12 +227,6 @@
     system.setGenericTimer(this);
 }

-const GenericTimerParams *
-GenericTimer::params() const
-{
-    return dynamic_cast<const GenericTimerParams *>(_params);
-}
-
 void
 GenericTimer::serialize(CheckpointOut &cp) const
 {
@@ -293,7 +287,7 @@
 GenericTimer::createTimers(unsigned cpus)
 {
     assert(timers.size() < cpus);
-    auto p = static_cast<const GenericTimerParams *>(_params);
+    const Params *p = params();

     const unsigned old_cpu_count(timers.size());
     timers.resize(cpus);
@@ -522,7 +516,7 @@
     return value;
 }

-GenericTimerMem::GenericTimerMem(GenericTimerMemParams *p)
+GenericTimerMem::GenericTimerMem(Params *p)
     : PioDevice(p),
       ctrlRange(RangeSize(p->base, TheISA::PageBytes)),
timerRange(RangeSize(p->base + TheISA::PageBytes, TheISA::PageBytes)),
diff --git a/src/dev/arm/generic_timer.hh b/src/dev/arm/generic_timer.hh
index acd8b39..d079f1a 100644
--- a/src/dev/arm/generic_timer.hh
+++ b/src/dev/arm/generic_timer.hh
@@ -45,6 +45,8 @@
 #include "arch/arm/system.hh"
 #include "base/bitunion.hh"
 #include "dev/arm/base_gic.hh"
+#include "params/GenericTimer.hh"
+#include "params/GenericTimerMem.hh"
 #include "sim/core.hh"
 #include "sim/sim_object.hh"

@@ -54,8 +56,6 @@
 /// ARM, Issue C, Chapter 17).

 class Checkpoint;
-class GenericTimerParams;
-class GenericTimerMemParams;

 /// Global system counter.  It is shared by the architected timers.
 /// @todo: implement memory-mapped controls
@@ -215,9 +215,12 @@
 class GenericTimer : public ClockedObject
 {
   public:
-    const GenericTimerParams * params() const;
+    typedef GenericTimerParams Params;

-    GenericTimer(GenericTimerParams *p);
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
+    GenericTimer(Params *p);

     void serialize(CheckpointOut &cp) const override;
     void unserialize(CheckpointIn &cp) override;
@@ -297,7 +300,12 @@
 class GenericTimerMem : public PioDevice
 {
   public:
-    GenericTimerMem(GenericTimerMemParams *p);
+    typedef GenericTimerMemParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
+    GenericTimerMem(Params *p);

     void serialize(CheckpointOut &cp) const override;
     void unserialize(CheckpointIn &cp) override;
diff --git a/src/dev/net/sinic.hh b/src/dev/net/sinic.hh
index ab79a5f..4344376 100644
--- a/src/dev/net/sinic.hh
+++ b/src/dev/net/sinic.hh
@@ -79,7 +79,10 @@
  */
   public:
     typedef SinicParams Params;
-    const Params *params() const { return (const Params *)_params; }
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
     Base(const Params *p);
 };

diff --git a/src/dev/storage/ide_ctrl.hh b/src/dev/storage/ide_ctrl.hh
index 24d3da0..53aae54 100644
--- a/src/dev/storage/ide_ctrl.hh
+++ b/src/dev/storage/ide_ctrl.hh
@@ -141,7 +141,10 @@

   public:
     typedef IdeControllerParams Params;
-    const Params *params() const { return (const Params *)_params; }
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
     IdeController(Params *p);

     /** See if a disk is selected based on its pointer */
diff --git a/src/mem/comm_monitor.hh b/src/mem/comm_monitor.hh
index 1eea6a5..dd87b70 100644
--- a/src/mem/comm_monitor.hh
+++ b/src/mem/comm_monitor.hh
@@ -69,7 +69,7 @@
     /** Parameters of communication monitor */
     typedef CommMonitorParams Params;
     const Params* params() const
-    { return reinterpret_cast<const Params*>(_params); }
+    { return dynamic_cast<const Params *>(_params); }

     /**
      * Constructor based on the Python params
diff --git a/src/mem/mem_checker_monitor.hh b/src/mem/mem_checker_monitor.hh
index ba15049..21c8590 100644
--- a/src/mem/mem_checker_monitor.hh
+++ b/src/mem/mem_checker_monitor.hh
@@ -58,7 +58,7 @@
     /** Parameters of memchecker monitor */
     typedef MemCheckerMonitorParams Params;
     const Params* params() const
-    { return reinterpret_cast<const Params*>(_params); }
+    { return dynamic_cast<const Params *>(_params); }

     /**
      * Constructor based on the Python params
diff --git a/src/mem/qos/policy_pf.hh b/src/mem/qos/policy_pf.hh
index c741e9c..8a84b18 100644
--- a/src/mem/qos/policy_pf.hh
+++ b/src/mem/qos/policy_pf.hh
@@ -60,7 +60,7 @@
 {
     using Params = QoSPropFairPolicyParams;
     const Params *params() const
-    { return static_cast<const Params *>(_params); }
+    { return dynamic_cast<const Params *>(_params); }

   public:
     PropFairPolicy(const Params*);
diff --git a/src/mem/ruby/network/BasicLink.hh b/src/mem/ruby/network/BasicLink.hh
index 755e5c7..b93f054 100644
--- a/src/mem/ruby/network/BasicLink.hh
+++ b/src/mem/ruby/network/BasicLink.hh
@@ -47,7 +47,9 @@
   public:
     typedef BasicLinkParams Params;
     BasicLink(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+    const Params *params() const
+    { return dynamic_cast<const Params *>(_params); }
+

     void init();

@@ -71,7 +73,9 @@
   public:
     typedef BasicExtLinkParams Params;
     BasicExtLink(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+    const Params *params() const
+    { return dynamic_cast<const Params *>(_params); }
+

     friend class Topology;
 };
@@ -81,7 +85,8 @@
   public:
     typedef BasicIntLinkParams Params;
     BasicIntLink(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+    const Params *params() const
+    { return dynamic_cast<const Params *>(_params); }

     friend class Topology;
 };
diff --git a/src/mem/ruby/network/BasicRouter.hh b/src/mem/ruby/network/BasicRouter.hh
index a74dadb..f920b16 100644
--- a/src/mem/ruby/network/BasicRouter.hh
+++ b/src/mem/ruby/network/BasicRouter.hh
@@ -41,7 +41,10 @@
   public:
     typedef BasicRouterParams Params;
     BasicRouter(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+
+    const Params *params() const
+    { return dynamic_cast<const Params *>(_params); }
+

     void init();

diff --git a/src/mem/ruby/network/fault_model/FaultModel.hh b/src/mem/ruby/network/fault_model/FaultModel.hh
index 6c68c7b..90dc154 100644
--- a/src/mem/ruby/network/fault_model/FaultModel.hh
+++ b/src/mem/ruby/network/fault_model/FaultModel.hh
@@ -56,8 +56,12 @@
 {
   public:
     typedef FaultModelParams Params;
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+
     FaultModel(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+

/************************************************************************/ /********** THE FAULT TYPES SUPPORTED BY THE FAULT MODEL ***************/
@@ -87,7 +91,8 @@
         conf_record_buff_per_vc,
         conf_record_vcs,
         conf_record_first_fault_type,
- conf_record_last_fault_type = conf_record_first_fault_type + number_of_fault_types - 1,
+        conf_record_last_fault_type =
+            conf_record_first_fault_type + number_of_fault_types - 1,
         fields_per_conf_record
     };

diff --git a/src/mem/ruby/network/garnet2.0/GarnetLink.hh b/src/mem/ruby/network/garnet2.0/GarnetLink.hh
index 55164b6..469f2c4 100644
--- a/src/mem/ruby/network/garnet2.0/GarnetLink.hh
+++ b/src/mem/ruby/network/garnet2.0/GarnetLink.hh
@@ -49,6 +49,8 @@
   public:
     typedef GarnetIntLinkParams Params;
     GarnetIntLink(const Params *p);
+    const Params *params() const
+      { return dynamic_cast<const Params *>(_params); }

     void init();

@@ -74,6 +76,8 @@
   public:
     typedef GarnetExtLinkParams Params;
     GarnetExtLink(const Params *p);
+    const Params *params() const
+      { return dynamic_cast<const Params *>(_params); }

     void init();

diff --git a/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc b/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc
index 5fa7644..b3f6954 100644
--- a/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc
+++ b/src/mem/ruby/network/garnet2.0/GarnetNetwork.cc
@@ -82,7 +82,7 @@
     // record the routers
     for (vector<BasicRouter*>::const_iterator i =  p->routers.begin();
          i != p->routers.end(); ++i) {
-        Router* router = safe_cast<Router*>(*i);
+        Router* router = dynamic_cast<Router*>(*i);
         m_routers.push_back(router);

         // initialize the router's network pointers
@@ -92,7 +92,7 @@
     // record the network interfaces
     for (vector<ClockedObject*>::const_iterator i = p->netifs.begin();
          i != p->netifs.end(); ++i) {
-        NetworkInterface *ni = safe_cast<NetworkInterface *>(*i);
+        NetworkInterface *ni = dynamic_cast<NetworkInterface *>(*i);
         m_nis.push_back(ni);
         ni->init_net_ptr(this);
     }
@@ -129,7 +129,7 @@
     if (isFaultModelEnabled()) {
         for (vector<Router*>::const_iterator i= m_routers.begin();
              i != m_routers.end(); ++i) {
-            Router* router = safe_cast<Router*>(*i);
+            Router* router = dynamic_cast<Router*>(*i);
             int router_id M5_VAR_USED =
                 fault_model->declare_router(router->get_num_inports(),
                                             router->get_num_outports(),
@@ -164,7 +164,7 @@
 {
     assert(src < m_nodes);

-    GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
+    GarnetExtLink* garnet_link = dynamic_cast<GarnetExtLink*>(link);

     // GarnetExtLink is bi-directional
     NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_In];
@@ -193,7 +193,7 @@
     assert(src < m_routers.size());
     assert(m_routers[src] != NULL);

-    GarnetExtLink* garnet_link = safe_cast<GarnetExtLink*>(link);
+    GarnetExtLink* garnet_link = dynamic_cast<GarnetExtLink*>(link);

     // GarnetExtLink is bi-directional
NetworkLink* net_link = garnet_link->m_network_links[LinkDirection_Out];
@@ -221,7 +221,7 @@
                                 PortDirection src_outport_dirn,
                                 PortDirection dst_inport_dirn)
 {
-    GarnetIntLink* garnet_link = safe_cast<GarnetIntLink*>(link);
+    GarnetIntLink* garnet_link = dynamic_cast<GarnetIntLink*>(link);

     // GarnetIntLink is unidirectional
     NetworkLink* net_link = garnet_link->m_network_link;
diff --git a/src/mem/ruby/network/garnet2.0/NetworkLink.hh b/src/mem/ruby/network/garnet2.0/NetworkLink.hh
index 98fb7b9..76c7bf7 100644
--- a/src/mem/ruby/network/garnet2.0/NetworkLink.hh
+++ b/src/mem/ruby/network/garnet2.0/NetworkLink.hh
@@ -72,7 +72,7 @@
     uint32_t functionalWrite(Packet *);
     void resetStats();

-  private:
+  protected:
     const int m_id;
     link_type m_type;
     const Cycles m_latency;
diff --git a/src/mem/ruby/network/simple/SimpleLink.hh b/src/mem/ruby/network/simple/SimpleLink.hh
index 3ca2356..2970019 100644
--- a/src/mem/ruby/network/simple/SimpleLink.hh
+++ b/src/mem/ruby/network/simple/SimpleLink.hh
@@ -42,7 +42,8 @@
   public:
     typedef SimpleExtLinkParams Params;
     SimpleExtLink(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+    const Params *params() const
+      { return dynamic_cast<const Params *>(_params); }

     friend class Topology;
     void print(std::ostream& out) const;
@@ -63,7 +64,8 @@
   public:
     typedef SimpleIntLinkParams Params;
     SimpleIntLink(const Params *p);
-    const Params *params() const { return (const Params *)_params; }
+    const Params *params() const
+      { return dynamic_cast<const Params *>(_params); }

     friend class Topology;
     void print(std::ostream& out) const;
diff --git a/src/mem/ruby/network/simple/SimpleNetwork.cc b/src/mem/ruby/network/simple/SimpleNetwork.cc
index 56f948f..3360a35 100644
--- a/src/mem/ruby/network/simple/SimpleNetwork.cc
+++ b/src/mem/ruby/network/simple/SimpleNetwork.cc
@@ -51,7 +51,7 @@
     // record the routers
     for (vector<BasicRouter*>::const_iterator i = p->routers.begin();
          i != p->routers.end(); ++i) {
-        Switch* s = safe_cast<Switch*>(*i);
+        Switch* s = dynamic_cast<Switch*>(*i);
         m_switches.push_back(s);
         s->init_net_ptr(this);
     }
@@ -86,7 +86,7 @@
     assert(src < m_switches.size());
     assert(m_switches[src] != NULL);

-    SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link);
+    SimpleExtLink *simple_link = dynamic_cast<SimpleExtLink*>(link);

     m_switches[src]->addOutPort(m_fromNetQueues[dest], routing_table_entry,
                                 simple_link->m_latency,
@@ -121,7 +121,7 @@
     }

     // Connect it to the two switches
-    SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link);
+    SimpleIntLink *simple_link = dynamic_cast<SimpleIntLink*>(link);

     m_switches[dest]->addInPort(queues);
     m_switches[src]->addOutPort(queues, routing_table_entry,
diff --git a/src/mem/ruby/slicc_interface/AbstractController.hh b/src/mem/ruby/slicc_interface/AbstractController.hh
index 5e39a28..cd77697 100644
--- a/src/mem/ruby/slicc_interface/AbstractController.hh
+++ b/src/mem/ruby/slicc_interface/AbstractController.hh
@@ -74,9 +74,13 @@
 {
   public:
     typedef RubyControllerParams Params;
+
     AbstractController(const Params *p);
+
     void init();
-    const Params *params() const { return (const Params *)_params; }
+
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }

     NodeID getVersion() const { return m_machineID.getNum(); }
     MachineType getType() const { return m_machineID.getType(); }
diff --git a/src/sim/clocked_object.hh b/src/sim/clocked_object.hh
index b89e1ce..c26c14c 100644
--- a/src/sim/clocked_object.hh
+++ b/src/sim/clocked_object.hh
@@ -53,8 +53,8 @@
 #include "base/intmath.hh"
 #include "enums/PwrState.hh"
 #include "params/ClockedObject.hh"
-#include "sim/core.hh"
 #include "sim/clock_domain.hh"
+#include "sim/core.hh"
 #include "sim/sim_object.hh"

 /**
@@ -240,7 +240,7 @@
     /** Parameters of ClockedObject */
     typedef ClockedObjectParams Params;
     const Params* params() const
-    { return reinterpret_cast<const Params*>(_params); }
+    { return dynamic_cast<const Params *>(_params); }

     void serialize(CheckpointOut &cp) const override;
     void unserialize(CheckpointIn &cp) override;
diff --git a/src/sim/system.hh b/src/sim/system.hh
index 69448d3..1888613 100644
--- a/src/sim/system.hh
+++ b/src/sim/system.hh
@@ -553,19 +553,20 @@
     std::vector<BaseRemoteGDB *> remoteGDB;
     bool breakpoint();

-  public:
-    typedef SystemParams Params;
-
   protected:
     Params *_params;

   public:
+    typedef SystemParams Params;
+
     System(Params *p);
     ~System();

     void initState() override;

-    const Params *params() const { return (const Params *)_params; }
+    const Params * params() const
+    { return dynamic_cast<const Params *>(_params); }
+

   public:


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/17609
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ic3664b37f55d0c0f0de95975190794a266c58350
Gerrit-Change-Number: 17609
Gerrit-PatchSet: 1
Gerrit-Owner: Ryan Gambord <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to