| /* |
| * 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_CACHE_H |
| #define BCC_CACHE_H |
| |
| |
| /* BCC Cache File Magic Word */ |
| #define OBCC_MAGIC "bcc\n" |
| |
| /* BCC Cache File Version, encoded in 4 bytes of ASCII */ |
| #define OBCC_MAGIC_VERS "002\0" |
| |
| /* BCC Cache Header Structure */ |
| struct oBCCHeader { |
| uint8_t magic[4]; /* includes version number */ |
| uint8_t magicVersion[4]; |
| |
| long sourceWhen; |
| long sourceCRC32; |
| |
| uint32_t rslibWhen; |
| uint32_t libRSWhen; |
| uint32_t libbccWhen; |
| |
| unsigned char sourceSHA1[20]; |
| |
| uint32_t cachedCodeDataAddr; |
| uint32_t rootAddr; |
| uint32_t initAddr; |
| |
| uint32_t libRSThreadable; /* TODO: This is an hack. Should be fixed |
| in the long term. */ |
| |
| uint32_t relocOffset; /* offset of reloc table. */ |
| uint32_t relocCount; |
| uint32_t exportVarsOffset; /* offset of export var table */ |
| uint32_t exportVarsCount; |
| uint32_t exportFuncsOffset; /* offset of export func table */ |
| uint32_t exportFuncsCount; |
| uint32_t exportPragmasOffset; /* offset of export pragma table */ |
| uint32_t exportPragmasCount; |
| uint32_t exportPragmasSize; /* size of export pragma table (in bytes) */ |
| |
| uint32_t codeOffset; /* offset of code: 64-bit alignment */ |
| uint32_t codeSize; |
| uint32_t dataOffset; /* offset of data section */ |
| uint32_t dataSize; |
| |
| /* uint32_t flags; */ /* some info flags */ |
| uint32_t checksum; /* adler32 checksum covering deps/opt */ |
| }; |
| |
| |
| /* BCC Cache Relocation Entry */ |
| struct oBCCRelocEntry { |
| uint32_t relocType; /* target instruction relocation type */ |
| uint32_t relocOffset; /* offset of hole (holeAddr - codeAddr) */ |
| uint32_t cachedResultAddr; /* address resolved at compile time */ |
| |
| oBCCRelocEntry(uint32_t ty, uintptr_t off, void *addr) |
| : relocType(ty), |
| relocOffset(static_cast<uint32_t>(off)), |
| cachedResultAddr(reinterpret_cast<uint32_t>(addr)) { |
| } |
| }; |
| |
| |
| /* BCC Cache Pragma Entry */ |
| struct oBCCPragmaEntry { |
| uint32_t pragmaNameOffset; |
| uint32_t pragmaNameSize; |
| uint32_t pragmaValueOffset; |
| uint32_t pragmaValueSize; |
| }; |
| |
| |
| /* BCC Cache Header Offset Table */ |
| /* TODO(logan): Deprecated. Will remove this. */ |
| #define k_magic offsetof(oBCCHeader, magic) |
| #define k_magicVersion offsetof(oBCCHeader, magicVersion) |
| #define k_sourceWhen offsetof(oBCCHeader, sourceWhen) |
| #define k_rslibWhen offsetof(oBCCHeader, rslibWhen) |
| #define k_libRSWhen offsetof(oBCCHeader, libRSWhen) |
| #define k_libbccWhen offsetof(oBCCHeader, libbccWhen) |
| #define k_cachedCodeDataAddr offsetof(oBCCHeader, cachedCodeDataAddr) |
| #define k_rootAddr offsetof(oBCCHeader, rootAddr) |
| #define k_initAddr offsetof(oBCCHeader, initAddr) |
| #define k_relocOffset offsetof(oBCCHeader, relocOffset) |
| #define k_relocCount offsetof(oBCCHeader, relocCount) |
| #define k_exportVarsOffset offsetof(oBCCHeader, exportVarsOffset) |
| #define k_exportVarsCount offsetof(oBCCHeader, exportVarsCount) |
| #define k_exportFuncsOffset offsetof(oBCCHeader, exportFuncsOffset) |
| #define k_exportFuncsCount offsetof(oBCCHeader, exportFuncsCount) |
| #define k_exportPragmasOffset offsetof(oBCCHeader, exportPragmasOffset) |
| #define k_exportPragmasCount offsetof(oBCCHeader, exportPragmasCount) |
| #define k_codeOffset offsetof(oBCCHeader, codeOffset) |
| #define k_codeSize offsetof(oBCCHeader, codeSize) |
| #define k_dataOffset offsetof(oBCCHeader, dataOffset) |
| #define k_dataSize offsetof(oBCCHeader, dataSize) |
| #define k_checksum offsetof(oBCCHeader, checksum) |
| |
| |
| #endif /* BCC_CACHE_H */ |