| /* |
| * copyright 2010, the android open source project |
| * |
| * licensed under the apache license, version 2.0 (the "license"); |
| * you may not use this file except in compliance with the license. |
| * you may obtain a copy of the license at |
| * |
| * http://www.apache.org/licenses/license-2.0 |
| * |
| * unless required by applicable law or agreed to in writing, software |
| * distributed under the license is distributed on an "as is" basis, |
| * without warranties or conditions of any kind, either express or implied. |
| * see the license for the specific language governing permissions and |
| * limitations under the license. |
| */ |
| |
| #ifndef BCC_CONTEXTMANAGER_H |
| #define BCC_CONTEXTMANAGER_H |
| |
| #include <Config.h> |
| |
| #include <llvm/Support/Mutex.h> |
| |
| #include <unistd.h> |
| #include <stddef.h> |
| |
| |
| namespace bcc { |
| |
| class ContextManager { |
| public: |
| // Starting address of context slot address space |
| static char * const ContextFixedAddr; |
| |
| // Number of the context slots |
| static size_t const ContextSlotCount = BCC_CONTEXT_SLOT_COUNT_; |
| |
| // Context size |
| static size_t const ContextCodeSize = BCC_CONTEXT_CODE_SIZE_; |
| static size_t const ContextDataSize = BCC_CONTEXT_DATA_SIZE_; |
| static size_t const ContextSize = ContextCodeSize + ContextDataSize; |
| |
| private: |
| // Context manager singleton |
| static ContextManager TheContextManager; |
| |
| private: |
| // Mutex lock for context slot occupation table |
| mutable llvm::sys::Mutex mContextSlotOccupiedLock; |
| |
| // Context slot occupation table |
| bool mContextSlotOccupied[ContextSlotCount]; |
| |
| ContextManager(); |
| |
| public: |
| static ContextManager &get() { |
| return TheContextManager; |
| } |
| |
| char *allocateContext(); |
| char *allocateContext(char *addr, int imageFd, off_t imageOffset); |
| void deallocateContext(char *addr); |
| |
| bool isManagingContext(char *addr) const; |
| |
| private: |
| static ssize_t getSlotIndexFromAddress(char *addr); |
| |
| }; |
| |
| } // namespace bcc |
| |
| #endif // BCC_CONTEXTMANAGER_H |