[gem5-dev] Build failed in Jenkins: nightly #320

2021-05-23 Thread jenkins-no-reply--- via gem5-dev
See 

Changes:


--
[...truncated 491.25 KB...]
[ RUN  ] TrieTestData.TwoOverlappingEntries
[   OK ] TrieTestData.TwoOverlappingEntries (0 ms)
build/NULL/base/types.test.prof 
--gtest_output=xml:build/NULL/unittests.prof/base/types.test.xml
[ RUN  ] TrieTestData.TwoOverlappingEntriesReversed
[   OK ] TrieTestData.TwoOverlappingEntriesReversed (0 ms)
[ RUN  ] TrieTestData.TwoIndependentEntries
[   OK ] TrieTestData.TwoIndependentEntries (0 ms)
[ RUN  ] TrieTestData.TwoEntries
[   OK ] TrieTestData.TwoEntries (0 ms)
[ RUN  ] TrieTestData.RemovingEntries
[   OK ] TrieTestData.RemovingEntries (0 ms)
[--] 7 tests from TrieTestData (0 ms total)

[--] Global test environment tear-down
[==] 7 tests from 1 test suite ran. (0 ms total)
[  PASSED  ] 7 tests.
[   OK ] LoggingDeathTest.ExitHelper (141 ms)
[ RUN  ] LoggingDeathTest.WarnLoggerExitHelper
build/NULL/base/uncontended_mutex.test.prof 
--gtest_output=xml:build/NULL/unittests.prof/base/uncontended_mutex.test.xml
Running main() from build/googletest/googletest/src/gtest_main.cc
[==] Running 19 tests from 3 test suites.
[--] Global test environment set-up.
[--] 10 tests from CyclesTest
[ RUN  ] CyclesTest.NoCycles
[   OK ] CyclesTest.NoCycles (0 ms)
[ RUN  ] CyclesTest.PrefixIncrement
[   OK ] CyclesTest.PrefixIncrement (0 ms)
[ RUN  ] CyclesTest.PrefixDecrement
[   OK ] CyclesTest.PrefixDecrement (0 ms)
[ RUN  ] CyclesTest.InPlaceAddition
[   OK ] CyclesTest.InPlaceAddition (0 ms)
[ RUN  ] CyclesTest.GreaterThanLessThan
[   OK ] CyclesTest.GreaterThanLessThan (0 ms)
[ RUN  ] CyclesTest.AddCycles
[   OK ] CyclesTest.AddCycles (0 ms)
[ RUN  ] CyclesTest.SubtractCycles
[   OK ] CyclesTest.SubtractCycles (0 ms)
[ RUN  ] CyclesTest.ShiftRight
[   OK ] CyclesTest.ShiftRight (0 ms)
[ RUN  ] CyclesTest.ShiftLeft
[   OK ] CyclesTest.ShiftLeft (0 ms)
[ RUN  ] CyclesTest.OutStream
[   OK ] CyclesTest.OutStream (0 ms)
[--] 10 tests from CyclesTest (0 ms total)

[--] 5 tests from MicroPCTest
[ RUN  ] MicroPCTest.CheckMicroPCRomBit
[   OK ] MicroPCTest.CheckMicroPCRomBit (0 ms)
[ RUN  ] MicroPCTest.RomMicroPCTest
[   OK ] MicroPCTest.RomMicroPCTest (0 ms)
[ RUN  ] MicroPCTest.NormalMicroPCTest
[   OK ] MicroPCTest.NormalMicroPCTest (0 ms)
[ RUN  ] MicroPCTest.IsRomMicroPCTest
[   OK ] MicroPCTest.IsRomMicroPCTest (0 ms)
[ RUN  ] MicroPCTest.IsNotRomMicroPCTest
[   OK ] MicroPCTest.IsNotRomMicroPCTest (0 ms)
[--] 5 tests from MicroPCTest (0 ms total)

[--] 4 tests from TypesTest
[ RUN  ] TypesTest.FloatToBits32
[   OK ] TypesTest.FloatToBits32 (0 ms)
[ RUN  ] TypesTest.floatToBits64
[   OK ] TypesTest.floatToBits64 (0 ms)
[ RUN  ] TypesTest.floatsToBitsDoubleInput
[   OK ] TypesTest.floatsToBitsDoubleInput (0 ms)
[ RUN  ] TypesTest.floatsToBitsFloatInput
[   OK ] TypesTest.floatsToBitsFloatInput (0 ms)
[--] 4 tests from TypesTest (0 ms total)

[--] Global test environment tear-down
[==] 19 tests from 3 test suites ran. (0 ms total)
[  PASSED  ] 19 tests.
Running main() from build/googletest/googletest/src/gtest_main.cc
[==] Running 2 tests from 1 test suite.
[--] Global test environment set-up.
[--] 2 tests from UncontendedMutex
[ RUN  ] UncontendedMutex.Lock
build/NULL/sim/byteswap.test.prof 
--gtest_output=xml:build/NULL/unittests.prof/sim/byteswap.test.xml
Running main() from build/googletest/googletest/src/gtest_main.cc
[==] Running 8 tests from 1 test suite.
[--] Global test environment set-up.
[--] 8 tests from ByteswapTest
[ RUN  ] ByteswapTest.swap_byte64
[   OK ] ByteswapTest.swap_byte64 (0 ms)
[ RUN  ] ByteswapTest.swap_byte32
[   OK ] ByteswapTest.swap_byte32 (0 ms)
[ RUN  ] ByteswapTest.swap_byte16
[   OK ] ByteswapTest.swap_byte16 (0 ms)
[ RUN  ] ByteswapTest.swap_byte
[   OK ] ByteswapTest.swap_byte (0 ms)
[ RUN  ] ByteswapTest.htog
[   OK ] ByteswapTest.htog (0 ms)
[ RUN  ] ByteswapTest.gtoh
[   OK ] ByteswapTest.gtoh (0 ms)
[ RUN  ] ByteswapTest.betole
[   OK ] ByteswapTest.betole (0 ms)
[ RUN  ] ByteswapTest.letobe
[   OK ] ByteswapTest.letobe (0 ms)
[--] 8 tests from ByteswapTest (0 ms total)

