1b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines/*
2b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * Copyright 2011-2012, The Android Open Source Project
3b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines *
4b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * Licensed under the Apache License, Version 2.0 (the "License");
5b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * you may not use this file except in compliance with the License.
6b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * You may obtain a copy of the License at
7b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines *
8b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines *     http://www.apache.org/licenses/LICENSE-2.0
9b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines *
10b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * Unless required by applicable law or agreed to in writing, software
11b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
12b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * See the License for the specific language governing permissions and
14b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines * limitations under the License.
15b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines */
16b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
17b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#ifndef LIBRSLOADER_H
18b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#define LIBRSLOADER_H
19b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
20b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#include <stddef.h>
21b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
22b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#ifdef __cplusplus
23b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesextern "C" {
24b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#endif
25b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
26b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesstruct RSExecOpaque;
27b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestypedef struct RSExecOpaque *RSExecRef;
28b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinestypedef void *(*RSFindSymbolFn)(void *, char const *);
29b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
30b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesRSExecRef rsloaderCreateExec(unsigned char const *buf,
31b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines                             size_t buf_size,
32b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines                             RSFindSymbolFn find_symbol,
33b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines                             void *find_symbol_context);
34b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
35b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen HinesRSExecRef rsloaderLoadExecutable(unsigned char const *buf,
36b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines                                 size_t buf_size);
37b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
38b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesint rsloaderRelocateExecutable(RSExecRef object,
39b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines                               RSFindSymbolFn find_symbol,
40b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines                               void *find_symbol_context);
41b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
42b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesvoid rsloaderUpdateSectionHeaders(RSExecRef object, unsigned char *buf);
43b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
44b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesvoid rsloaderDisposeExec(RSExecRef object);
45b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
46b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesvoid *rsloaderGetSymbolAddress(RSExecRef object, char const *name);
47b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
48b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinessize_t rsloaderGetSymbolSize(RSExecRef object, char const *name);
49b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
50b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinessize_t rsloaderGetFuncCount(RSExecRef object);
51b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
52b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hinesvoid rsloaderGetFuncNameList(RSExecRef object, size_t size, char const **list);
53b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
54b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#ifdef __cplusplus
55b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines} /* extern "C" */
56b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#endif
57b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines
58b53c8a59e6f21ed36a0c3d9d4ce5834d4cc3c298Stephen Hines#endif /* LIBRSLOADER_H */
59