35a36
> #include "mem/vport.hh"
45c46
< private:
---
> protected:
47a49
> Addr buffer[(sizeof(T)-1)/sizeof(Addr) + 1];
50,51c52,56
< ThreadContext *GetTC() const { return tc; }
< Addr GetPointer() const { return ptr; }
---
> explicit VPtr(ThreadContext *_tc, Addr p = 0)
> : tc(_tc), ptr(p)
> {
> refresh();
> }
53,54d57
< public:
< explicit VPtr(ThreadContext *_tc, Addr p = 0) : tc(_tc), ptr(p) { }
56,57c59,63
< VPtr(const VPtr<U> &vp) : tc(vp.GetTC()), ptr(vp.GetPointer()) {}
< ~VPtr() {}
---
> VPtr(const VPtr<U> &vp)
> : tc(vp.tc), ptr(vp.ptr)
> {
> refresh();
> }
59c65,69
< bool operator!() const
---
> ~VPtr()
> {}
>
> void
> refresh()
61c71,76
< return ptr == 0;
---
> if (!ptr)
> return;
>
> VirtualPort *port = tc->getVirtPort(tc);
> port->readBlob(ptr, buffer, sizeof(T));
> tc->delVirtPort(port);
64c79,80
< VPtr<T> operator+(int offset)
---
> bool
> operator!() const
66,67c82,83
< VPtr<T> ptr(*this);
< ptr += offset;
---
> return ptr == 0;
> }
69c85,88
< return ptr;
---
> VPtr<T>
> operator+(int offset)
> {
> return VPtr<T>(tc, ptr + offset);
72c91,92
< const VPtr<T> &operator+=(int offset)
---
> const VPtr<T> &
> operator+=(int offset)
75,76c95
< assert((ptr & (TheISA::PageBytes - 1)) + sizeof(T)
< < TheISA::PageBytes);
---
> refresh();
81c100,101
< const VPtr<T> &operator=(Addr p)
---
> const VPtr<T> &
> operator=(Addr p)
83,84d102
< assert((p & (TheISA::PageBytes - 1)) + sizeof(T)
< < TheISA::PageBytes);
85a104
> refresh();
91c110,111
< const VPtr<T> &operator=(const VPtr<U> &vp)
---
> const VPtr<T> &
> operator=(const VPtr<U> &vp)
93,94c113,115
< tc = vp.GetTC();
< ptr = vp.GetPointer();
---
> tc = vp.tc;
> ptr = vp.ptr;
> refresh();
101,104c122
< panic("Needs to be rewritten\n");
< /* void *addr = vtomem(tc, ptr, sizeof(T));
< return (T *)addr;
< */
---
> return (T *)buffer;
107c125,126
< T *operator->()
---
> T *
> operator->()
109,112c128
< panic("Needs to be rewritten\n");
< /* void *addr = vtomem(tc, ptr, sizeof(T));
< return (T *)addr;
< */
---
> return (T *)buffer;
115c131,132
< T &operator*()
---
> T &
> operator*()
117,120c134
< panic("Needs to be rewritten\n");
< /* void *addr = vtomem(tc, ptr, sizeof(T));
< return *(T *)addr;
< */
---
> return *(T *)buffer;