[--] Global test environment tear-down
[==] 8 tests from 1 test suite ran. (0 ms total)
[  PASSED  ] 8 tests.
build/NULL/sim/guest_abi.test.prof 
--gtest_output=xml:build/NULL/unittests.prof/sim/guest_abi.test.xml
Running main() from build/googletest/googletest/src/gtest_main.cc
[==] Running 7 tests from 1 test suite.
[--] Global test environment set-up.
[--] 7 tests from GuestABI
[ RUN  ] 

[gem5-dev] Change in gem5/gem5[develop]: misc: Stop using getVirtProxy.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45907 )



Change subject: misc: Stop using getVirtProxy.
..

misc: Stop using getVirtProxy.

The proxies are not used on the critical path, and it's usually implicit
whether they should be the FS or SE version.

Ideally in the future we won't need to worry about which version we need
to use, but the differences haven't quite been abstracted away, and
occasionally we need to decide between the two.

Change-Id: Idb363d6ddc681f7c1ad5e7aba69865f40aa30dc8
---
M src/arch/arm/aapcs32.hh
M src/arch/arm/freebsd/se_workload.cc
M src/arch/arm/linux/process.cc
M src/arch/arm/linux/se_workload.cc
M src/arch/arm/semihosting.cc
M src/arch/arm/tracers/tarmac_parser.cc
M src/arch/generic/linux/threadinfo.hh
M src/arch/sparc/linux/syscalls.cc
M src/arch/sparc/se_workload.cc
M src/arch/x86/linux/se_workload.cc
M src/arch/x86/linux/syscalls.cc
M src/base/remote_gdb.cc
M src/gpu-compute/gpu_command_processor.cc
M src/gpu-compute/gpu_compute_driver.cc
M src/kern/linux/helpers.cc
M src/kern/linux/printk.cc
M src/sim/process.cc
M src/sim/pseudo_inst.cc
M src/sim/syscall_emul.cc
M src/sim/syscall_emul.hh
20 files changed, 209 insertions(+), 139 deletions(-)



diff --git a/src/arch/arm/aapcs32.hh b/src/arch/arm/aapcs32.hh
index e1bd505..eed7519 100644
--- a/src/arch/arm/aapcs32.hh
+++ b/src/arch/arm/aapcs32.hh
@@ -38,6 +38,9 @@
 #include "base/intmath.hh"
 #include "cpu/thread_context.hh"
 #include "mem/port_proxy.hh"
+#include "mem/se_translating_port_proxy.hh"
+#include "mem/translating_port_proxy.hh"
+#include "sim/full_system.hh"
 #include "sim/guest_abi.hh"
 #include "sim/proxy_ptr.hh"

@@ -339,7 +342,9 @@
 }

 if (bytes) {
-tc->getVirtProxy().readBlob(state.nsaa, buf, bytes);
+(FullSystem ? TranslatingPortProxy(tc) :
+SETranslatingPortProxy(tc)).readBlob(
+state.nsaa, buf, bytes);

 state.stackUsed = true;
 state.nsaa += roundUp(bytes, 4);
diff --git a/src/arch/arm/freebsd/se_workload.cc  
b/src/arch/arm/freebsd/se_workload.cc

index 5e52485..a75f1dd 100644
--- a/src/arch/arm/freebsd/se_workload.cc
+++ b/src/arch/arm/freebsd/se_workload.cc
@@ -42,6 +42,7 @@
 #include "base/loader/object_file.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
+#include "mem/se_translating_port_proxy.hh"
 #include "sim/syscall_emul.hh"

 namespace
@@ -91,18 +92,20 @@
 {
 uint64_t ret;

+SETranslatingPortProxy proxy(tc);
+
 BufferArg buf(namep, sizeof(size_t));
 BufferArg buf2(oldp, sizeof(size_t));
 BufferArg buf3(oldlenp, sizeof(size_t));
 BufferArg buf4(newp, sizeof(size_t));

-buf.copyIn(tc->getVirtProxy());
-buf2.copyIn(tc->getVirtProxy());
-buf3.copyIn(tc->getVirtProxy());
+buf.copyIn(proxy);
+buf2.copyIn(proxy);
+buf3.copyIn(proxy);

 void *hnewp = NULL;
 if (newp) {
-buf4.copyIn(tc->getVirtProxy());
+buf4.copyIn(proxy);
 hnewp = (void *)buf4.bufferPtr();
 }

@@ -112,11 +115,11 @@

 ret = sysctl((int *)hnamep, nameLen, holdp, holdlenp, hnewp, newlen);

-buf.copyOut(tc->getVirtProxy());
-buf2.copyOut(tc->getVirtProxy());
-buf3.copyOut(tc->getVirtProxy());
+buf.copyOut(proxy);
+buf2.copyOut(proxy);
+buf3.copyOut(proxy);
 if (newp)
-buf4.copyOut(tc->getVirtProxy());
+buf4.copyOut(proxy);

 return (ret);
 }
diff --git a/src/arch/arm/linux/process.cc b/src/arch/arm/linux/process.cc
index 8b20e59..505484e 100644
--- a/src/arch/arm/linux/process.cc
+++ b/src/arch/arm/linux/process.cc
@@ -49,6 +49,7 @@
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
 #include "kern/linux/linux.hh"
+#include "mem/se_translating_port_proxy.hh"
 #include "sim/process.hh"
 #include "sim/syscall_desc.hh"
 #include "sim/syscall_emul.hh"
@@ -69,10 +70,10 @@
 0xff, 0xff, 0xff, 0xef  // swi -1
 };

