4 #include "config_tcbsize.h"
13 Size = THREAD_BLOCK_SIZE
16 // This virtual dtor enforces that Context / Thread / Context_base
17 // all start at offset 0
18 virtual ~Context_base() = 0;
21 friend unsigned &__cpu_of(const void *);
27 //---------------------------------------------------------------------------
31 #include "processor.h"
33 IMPLEMENT inline Context_base::~Context_base() {}
35 inline NEEDS ["config.h"]
36 Context *context_of(const void *ptr)
38 return reinterpret_cast<Context *>
39 (reinterpret_cast<unsigned long>(ptr) & ~(Context_base::Size - 1));
42 inline NEEDS [context_of, "processor.h"]
44 { return context_of((void *)Proc::stack_pointer()); }
46 inline NEEDS ["config.h"]
47 unsigned &__cpu_of(const void *ptr)
48 { return reinterpret_cast<Context_base*>(context_of(ptr))->_cpu; }
50 inline NEEDS [__cpu_of]
51 void set_cpu_of(const void *ptr, unsigned cpu)
52 { __cpu_of(ptr) = cpu; }
55 inline NEEDS [__cpu_of]
56 unsigned cpu_of(const void *ptr)
57 { return __cpu_of(ptr); }
59 //---------------------------------------------------------------------------
63 unsigned current_cpu()
66 //---------------------------------------------------------------------------
69 inline NEEDS [current, cpu_of]
70 unsigned current_cpu()
71 { return cpu_of(current()); }