• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2010-2012, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef BCC_MCCACHE_H
18 #define BCC_MCCACHE_H
19 
20 #include <stdint.h>
21 #include <sys/types.h>
22 
23 /* BCC Cache File Magic Word */
24 #define MCO_MAGIC "\0bcc"
25 
26 /* BCC Cache File Version, encoded in 4 bytes of ASCII */
27 #define MCO_VERSION "001\0"
28 
29 /* BCC Cache Header Structure */
30 struct MCO_Header {
31   /* magic and version */
32   uint8_t magic[4];
33   uint8_t version[4];
34 
35   /* machine-dependent integer type size */
36   uint8_t endianness;
37   uint8_t sizeof_off_t;
38   uint8_t sizeof_size_t;
39   uint8_t sizeof_ptr_t;
40 
41   /* string pool section */
42   off_t str_pool_offset;
43   size_t str_pool_size;
44 
45   /* dependancy table */
46   off_t depend_tab_offset;
47   size_t depend_tab_size;
48 
49   /* relocation table section */
50   off_t reloc_tab_offset;
51   size_t reloc_tab_size;
52 
53   /* pragma list section */
54   off_t pragma_list_offset;
55   size_t pragma_list_size;
56 
57   /* function table */
58   off_t func_table_offset;
59   size_t func_table_size;
60 
61   /* function table */
62   off_t object_slot_list_offset;
63   size_t object_slot_list_size;
64 
65   /* export variable name list section */
66   off_t export_var_name_list_offset;
67   size_t export_var_name_list_size;
68 
69   /* export function name list section */
70   off_t export_func_name_list_offset;
71   size_t export_func_name_list_size;
72 
73   /* dirty hack for libRS */
74   /* TODO: This should be removed in the future */
75   uint32_t libRS_threadable;
76 
77   /* export foreach list section */
78   off_t export_foreach_name_list_offset;
79   size_t export_foreach_name_list_size;
80 };
81 
82 struct MCO_String {
83   size_t length; /* String length, without ending '\0' */
84   off_t offset; /* Note: Offset related to string_pool_offset. */
85 };
86 
87 struct MCO_StringPool {
88   size_t count;
89   struct MCO_String list[];
90 };
91 
92 enum MCO_ResourceType {
93   BCC_APK_RESOURCE = 0,
94   BCC_FILE_RESOURCE = 1,
95 };
96 
97 struct MCO_Dependency {
98   size_t res_name_strp_index;
99   uint32_t res_type; /* BCC_APK_RESOURCE or BCC_FILE_RESOURCE */
100   unsigned char sha1[20];
101 };
102 
103 struct MCO_DependencyTable {
104   size_t count;
105   struct MCO_Dependency table[];
106 };
107 
108 struct MCO_ExportVarList {
109   size_t count;
110   void *cached_addr_list[];
111 };
112 
113 struct MCO_ExportFuncList {
114   size_t count;
115   void *cached_addr_list[];
116 };
117 
118 struct MCO_ExportForEachList {
119   size_t count;
120   void *cached_addr_list[];
121 };
122 
123 struct MCO_Pragma {
124   size_t key_strp_index;
125   size_t value_strp_index;
126 };
127 
128 struct MCO_PragmaList {
129   size_t count;
130   struct MCO_Pragma list[];
131 };
132 
133 struct MCO_ObjectSlotList {
134   size_t count;
135   uint32_t object_slot_list[];
136 };
137 
138 struct MCO_FuncInfo {
139   size_t name_strp_index;
140   void *cached_addr;
141   size_t size;
142 };
143 
144 struct MCO_FuncTable {
145   size_t count;
146   struct MCO_FuncInfo table[];
147 };
148 
149 struct MCO_String_Ptr {
150   size_t count;
151   size_t strp_indexs[];
152 };
153 
154 
155 #endif /* BCC_MCCACHE_H */
156