+SETranslatingPortProxy proxy(tc);
 // Fill this page with swi -1 so we'll no if we land in it somewhere.
 for (Addr addr = 0; addr < PageBytes; addr += sizeof(swiNeg1)) {
-tc->getVirtProxy().writeBlob(commPage + addr,
- swiNeg1, sizeof(swiNeg1));
+proxy.writeBlob(commPage + addr, swiNeg1, sizeof(swiNeg1));
 }

 uint8_t memory_barrier[] =
@@ -80,8 +81,7 @@
 0x5f, 0xf0, 0x7f, 0xf5, // dmb
 0x0e, 0xf0, 0xa0, 0xe1  // return
 };
-tc->getVirtProxy().writeBlob(commPage + 0x0fa0, memory_barrier,
- sizeof(memory_barrier));
+proxy.writeBlob(commPage + 0x0fa0, memory_barrier,  
sizeof(memory_barrier));


 uint8_t cmpxchg[] =
 {
@@ -94,7 +94,7 @@
 0x5f, 0xf0, 0x7f, 0xf5,  // dmb
 0x0e, 0xf0, 0xa0, 0xe1   // return
 };
-tc->getVirtProxy().writeBlob(commPage + 

[gem5-dev] Change in gem5/gem5[develop]: fastmodel,cpu: Eliminate the unused getVirtProxy.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45908 )



Change subject: fastmodel,cpu: Eliminate the unused getVirtProxy.
..

fastmodel,cpu: Eliminate the unused getVirtProxy.

Change-Id: I84683a3297143102a74ac6dfe744cd5804b83fe4
---
M src/arch/arm/fastmodel/iris/thread_context.cc
M src/arch/arm/fastmodel/iris/thread_context.hh
M src/cpu/checker/thread_context.hh
M src/cpu/o3/thread_context.cc
M src/cpu/o3/thread_context.hh
M src/cpu/simple_thread.hh
M src/cpu/thread_context.hh
M src/cpu/thread_state.cc
M src/cpu/thread_state.hh
9 files changed, 4 insertions(+), 82 deletions(-)



diff --git a/src/arch/arm/fastmodel/iris/thread_context.cc  
b/src/arch/arm/fastmodel/iris/thread_context.cc

index 2392592..af925cf 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.cc
+++ b/src/arch/arm/fastmodel/iris/thread_context.cc
@@ -475,18 +475,6 @@
 }

 void
-ThreadContext::initMemProxies(::ThreadContext *tc)
-{
-assert(!virtProxy);
-if (FullSystem) {
-virtProxy.reset(new TranslatingPortProxy(tc));
-} else {
-virtProxy.reset(new SETranslatingPortProxy(this,
-SETranslatingPortProxy::NextPage));
-}
-}
-
-void
 ThreadContext::sendFunctional(PacketPtr pkt)
 {
 auto *iris_cpu = dynamic_cast(getCpuPtr());
diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh  
b/src/arch/arm/fastmodel/iris/thread_context.hh

index cc7ec6e..54a3c5a 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.hh
+++ b/src/arch/arm/fastmodel/iris/thread_context.hh
@@ -94,9 +94,6 @@
 std::vector memorySpaces;
 std::vector  
translations;


-std::unique_ptr virtProxy = nullptr;
-
-
 // A queue to keep track of instruction count based events.
 EventQueue comInstEventQueue;
 // A helper function to maintain the IRIS step count. This makes sure  
the

@@ -211,8 +208,7 @@
 return _isa;
 }

-PortProxy () override { return *virtProxy; }
-void initMemProxies(::ThreadContext *tc) override;
+void initMemProxies(::ThreadContext *tc) override {}

 void sendFunctional(PacketPtr pkt) override;

diff --git a/src/cpu/checker/thread_context.hh  
b/src/cpu/checker/thread_context.hh

index 43bbf89..9b7d73b 100644
--- a/src/cpu/checker/thread_context.hh
+++ b/src/cpu/checker/thread_context.hh
@@ -149,12 +149,6 @@

 void setProcessPtr(Process *p) override { actualTC->setProcessPtr(p); }

