blob: 052d2a729adcf910e3dc386d80f8c060a40d071a [file] [log] [blame]
Logan2a6dc822011-01-06 04:05:20 +08001/*
2 * Copyright 2010, 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#define LOG_TAG "bcc"
18#include <cutils/log.h>
19
20#include "ScriptCompiled.h"
21
Loganf340bf72011-01-14 17:51:40 +080022#include "bcc_internal.h"
Logan02286cb2011-01-07 00:30:47 +080023#include "ContextManager.h"
Logan7dcaac92011-01-06 04:26:23 +080024
Logan2a6dc822011-01-06 04:05:20 +080025namespace bcc {
26
Logan7dcaac92011-01-06 04:26:23 +080027ScriptCompiled::~ScriptCompiled() {
Logan02286cb2011-01-07 00:30:47 +080028 // Deallocate the BCC context
29 if (mContext) {
30 deallocateContext(mContext);
31 }
32
33 // Delete the emitted function information
Loganf340bf72011-01-14 17:51:40 +080034 for (FuncInfoMap::iterator I = mEmittedFunctions.begin(),
Logan7dcaac92011-01-06 04:26:23 +080035 E = mEmittedFunctions.end(); I != E; I++) {
36 if (I->second != NULL) {
37 delete I->second;
38 }
39 }
Logan7dcaac92011-01-06 04:26:23 +080040}
41
Loganbe79ada2011-01-13 01:33:45 +080042void ScriptCompiled::getExportVarList(size_t varListSize, void **varList) {
43 if (varList) {
44 size_t varCount = getExportVarCount();
45
46 if (varCount > varListSize) {
47 varCount = varListSize;
48 }
49
Logan2a6dc822011-01-06 04:05:20 +080050 for (ExportVarList::const_iterator
Loganbe79ada2011-01-13 01:33:45 +080051 I = mExportVars.begin(), E = mExportVars.end();
52 I != E && varCount > 0; ++I, --varCount) {
53 *varList++ = *I;
Logan2a6dc822011-01-06 04:05:20 +080054 }
55 }
56}
57
58
Loganbe79ada2011-01-13 01:33:45 +080059void ScriptCompiled::getExportFuncList(size_t funcListSize, void **funcList) {
60 if (funcList) {
61 size_t funcCount = getExportFuncCount();
62
63 if (funcCount > funcListSize) {
64 funcCount = funcListSize;
65 }
66
Logan2a6dc822011-01-06 04:05:20 +080067 for (ExportFuncList::const_iterator
Loganbe79ada2011-01-13 01:33:45 +080068 I = mExportFuncs.begin(), E = mExportFuncs.end();
69 I != E && funcCount > 0; ++I, --funcCount) {
70 *funcList++ = *I;
Logan2a6dc822011-01-06 04:05:20 +080071 }
72 }
73}
74
75
Loganbe79ada2011-01-13 01:33:45 +080076void ScriptCompiled::getPragmaList(size_t pragmaListSize,
77 char const **keyList,
78 char const **valueList) {
79 size_t pragmaCount = getPragmaCount();
Logan2a6dc822011-01-06 04:05:20 +080080
Loganbe79ada2011-01-13 01:33:45 +080081 if (pragmaCount > pragmaListSize) {
82 pragmaCount = pragmaListSize;
83 }
84
85 for (PragmaList::const_iterator
86 I = mPragmas.begin(), E = mPragmas.end();
87 I != E && pragmaCount > 0; ++I, --pragmaCount) {
88 if (keyList) { *keyList++ = I->first.c_str(); }
89 if (valueList) { *valueList++ = I->second.c_str(); }
Logan2a6dc822011-01-06 04:05:20 +080090 }
91}
92
Logan7dcaac92011-01-06 04:26:23 +080093
94void *ScriptCompiled::lookup(const char *name) {
Loganf340bf72011-01-14 17:51:40 +080095 FuncInfoMap::const_iterator I = mEmittedFunctions.find(name);
96 return (I == mEmittedFunctions.end()) ? NULL : I->second->addr;
Logan7dcaac92011-01-06 04:26:23 +080097}
98
99
Loganf340bf72011-01-14 17:51:40 +0800100void ScriptCompiled::getFuncInfoList(size_t funcInfoListSize,
101 FuncInfo *funcInfoList) {
102 if (funcInfoList) {
Loganbe79ada2011-01-13 01:33:45 +0800103 size_t funcCount = getFuncCount();
Logan7dcaac92011-01-06 04:26:23 +0800104
Loganf340bf72011-01-14 17:51:40 +0800105 if (funcCount > funcInfoListSize) {
106 funcCount = funcInfoListSize;
Loganbe79ada2011-01-13 01:33:45 +0800107 }
Logan7dcaac92011-01-06 04:26:23 +0800108
Loganf340bf72011-01-14 17:51:40 +0800109 FuncInfo *info = funcInfoList;
110 for (FuncInfoMap::const_iterator
Logan7dcaac92011-01-06 04:26:23 +0800111 I = mEmittedFunctions.begin(), E = mEmittedFunctions.end();
Loganf340bf72011-01-14 17:51:40 +0800112 I != E && funcCount > 0; ++I, ++info, --funcCount) {
113 info->name = I->first.c_str();
114 info->addr = I->second->addr;
115 info->size = I->second->size;
Logan7dcaac92011-01-06 04:26:23 +0800116 }
117 }
118}
119
120
Logan2a6dc822011-01-06 04:05:20 +0800121} // namespace bcc