mem, arm: Replace the pointer type in PortProxy with void *.
authorGabe Black <gabeblack@google.com>
Thu, 2 May 2019 03:12:05 +0000 (20:12 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 29 May 2019 04:23:37 +0000 (04:23 +0000)
The void * type is for pointers which point to an unknown type. We
should use that when handling anonymous buffers in the PortProxy
functions, instead of uint8_t * which points to bytes.

Importantly, C/C++ doesn't require you to do any casting to turn an
arbitrary pointer type into a void *. This will get rid of lots of
tedious, verbose casting throughout the code base.

Change-Id: Id1adecc283c866d8e24524efd64f37b079088bd9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/18571
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>

src/mem/fs_translating_port_proxy.cc
src/mem/fs_translating_port_proxy.hh
src/mem/port_proxy.cc
src/mem/port_proxy.hh
src/mem/se_translating_port_proxy.cc
src/mem/se_translating_port_proxy.hh
src/mem/secure_port_proxy.cc
src/mem/secure_port_proxy.hh

index a21d3283a49e2d37a973231ee5335ce9054eb19e..2e17cbf63a343eaaa87bf636803f7a7b4e09ab43 100644 (file)
@@ -67,7 +67,7 @@ FSTranslatingPortProxy::FSTranslatingPortProxy(MasterPort &port,
 }
 
 bool
-FSTranslatingPortProxy::tryReadBlob(Addr addr, uint8_t *p, int size) const
+FSTranslatingPortProxy::tryReadBlob(Addr addr, void *p, int size) const
 {
     Addr paddr;
     for (ChunkGenerator gen(addr, size, TheISA::PageBytes); !gen.done();
@@ -79,14 +79,14 @@ FSTranslatingPortProxy::tryReadBlob(Addr addr, uint8_t *p, int size) const
             paddr = TheISA::vtophys(gen.addr());
 
         PortProxy::readBlobPhys(paddr, 0, p, gen.size());
-        p += gen.size();
+        p = static_cast<uint8_t *>(p) + gen.size();
     }
     return true;
 }
 
 bool
 FSTranslatingPortProxy::tryWriteBlob(
-        Addr addr, const uint8_t *p, int size) const
+        Addr addr, const void *p, int size) const
 {
     Addr paddr;
     for (ChunkGenerator gen(addr, size, TheISA::PageBytes); !gen.done();
@@ -98,7 +98,7 @@ FSTranslatingPortProxy::tryWriteBlob(
             paddr = TheISA::vtophys(gen.addr());
 
         PortProxy::writeBlobPhys(paddr, 0, p, gen.size());
-        p += gen.size();
+        p = static_cast<const uint8_t *>(p) + gen.size();
     }
     return true;
 }
index 5ae87001cd4483e113ba525e21525b7862baba02..78adf1ac585b3beca7e7e178f24de1535befc1b8 100644 (file)
@@ -85,11 +85,11 @@ class FSTranslatingPortProxy : public PortProxy
 
     /** Version of tryReadblob that translates virt->phys and deals
       * with page boundries. */
-    bool tryReadBlob(Addr addr, uint8_t *p, int size) const override;
+    bool tryReadBlob(Addr addr, void *p, int size) const override;
 
     /** Version of tryWriteBlob that translates virt->phys and deals
       * with page boundries. */
-    bool tryWriteBlob(Addr addr, const uint8_t *p, int size) const override;
+    bool tryWriteBlob(Addr addr, const void *p, int size) const override;
 
     /**
      * Fill size bytes starting at addr with byte value val.
index 97eb67eff04cbfbbae28dcf516e67c5411a95ebd..f56bfeb555ebf73a9909403bd1867a0f8ae76ab6 100644 (file)
@@ -43,7 +43,7 @@
 
 void
 PortProxy::readBlobPhys(Addr addr, Request::Flags flags,
-                        uint8_t *p, int size) const
+                        void *p, int size) const
 {
     for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
          gen.next()) {
@@ -52,15 +52,15 @@ PortProxy::readBlobPhys(Addr addr, Request::Flags flags,
             gen.addr(), gen.size(), flags, Request::funcMasterId);
 
         Packet pkt(req, MemCmd::ReadReq);
-        pkt.dataStatic(p);
+        pkt.dataStatic(static_cast<uint8_t *>(p));
         _port.sendFunctional(&pkt);
-        p += gen.size();
+        p = static_cast<uint8_t *>(p) + gen.size();
     }
 }
 
 void
 PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
-                         const uint8_t *p, int size) const
+                         const void *p, int size) const
 {
     for (ChunkGenerator gen(addr, size, _cacheLineSize); !gen.done();
          gen.next()) {
@@ -69,9 +69,9 @@ PortProxy::writeBlobPhys(Addr addr, Request::Flags flags,
             gen.addr(), gen.size(), flags, Request::funcMasterId);
 
         Packet pkt(req, MemCmd::WriteReq);
-        pkt.dataStaticConst(p);
+        pkt.dataStaticConst(static_cast<const uint8_t *>(p));
         _port.sendFunctional(&pkt);
-        p += gen.size();
+        p = static_cast<const uint8_t *>(p) + gen.size();
     }
 }
 
@@ -92,7 +92,7 @@ bool
 PortProxy::tryWriteString(Addr addr, const char *str) const
 {
     do {
-        if (!tryWriteBlob(addr++, (uint8_t *)str, 1))
+        if (!tryWriteBlob(addr++, str, 1))
             return false;
     } while (*str++);
     return true;
index dcc1905a5ae770235743d469d2c089df05e12382..096f82664a884120558b1db305270dbe8aef9066 100644 (file)
@@ -100,13 +100,13 @@ class PortProxy
      * Read size bytes memory at physical address and store in p.
      */
     void readBlobPhys(Addr addr, Request::Flags flags,
-                      uint8_t* p, int size) const;
+                      void *p, int size) const;
 
     /**
      * Write size bytes from p to physical address.
      */
     void writeBlobPhys(Addr addr, Request::Flags flags,
-                       const uint8_t* p, int size) const;
+                       const void *p, int size) const;
 
     /**
      * Fill size bytes starting at physical addr with byte value val.
@@ -123,7 +123,7 @@ class PortProxy
      * Returns true on success and false on failure.
      */
     virtual bool