-PortProxy &
-getVirtProxy() override
-{
-return actualTC->getVirtProxy();
-}
-
 void
 initMemProxies(ThreadContext *tc) override
 {
diff --git a/src/cpu/o3/thread_context.cc b/src/cpu/o3/thread_context.cc
index c4f5366..c336c47 100644
--- a/src/cpu/o3/thread_context.cc
+++ b/src/cpu/o3/thread_context.cc
@@ -45,12 +45,6 @@
 #include "config/the_isa.hh"
 #include "debug/O3CPU.hh"

-PortProxy&
-O3ThreadContext::getVirtProxy()
-{
-return thread->getVirtProxy();
-}
-
 void
 O3ThreadContext::takeOverFrom(ThreadContext *old_context)
 {
diff --git a/src/cpu/o3/thread_context.hh b/src/cpu/o3/thread_context.hh
index 85743a3..8a6ea2d 100644
--- a/src/cpu/o3/thread_context.hh
+++ b/src/cpu/o3/thread_context.hh
@@ -137,8 +137,6 @@

 void setProcessPtr(Process *p) override { thread->setProcessPtr(p); }

-PortProxy () override;
-
 void
 initMemProxies(ThreadContext *tc) override
 {
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 77a5b9d..61cadec 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -213,8 +213,6 @@

 System *getSystemPtr() override { return system; }

-PortProxy () override { return  
ThreadState::getVirtProxy(); }

-
 void
 initMemProxies(ThreadContext *tc) override
 {
diff --git a/src/cpu/thread_context.hh b/src/cpu/thread_context.hh
index 012484b..6831caf 100644
--- a/src/cpu/thread_context.hh
+++ b/src/cpu/thread_context.hh
@@ -144,8 +144,6 @@

 virtual System *getSystemPtr() = 0;

-virtual PortProxy () = 0;
-
 virtual void sendFunctional(PacketPtr pkt);

 /**
diff --git a/src/cpu/thread_state.cc b/src/cpu/thread_state.cc
index 09d840c..4e9d532 100644
--- a/src/cpu/thread_state.cc
+++ b/src/cpu/thread_state.cc
@@ -43,61 +43,24 @@
   numLoad(0), startNumLoad(0),
   _status(ThreadContext::Halted), baseCpu(cpu),
   _contextId(0), _threadId(_tid), lastActivate(0), lastSuspend(0),
-  process(_process), virtProxy(NULL),
-  funcExeInst(0), storeCondFailures(0)
+  process(_process), funcExeInst(0), storeCondFailures(0)
 {
 }

-ThreadState::~ThreadState()
-{
-if (virtProxy != NULL)
-delete virtProxy;
-}
-
 void
 ThreadState::serialize(CheckpointOut ) const
 {
 SERIALIZE_ENUM(_status);
 // thread_num and cpu_id are deterministic from the config
 SERIALIZE_SCALAR(funcExeInst);
-
-if (!FullSystem)
-return;
 }

 void
 

[gem5-dev] Change in gem5/gem5[develop]: cpu,fastmodel: Get rid of the unused ThreadContext::getPhysProxy.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45905 )



Change subject: cpu,fastmodel: Get rid of the unused  
ThreadContext::getPhysProxy.

..

cpu,fastmodel: Get rid of the unused ThreadContext::getPhysProxy.

Change-Id: I31abd77235310c8577c4281bbefaea57a25feb73
---
M src/arch/arm/fastmodel/iris/thread_context.cc
M src/arch/arm/fastmodel/iris/thread_context.hh
M src/cpu/checker/thread_context.hh
M src/cpu/o3/thread_context.hh
M src/cpu/simple_thread.hh
M src/cpu/thread_context.hh
M src/cpu/thread_state.cc
M src/cpu/thread_state.hh
8 files changed, 3 insertions(+), 34 deletions(-)



diff --git a/src/arch/arm/fastmodel/iris/thread_context.cc  
b/src/arch/arm/fastmodel/iris/thread_context.cc

index 3116139..2392592 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.cc
+++ b/src/arch/arm/fastmodel/iris/thread_context.cc
@@ -477,12 +477,10 @@
 void
 ThreadContext::initMemProxies(::ThreadContext *tc)
 {
+assert(!virtProxy);
 if (FullSystem) {
-assert(!physProxy && !virtProxy);
-physProxy.reset(new PortProxy(tc, _cpu->cacheLineSize()));
 virtProxy.reset(new TranslatingPortProxy(tc));
 } else {
-assert(!virtProxy);
 virtProxy.reset(new SETranslatingPortProxy(this,
 SETranslatingPortProxy::NextPage));
 }
diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh  
b/src/arch/arm/fastmodel/iris/thread_context.hh

index d093138..cc7ec6e 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.hh
+++ b/src/arch/arm/fastmodel/iris/thread_context.hh
@@ -95,7 +95,6 @@
 std::vector  
translations;


 std::unique_ptr virtProxy = nullptr;
-std::unique_ptr physProxy = nullptr;


 // A queue to keep track of instruction count based events.
@@ -212,7 +211,6 @@
 return _isa;
 }

-PortProxy () override { return *physProxy; }
 PortProxy () override { return *virtProxy; }
 void initMemProxies(::ThreadContext *tc) override;

diff --git a/src/cpu/checker/thread_context.hh  
b/src/cpu/checker/thread_context.hh

index 661c710..43bbf89 100644
--- a/src/cpu/checker/thread_context.hh
+++ b/src/cpu/checker/thread_context.hh
@@ -149,8 +149,6 @@

 void setProcessPtr(Process *p) override { actualTC->setProcessPtr(p); }

-PortProxy () override { return actualTC->getPhysProxy(); }
-
 PortProxy &
 getVirtProxy() override
 {
diff --git a/src/cpu/o3/thread_context.hh b/src/cpu/o3/thread_context.hh
index 23bc5a3..85743a3 100644
--- a/src/cpu/o3/thread_context.hh
+++ b/src/cpu/o3/thread_context.hh
@@ -137,8 +137,6 @@

 void setProcessPtr(Process *p) override { thread->setProcessPtr(p); }

-PortProxy () override { return thread->getPhysProxy(); }
-
 PortProxy () override;

 void
diff --git a/src/cpu/simple_thread.hh b/src/cpu/simple_thread.hh
index 9d2d3d5..77a5b9d 100644
--- a/src/cpu/simple_thread.hh
+++ b/src/cpu/simple_thread.hh
@@ -213,7 +213,6 @@

 System *getSystemPtr() override { return system; }

-PortProxy () override { return  
ThreadState::getPhysProxy(); }
 PortProxy () override { return  
ThreadState::getVirtProxy(); }


 void
diff --git a/src/cpu/thread_context.hh b/src/cpu/thread_context.hh
index 921135c..012484b 100644
--- a/src/cpu/thread_context.hh
+++ b/src/cpu/thread_context.hh
@@ -144,8 +144,6 @@

 virtual System *getSystemPtr() = 0;

-virtual PortProxy () = 0;
-
 virtual PortProxy () = 0;

 virtual void sendFunctional(PacketPtr pkt);
diff --git a/src/cpu/thread_state.cc b/src/cpu/thread_state.cc
index 740f8a5..09d840c 100644
--- a/src/cpu/thread_state.cc
+++ b/src/cpu/thread_state.cc
@@ -43,15 +43,13 @@
   numLoad(0), startNumLoad(0),
   _status(ThreadContext::Halted), baseCpu(cpu),
   _contextId(0), _threadId(_tid), lastActivate(0), lastSuspend(0),
-  process(_process), physProxy(NULL), virtProxy(NULL),
+  process(_process), virtProxy(NULL),
   funcExeInst(0), storeCondFailures(0)
 {
 }

 ThreadState::~ThreadState()
 {
-if (physProxy != NULL)
-delete physProxy;
 if (virtProxy != NULL)
 delete virtProxy;
 }
@@ -86,28 +84,16 @@
 // and can safely be done at init() time even if the CPU is not
 // connected, i.e. when restoring from a checkpoint and later
 // switching the CPU in.
+assert(virtProxy == NULL);
 if (FullSystem) {
-assert(physProxy == NULL);
-physProxy = new PortProxy(tc, baseCpu->cacheLineSize());
-
-assert(virtProxy == NULL);
 virtProxy = new TranslatingPortProxy(tc);
 } else {
-assert(virtProxy == NULL);
 virtProxy = new SETranslatingPortProxy(
 tc, SETranslatingPortProxy::NextPage);
 }
 }

 PortProxy &
-ThreadState::getPhysProxy()
-{
-assert(FullSystem);
-assert(physProxy != NULL);
-return *physProxy;
-}
-
-PortProxy &
 

[gem5-dev] Change in gem5/gem5[develop]: arch-sparc: Create a local port proxy for functional accesses.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45904 )



Change subject: arch-sparc: Create a local port proxy for functional  
accesses.

..

arch-sparc: Create a local port proxy for functional accesses.

Don't retrieve one from the thread context since it's just as easy to
make one from scratch.

Change-Id: I46a812df656a553cc0bd94f61a371b595412a9b3
---
M src/arch/sparc/tlb.cc
1 file changed, 1 insertion(+), 1 deletion(-)



diff --git a/src/arch/sparc/tlb.cc b/src/arch/sparc/tlb.cc
index 6337f38..2a84aed 100644
--- a/src/arch/sparc/tlb.cc
+++ b/src/arch/sparc/tlb.cc
@@ -897,7 +897,7 @@
 if (!FullSystem)
 return tc->getProcessPtr()->pTable->translate(req);

-PortProxy  = tc->getPhysProxy();
+PortProxy mem(tc, tc->getSystemPtr()->cacheLineSize());
 // We didn't find it in the tlbs, so lets look at the TSBs
 GetTsbPtr(tc, vaddr, ctx_zero ? 0 : pri_context, tsbs);
 va_tag = bits(vaddr, 63, 22);

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45904
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: I46a812df656a553cc0bd94f61a371b595412a9b3
Gerrit-Change-Number: 45904
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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]: sim: Make PortProxy args in BaseBufferArg const ref.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45906 )



Change subject: sim: Make PortProxy args in BaseBufferArg const ref.
..

sim: Make PortProxy args in BaseBufferArg const ref.

That allows us to pass temporaries as the PortProxy arguments to these
functions. The thing behind the proxy may need to change, but the proxy
itself does not.

Change-Id: Ia9e09753b653107491cc12aa965e3662550208d1
---
M src/sim/syscall_emul_buf.hh
1 file changed, 2 insertions(+), 2 deletions(-)



diff --git a/src/sim/syscall_emul_buf.hh b/src/sim/syscall_emul_buf.hh
index 2a79ccd..8e2f3ac 100644
--- a/src/sim/syscall_emul_buf.hh
+++ b/src/sim/syscall_emul_buf.hh
@@ -75,7 +75,7 @@
  * copy data into simulator space (read from target memory)
  */
 bool
-copyIn(PortProxy )
+copyIn(const PortProxy )
 {
 memproxy.readBlob(addr, bufPtr, size);
 return true;// no EFAULT detection for now
@@ -85,7 +85,7 @@
  * copy data out of simulator space (write to target memory)
  */
 bool
-copyOut(PortProxy )
+copyOut(const PortProxy )
 {
 memproxy.writeBlob(addr, bufPtr, size);
 return true;// no EFAULT detection for now

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45906
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: Ia9e09753b653107491cc12aa965e3662550208d1
Gerrit-Change-Number: 45906
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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,fastmodel: Eliminate the now unnecessary initMemProxies method.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45909 )



Change subject: cpu,fastmodel: Eliminate the now unnecessary initMemProxies  
method.

..

cpu,fastmodel: Eliminate the now unnecessary initMemProxies method.

The proxies this method initializes no longer exist, since they're now
created locally.

Change-Id: I5fd1c99fbc00f5057ea8868e91be02d577b1c176
---
M src/arch/arm/fastmodel/iris/cpu.cc
M src/arch/arm/fastmodel/iris/cpu.hh
M src/arch/arm/fastmodel/iris/thread_context.hh
M src/cpu/checker/thread_context.hh
M src/cpu/kvm/base.cc
M src/cpu/minor/cpu.cc
M src/cpu/o3/cpu.cc
M src/cpu/o3/thread_context.hh
M src/cpu/simple/base.cc
M src/cpu/simple/base.hh
M src/cpu/simple_thread.hh
M src/cpu/thread_context.hh
M src/cpu/thread_state.hh
13 files changed, 2 insertions(+), 75 deletions(-)



diff --git a/src/arch/arm/fastmodel/iris/cpu.cc  
b/src/arch/arm/fastmodel/iris/cpu.cc

index a155dea..5de2c00 100644
--- a/src/arch/arm/fastmodel/iris/cpu.cc
+++ b/src/arch/arm/fastmodel/iris/cpu.cc
@@ -64,14 +64,6 @@
 }

 void
-BaseCPU::init()
-{
-::BaseCPU::init();
-for (auto *tc: threadContexts)
-tc->initMemProxies(tc);
-}
-
-void
 BaseCPU::serializeThread(CheckpointOut , ThreadID tid) const
 {
 ::serialize(*threadContexts[tid], cp);
diff --git a/src/arch/arm/fastmodel/iris/cpu.hh  
b/src/arch/arm/fastmodel/iris/cpu.hh

index 7ae0f7f..a93a205 100644
--- a/src/arch/arm/fastmodel/iris/cpu.hh
+++ b/src/arch/arm/fastmodel/iris/cpu.hh
@@ -97,8 +97,6 @@
 evs_base_cpu->setClkPeriod(clockPeriod());
 }

-void init() override;
-
 void serializeThread(CheckpointOut , ThreadID tid) const override;
 };

diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh  
b/src/arch/arm/fastmodel/iris/thread_context.hh

index 54a3c5a..e7e8697 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.hh
+++ b/src/arch/arm/fastmodel/iris/thread_context.hh
@@ -208,8 +208,6 @@
 return _isa;
 }

-void initMemProxies(::ThreadContext *tc) override {}
-
 void sendFunctional(PacketPtr pkt) override;

 Process *
diff --git a/src/cpu/checker/thread_context.hh  
b/src/cpu/checker/thread_context.hh

index 9b7d73b..197c09d 100644
--- a/src/cpu/checker/thread_context.hh
+++ b/src/cpu/checker/thread_context.hh
@@ -150,12 +150,6 @@
 void setProcessPtr(Process *p) override { actualTC->setProcessPtr(p); }

 void
-initMemProxies(ThreadContext *tc) override
-{
-actualTC->initMemProxies(tc);
-}
-
-void
 connectMemPorts(ThreadContext *tc)
 {
 actualTC->connectMemPorts(tc);
diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc
index 124bbd2..cd5781b 100644
--- a/src/cpu/kvm/base.cc
+++ b/src/cpu/kvm/base.cc
@@ -106,11 +106,7 @@
 BaseKvmCPU::init()
 {
 BaseCPU::init();
-
-if (numThreads != 1)
-fatal("KVM: Multithreading not supported");
-
-tc->initMemProxies(tc);
+fatal_if(numThreads != 1, "KVM: Multithreading not supported");
 }

 void
diff --git a/src/cpu/minor/cpu.cc b/src/cpu/minor/cpu.cc
index 1c23f2d..fb8d1db 100644
--- a/src/cpu/minor/cpu.cc
+++ b/src/cpu/minor/cpu.cc
@@ -98,19 +98,10 @@
 {
 BaseCPU::init();

-if (!params().switched_out &&
-system->getMemoryMode() != Enums::timing)
-{
+if (!params().switched_out && system->getMemoryMode() !=  
Enums::timing) {

 fatal("The Minor CPU requires the memory system to be in "
 "'timing' mode.\n");
 }
-
-/* Initialise the ThreadContext's memory proxies */
-for (ThreadID thread_id = 0; thread_id < threads.size(); thread_id++) {
-ThreadContext *tc = getContext(thread_id);
-
-tc->initMemProxies(tc);
-}
 }

 /** Stats interface from SimObject (by way of BaseCPU) */
diff --git a/src/cpu/o3/cpu.cc b/src/cpu/o3/cpu.cc
index ce83b5b..5997be8 100644
--- a/src/cpu/o3/cpu.cc
+++ b/src/cpu/o3/cpu.cc
@@ -563,8 +563,6 @@
 // Set noSquashFromTC so that the CPU doesn't squash when initially
 // setting up registers.
 thread[tid]->noSquashFromTC = true;
-// Initialise the ThreadContext's memory proxies
-thread[tid]->initMemProxies(thread[tid]->getTC());
 }

 // Clear noSquashFromTC.
diff --git a/src/cpu/o3/thread_context.hh b/src/cpu/o3/thread_context.hh
index 8a6ea2d..ee33c88 100644
--- a/src/cpu/o3/thread_context.hh
+++ b/src/cpu/o3/thread_context.hh
@@ -137,12 +137,6 @@

 void setProcessPtr(Process *p) override { thread->setProcessPtr(p); }

-void
-initMemProxies(ThreadContext *tc) override
-{
-thread->initMemProxies(tc);
-}
-
 /** Returns this thread's status. */
 Status status() const override { return thread->status(); }

diff --git a/src/cpu/simple/base.cc b/src/cpu/simple/base.cc
index e51f5a5..e988210 100644
--- a/src/cpu/simple/base.cc
+++ b/src/cpu/simple/base.cc
@@ -117,17 +117,6 @@
 }

 void

[gem5-dev] Change in gem5/gem5[develop]: arch,kern,sim: Use a map to map syscall flags.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45899 )



Change subject: arch,kern,sim: Use a map to map syscall flags.
..

arch,kern,sim: Use a map to map syscall flags.

Use a std::map to map target syscall flag bits to host flag bits. This
avoids having to track the number of elements in the map separately.

Change-Id: I43bd54f5286f11b9635d46240a55742ddfdb0901
---
M src/arch/arm/freebsd/freebsd.cc
M src/arch/arm/freebsd/freebsd.hh
M src/arch/arm/linux/linux.hh
M src/arch/mips/linux/linux.hh
M src/arch/power/linux/linux.hh
M src/arch/riscv/linux/linux.hh
M src/arch/sparc/linux/linux.hh
M src/arch/sparc/solaris/solaris.cc
M src/arch/sparc/solaris/solaris.hh
M src/arch/x86/linux/linux.hh
M src/kern/linux/flag_tables.hh
M src/kern/operatingsystem.hh
M src/sim/syscall_emul.hh
13 files changed, 41 insertions(+), 105 deletions(-)



diff --git a/src/arch/arm/freebsd/freebsd.cc  
b/src/arch/arm/freebsd/freebsd.cc

index 99cd032..34f0e40 100644
--- a/src/arch/arm/freebsd/freebsd.cc
+++ b/src/arch/arm/freebsd/freebsd.cc
@@ -35,7 +35,7 @@
 #include 

 // open(2) flags translation table
-SyscallFlagTransTable ArmFreebsd32::openFlagTable[] = {
+std::map ArmFreebsd32::openFlagTable = {
   { ArmFreebsd32::TGT_O_RDONLY, O_RDONLY },
   { ArmFreebsd32::TGT_O_WRONLY, O_WRONLY },
   { ArmFreebsd32::TGT_O_RDWR,   O_RDWR },
@@ -54,11 +54,8 @@
   { ArmFreebsd32::TGT_O_NOFOLLOW,   O_NOFOLLOW },
 };

-const int ArmFreebsd32::NUM_OPEN_FLAGS =  
sizeof(ArmFreebsd32::openFlagTable) /
-
sizeof(ArmFreebsd32::openFlagTable[0]);

-
 // open(2) flags translation table
-SyscallFlagTransTable ArmFreebsd64::openFlagTable[] = {
+std::map ArmFreebsd64::openFlagTable = {
   { ArmFreebsd64::TGT_O_RDONLY, O_RDONLY },
   { ArmFreebsd64::TGT_O_WRONLY, O_WRONLY },
   { ArmFreebsd64::TGT_O_RDWR,   O_RDWR },
@@ -76,7 +73,3 @@
   { ArmFreebsd64::TGT_O_DIRECTORY,  O_DIRECTORY },
   { ArmFreebsd64::TGT_O_NOFOLLOW,   O_NOFOLLOW },
 };
-
-const int ArmFreebsd64::NUM_OPEN_FLAGS =  
sizeof(ArmFreebsd64::openFlagTable) /
-
sizeof(ArmFreebsd64::openFlagTable[0]);

-
diff --git a/src/arch/arm/freebsd/freebsd.hh  
b/src/arch/arm/freebsd/freebsd.hh

index c552588..a059c20 100644
--- a/src/arch/arm/freebsd/freebsd.hh
+++ b/src/arch/arm/freebsd/freebsd.hh
@@ -33,6 +33,8 @@
 #ifndef __ARCH_ARM_FREEBSD_FREEBSD_HH__
 #define __ARCH_ARM_FREEBSD_FREEBSD_HH__

+#include 
+
 #include "kern/freebsd/freebsd.hh"
 #include "sim/byteswap.hh"

@@ -47,10 +49,7 @@
   public:
 /// This table maps the target open() flags to the corresponding
 /// host open() flags.
-static SyscallFlagTransTable openFlagTable[];
-
-/// Number of entries in openFlagTable[].
-static const int NUM_OPEN_FLAGS;
+static std::map openFlagTable;

 //@{
 /// Basic ARM FreeBSD types
@@ -211,10 +210,7 @@

 /// This table maps the target open() flags to the corresponding
 /// host open() flags.
-static SyscallFlagTransTable openFlagTable[];
-
-/// Number of entries in openFlagTable[].
-static const int NUM_OPEN_FLAGS;
+static std::map openFlagTable;

 //@{
 /// Basic ARM FreeBSD types
diff --git a/src/arch/arm/linux/linux.hh b/src/arch/arm/linux/linux.hh
index 6ca877c..9a5440b 100644
--- a/src/arch/arm/linux/linux.hh
+++ b/src/arch/arm/linux/linux.hh
@@ -42,6 +42,8 @@
 #ifndef __ARCH_ARM_LINUX_LINUX_HH__
 #define __ARCH_ARM_LINUX_LINUX_HH__

+#include 
+
 #include "arch/arm/utility.hh"
 #include "base/compiler.hh"
 #include "kern/linux/linux.hh"
@@ -108,10 +110,7 @@

 /// This table maps the target open() flags to the corresponding
 /// host open() flags.
-static SyscallFlagTransTable openFlagTable[];
-
-/// Number of entries in openFlagTable[].
-static const int NUM_OPEN_FLAGS;
+static std::map openFlagTable;

 //@{
 /// Basic ARM Linux types
@@ -160,8 +159,6 @@
 static const unsigned TGT_MAP_ANONYMOUS = 0x00020;
 static const unsigned TGT_MAP_FIXED = 0x00010;

-static const unsigned NUM_MMAP_FLAGS;
-
 /// For table().
 static const int TBL_SYSINFO = 12;

@@ -338,10 +335,7 @@

 /// This table maps the target open() flags to the corresponding
 /// host open() flags.
-static SyscallFlagTransTable openFlagTable[];
-
-/// Number of entries in openFlagTable[].
-static const int NUM_OPEN_FLAGS;
+static std::map openFlagTable;

 //@{
 /// Basic ARM Linux types
@@ -375,7 +369,7 @@
 //@}

 /// For mmap().
-static SyscallFlagTransTable mmapFlagTable[];
+static std::map mmapFlagTable;

 static const unsigned TGT_MAP_SHARED= 0x1;
 static const unsigned TGT_MAP_PRIVATE   = 0x2;
@@ -393,8 +387,6 @@
 static const unsigned TGT_MAP_ANONYMOUS = 0x00020;
 static const unsigned 

[gem5-dev] Change in gem5/gem5[develop]: base: Apply the stl_helpers helper judiciously.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45901 )



Change subject: base: Apply the stl_helpers helper judiciously.
..

base: Apply the stl_helpers helper judiciously.

The existing template would apply the helper operator to *any* template
which took two types, regardless of what that template was. The
assumption was that those types *must* be STL containers, because no
other template takes two types, right?

Instead, this new version uses type traits to explicitly whitelist types
which the helper applies to. Currently the only type it seems to be used
with is std::vector, but by defining more specializations of
IsHelpedContainer, other types/templates can be enabled as well.

This is particularly important when moving to c++17, since the
std::string class would then apparently match the old overload. That makes
the << operator ambiguous and breaks the build.

Change-Id: Id283746a2ccced8882fa23e6f9e69fe22e206b70
---
M src/base/stl_helpers.hh
1 file changed, 14 insertions(+), 5 deletions(-)



diff --git a/src/base/stl_helpers.hh b/src/base/stl_helpers.hh
index 51dc039..2d7cb64 100644
--- a/src/base/stl_helpers.hh
+++ b/src/base/stl_helpers.hh
@@ -31,6 +31,8 @@

 #include 
 #include 
+#include 
+#include 

 namespace m5 {
 namespace stl_helpers {
@@ -41,19 +43,26 @@
  *
  * @ingroup api_base_utils
  */
-template  class C, typename T, typename  
A>

-std::ostream &
-operator<<(std::ostream& out, const C )
+
+template 
+struct IsHelpedContainer : public std::false_type {};
+
+template 
+struct IsHelpedContainer> : public std::true_type {};
+
+template 
+std::enable_if_t::value, std::ostream &>
+operator<<(std::ostream& out, const T )
 {
 out << "[ ";
 bool first = true;
-auto printer = [, ](const T ) {
+auto printer = [, ](const auto ) {
 if (first)
 out << elem;
 else
 out << " " << elem;
 };
-std::for_each(vec.begin(), vec.end(), printer);
+std::for_each(t.begin(), t.end(), printer);
 out << " ]";
 out << std::flush;
 return out;

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45901
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: Id283746a2ccced8882fa23e6f9e69fe22e206b70
Gerrit-Change-Number: 45901
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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]: scons: Switch to c++17.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45902 )



Change subject: scons: Switch to c++17.
..

scons: Switch to c++17.

Change-Id: I90d121ab4dbf53f3bd30bcdb5f5101d9c7cdc437
---
M SConstruct
1 file changed, 2 insertions(+), 2 deletions(-)



diff --git a/SConstruct b/SConstruct
index d8819e8..6c25c8f 100755
--- a/SConstruct
+++ b/SConstruct
@@ -316,8 +316,8 @@
 main.Append(CCFLAGS=['-Wall', '-Wundef', '-Wextra',
  '-Wno-sign-compare', '-Wno-unused-parameter'])

-# We always compile using C++14
-main.Append(CXXFLAGS=['-std=c++14'])
+# We always compile using C++17
+main.Append(CXXFLAGS=['-std=c++17'])

 if sys.platform.startswith('freebsd'):
 main.Append(CCFLAGS=['-I/usr/local/include'])

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45902
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: I90d121ab4dbf53f3bd30bcdb5f5101d9c7cdc437
Gerrit-Change-Number: 45902
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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]: base: Use a lambda to simplify the stl_helpers template.

2021-05-23 Thread Gabe Black (Gerrit) via gem5-dev
Gabe Black has uploaded this change for review. (  
https://gem5-review.googlesource.com/c/public/gem5/+/45900 )



Change subject: base: Use a lambda to simplify the stl_helpers template.
..

base: Use a lambda to simplify the stl_helpers template.

Use a lambda to power the std::for_each instead of a functor class. This
takes *much* less code to implement.

Change-Id: Icc5d5a943630e7e19cd2e0fa6f2cef2c9b766e24
---
M src/base/stl_helpers.hh
1 file changed, 8 insertions(+), 32 deletions(-)



diff --git a/src/base/stl_helpers.hh b/src/base/stl_helpers.hh
index ae369b5..51dc039 100644
--- a/src/base/stl_helpers.hh
+++ b/src/base/stl_helpers.hh
@@ -35,37 +35,6 @@
 namespace m5 {
 namespace stl_helpers {

-template 
-class ContainerPrint
-{
-  private:
-std::ostream 
-bool first;
-
-  public:
-/**
- * @ingroup api_base_utils
- */
-ContainerPrint(std::ostream )
-: out(out), first(true)
-{}
-
-/**
- * @ingroup api_base_utils
- */
-void
-operator()(const T )
-{
-// First one doesn't get a space before it.  The rest do.
-if (first)
-first = false;
-else
-out << " ";
-
-out << elem;
-}
-};
-
 /**
  * Write out all elements in an stl container as a space separated
  * list enclosed in square brackets
@@ -77,7 +46,14 @@
 operator<<(std::ostream& out, const C )
 {
 out << "[ ";
-std::for_each(vec.begin(), vec.end(), ContainerPrint(out));
+bool first = true;
+auto printer = [, ](const T ) {
+if (first)
+out << elem;
+else
+out << " " << elem;
+};
+std::for_each(vec.begin(), vec.end(), printer);
 out << " ]";
 out << std::flush;
 return out;

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/45900
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: Icc5d5a943630e7e19cd2e0fa6f2cef2c9b766e24
Gerrit-Change-Number: 45900
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black 
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