blob: 4f2bb1b210751b6b8ac66de32e1ca7e5ad457707 [file] [log] [blame]
Stephen Hines4a68b1c2012-05-03 12:28:14 -07001/*
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#include "ScriptCompiled.h"
18
19#include "bcc_internal.h"
20#include "DebugHelper.h"
21
22namespace bcc {
23
24ScriptCompiled::~ScriptCompiled() {
25}
26
27void ScriptCompiled::getExportVarList(size_t varListSize, void **varList) {
28 if (varList) {
29 size_t varCount = getExportVarCount();
30
31 if (varCount > varListSize) {
32 varCount = varListSize;
33 }
34
35 for (ExportVarList::const_iterator
36 I = mExportVars.begin(), E = mExportVars.end();
37 I != E && varCount > 0; ++I, --varCount) {
38 *varList++ = *I;
39 }
40 }
41}
42
43void ScriptCompiled::getExportVarNameList(std::vector<std::string> &varList) {
44 varList = mExportVarsName;
45}
46
47
48void ScriptCompiled::getExportFuncNameList(std::vector<std::string> &funcList) {
49 funcList = mExportFuncsName;
50}
51
52
53void ScriptCompiled::getExportForEachNameList(std::vector<std::string> &forEachList) {
54 forEachList = mExportForEachName;
55}
56
57
58void ScriptCompiled::getExportFuncList(size_t funcListSize, void **funcList) {
59 if (funcList) {
60 size_t funcCount = getExportFuncCount();
61
62 if (funcCount > funcListSize) {
63 funcCount = funcListSize;
64 }
65
66 for (ExportFuncList::const_iterator
67 I = mExportFuncs.begin(), E = mExportFuncs.end();
68 I != E && funcCount > 0; ++I, --funcCount) {
69 *funcList++ = *I;
70 }
71 }
72}
73
74
75void ScriptCompiled::getExportForEachList(size_t forEachListSize,
76 void **forEachList) {
77 if (forEachList) {
78 size_t forEachCount = getExportForEachCount();
79
80 if (forEachCount > forEachListSize) {
81 forEachCount = forEachListSize;
82 }
83
84 for (ExportForEachList::const_iterator
85 I = mExportForEach.begin(), E = mExportForEach.end();
86 I != E && forEachCount > 0; ++I, --forEachCount) {
87 *forEachList++ = *I;
88 }
89 }
90}
91
92
93void ScriptCompiled::getPragmaList(size_t pragmaListSize,
94 char const **keyList,
95 char const **valueList) {
96 size_t pragmaCount = getPragmaCount();
97
98 if (pragmaCount > pragmaListSize) {
99 pragmaCount = pragmaListSize;
100 }
101
102 for (PragmaList::const_iterator
103 I = mPragmas.begin(), E = mPragmas.end();
104 I != E && pragmaCount > 0; ++I, --pragmaCount) {
105 if (keyList) { *keyList++ = I->first.c_str(); }
106 if (valueList) { *valueList++ = I->second.c_str(); }
107 }
108}
109
110
111void *ScriptCompiled::lookup(const char *name) {
112 return mCompiler.getSymbolAddress(name);
113}
114
115
116void ScriptCompiled::getFuncInfoList(size_t funcInfoListSize,
117 FuncInfo *funcInfoList) {
118 if (funcInfoList) {
119 size_t funcCount = getFuncCount();
120
121 if (funcCount > funcInfoListSize) {
122 funcCount = funcInfoListSize;
123 }
124
125 FuncInfo *info = funcInfoList;
126 for (FuncInfoMap::const_iterator
127 I = mEmittedFunctions.begin(), E = mEmittedFunctions.end();
128 I != E && funcCount > 0; ++I, ++info, --funcCount) {
129 info->name = I->first.c_str();
130 info->addr = I->second->addr;
131 info->size = I->second->size;
132 }
133 }
134}
135
136void ScriptCompiled::getObjectSlotList(size_t objectSlotListSize,
137 uint32_t *objectSlotList) {
138 if (objectSlotList) {
139 size_t objectSlotCount = getObjectSlotCount();
140
141 if (objectSlotCount > objectSlotListSize) {
142 objectSlotCount = objectSlotListSize;
143 }
144
145 for (ObjectSlotList::const_iterator
146 I = mObjectSlots.begin(), E = mObjectSlots.end();
147 I != E && objectSlotCount > 0; ++I, --objectSlotCount) {
148 *objectSlotList++ = *I;
149 }
150 }
151
152}
153
154} // namespace bcc