-    tryReadBlob(Addr addr, uint8_t *p, int size) const
+    tryReadBlob(Addr addr, void *p, int size) const
     {
         readBlobPhys(addr, 0, p, size);
         return true;
@@ -134,7 +134,7 @@ class PortProxy
      * Returns true on success and false on failure.
      */
     virtual bool
-    tryWriteBlob(Addr addr, const uint8_t *p, int size) const
+    tryWriteBlob(Addr addr, const void *p, int size) const
     {
         writeBlobPhys(addr, 0, p, size);
         return true;
@@ -159,7 +159,7 @@ class PortProxy
      * Same as tryReadBlob, but insists on success.
      */
     void
-    readBlob(Addr addr, uint8_t* p, int size) const
+    readBlob(Addr addr, void *p, int size) const
     {
         if (!tryReadBlob(addr, p, size))
             fatal("readBlob(%#x, ...) failed", addr);
@@ -169,7 +169,7 @@ class PortProxy
      * Same as tryWriteBlob, but insists on success.
      */
     void
-    writeBlob(Addr addr, const uint8_t* p, int size) const
+    writeBlob(Addr addr, const void *p, int size) const
     {
         if (!tryWriteBlob(addr, p, size))
             fatal("writeBlob(%#x, ...) failed", addr);
@@ -250,7 +250,7 @@ T
 PortProxy::read(Addr address) const
 {
     T data;
-    readBlob(address, (uint8_t*)&data, sizeof(T));
+    readBlob(address, &data, sizeof(T));
     return data;
 }
 
@@ -258,7 +258,7 @@ template <typename T>
 void
 PortProxy::write(Addr address, T data) const
 {
-    writeBlob(address, (uint8_t*)&data, sizeof(T));
+    writeBlob(address, &data, sizeof(T));
 }
 
 template <typename T>
@@ -266,7 +266,7 @@ T
 PortProxy::read(Addr address, ByteOrder byte_order) const
 {
     T data;
-    readBlob(address, (uint8_t*)&data, sizeof(T));
+    readBlob(address, &data, sizeof(T));
     return gtoh(data, byte_order);
 }
 
@@ -275,7 +275,7 @@ void
 PortProxy::write(Addr address, T data, ByteOrder byte_order) const
 {
     data = htog(data, byte_order);
-    writeBlob(address, (uint8_t*)&data, sizeof(T));
+    writeBlob(address, &data, sizeof(T));
 }
 
 #endif // __MEM_PORT_PROXY_HH__
index de5335a05f7266cda55b76e3b4398c743732cfa8..c5f38f1cdf4ad86b28755bd504da34b6efd2c5ca 100644 (file)
@@ -62,9 +62,10 @@ SETranslatingPortProxy::SETranslatingPortProxy(MasterPort& port, Process *p,
 { }
 
 bool
-SETranslatingPortProxy::tryReadBlob(Addr addr, uint8_t *p, int size) const
+SETranslatingPortProxy::tryReadBlob(Addr addr, void *p, int size) const
 {
     int prevSize = 0;
+    auto *bytes = static_cast<uint8_t *>(p);
 
     for (ChunkGenerator gen(addr, size, PageBytes); !gen.done(); gen.next()) {
         Addr paddr;
@@ -72,7 +73,7 @@ SETranslatingPortProxy::tryReadBlob(Addr addr, uint8_t *p, int size) const
         if (!pTable->translate(gen.addr(),paddr))
             return false;
 
-        PortProxy::readBlobPhys(paddr, 0, p + prevSize, gen.size());
+        PortProxy::readBlobPhys(paddr, 0, bytes + prevSize, gen.size());
         prevSize += gen.size();
     }
 
@@ -81,10 +82,10 @@ SETranslatingPortProxy::tryReadBlob(Addr addr, uint8_t *p, int size) const
 
 
 bool
-SETranslatingPortProxy::tryWriteBlob(Addr addr, const uint8_t *p,
-                                     int size) const
+SETranslatingPortProxy::tryWriteBlob(Addr addr, const void *p, int size) const
 {
     int prevSize = 0;
+    auto *bytes = static_cast<const uint8_t *>(p);
 
     for (ChunkGenerator gen(addr, size, PageBytes); !gen.done(); gen.next()) {
         Addr paddr;
@@ -104,7 +105,7 @@ SETranslatingPortProxy::tryWriteBlob(Addr addr, const uint8_t *p,
             pTable->translate(gen.addr(), paddr);
         }
 
-        PortProxy::writeBlobPhys(paddr, 0, p + prevSize, gen.size());
+        PortProxy::writeBlobPhys(paddr, 0, bytes + prevSize, gen.size());
         prevSize += gen.size();
     }
 
index 1c8828bbf8b3bee4563af082a55379edd50fa932..718e44a576cdb382d9d18d230075622ca81113e5 100644 (file)
@@ -85,8 +85,8 @@ class SETranslatingPortProxy : public PortProxy
 
     void setPageTable(EmulationPageTable *p) { pTable = p; }
     void setProcess(Process *p) { process = p; }
-    bool tryReadBlob(Addr addr, uint8_t *p, int size) const override;
-    bool tryWriteBlob(Addr addr, const uint8_t *p, int size) const override;
+    bool tryReadBlob(Addr addr, void *p, int size) const override;
+    bool tryWriteBlob(Addr addr, const void *p, int size) const override;
     bool tryMemsetBlob(Addr addr, uint8_t val, int size) const override;
 };
 
index 645baa9485a84821b2014c5a2fd4f554fbfe6018..01195f4b9bd71d90d9f311ebe68c7ee97896ac4a 100644 (file)
 #include "mem/secure_port_proxy.hh"
 
 bool
-SecurePortProxy::tryReadBlob(Addr addr, uint8_t *p, int size) const
+SecurePortProxy::tryReadBlob(Addr addr, void *p, int size) const
 {
     readBlobPhys(addr, Request::SECURE, p, size);
     return true;
 }
 
 bool
-SecurePortProxy::tryWriteBlob(Addr addr, const uint8_t *p, int size) const
+SecurePortProxy::tryWriteBlob(Addr addr, const void *p, int size) const
 {
     writeBlobPhys(addr, Request::SECURE, p, size);
     return true;
index 032331210c23966c89092053e3d425a3b7d5af53..9a2200c9e25d65bc9ea69c45fe0299697914e388 100644 (file)
@@ -73,8 +73,8 @@ class SecurePortProxy : public PortProxy
     SecurePortProxy(MasterPort &port, unsigned int cache_line_size)
         : PortProxy(port, cache_line_size) {}
 
-    bool tryReadBlob(Addr addr, uint8_t *p, int size) const override;
-    bool tryWriteBlob(Addr addr, const uint8_t *p, int size) const override;
+    bool tryReadBlob(Addr addr, void *p, int size) const override;
+    bool tryWriteBlob(Addr addr, const void *p, int size) const override;
     bool tryMemsetBlob(Addr addr, uint8_t val, int size) const override;
 };