2 * Copyright (c) 2008 Apple Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
28 #ifndef _KXLD_SYMTAB_H_
29 #define _KXLD_SYMTAB_H_
31 #include <sys/types.h>
33 #include <libkern/kxld_types.h>
35 #include "kxld_types.h"
42 struct symtab_command
;
43 typedef struct kxld_symtab KXLDSymtab
;
44 typedef struct kxld_symtab_iterator KXLDSymtabIterator
;
46 struct kxld_symtab_iterator
{
47 const KXLDSymtab
*symtab
;
49 KXLDSymPredicateTest test
;
53 /*******************************************************************************
54 * Constructors and Destructors
55 *******************************************************************************/
57 size_t kxld_symtab_sizeof(void)
58 __attribute__((const, visibility("hidden")));
60 #if KXLD_USER_OR_ILP32
61 kern_return_t
kxld_symtab_init_from_macho_32(KXLDSymtab
*symtab
,
62 struct symtab_command
*src
, u_char
*macho
, KXLDSeg
* kernel_linkedit_seg
)
63 __attribute__((nonnull(1,2), visibility("hidden")));
64 #endif /* KXLD_USER_OR_ILP32 */
67 kern_return_t
kxld_symtab_init_from_macho_64(KXLDSymtab
*symtab
,
68 struct symtab_command
*src
, u_char
*macho
, KXLDSeg
* kernel_linkedit_seg
)
69 __attribute__((nonnull(1,2), visibility("hidden")));
70 #endif /* KXLD_USER_OR_ILP64 */
72 void kxld_symtab_iterator_init(KXLDSymtabIterator
*iter
,
73 const KXLDSymtab
*symtab
, KXLDSymPredicateTest test
, boolean_t negate
)
74 __attribute__((nonnull
, visibility("hidden")));
76 void kxld_symtab_clear(KXLDSymtab
*symtab
)
77 __attribute__((nonnull
, visibility("hidden")));
79 void kxld_symtab_deinit(KXLDSymtab
*symtab
)
80 __attribute__((nonnull
, visibility("hidden")));
82 /*******************************************************************************
84 *******************************************************************************/
86 u_int
kxld_symtab_get_num_symbols(const KXLDSymtab
*symtab
)
87 __attribute__((pure
, nonnull
, visibility("hidden")));
89 KXLDSym
* kxld_symtab_get_symbol_by_index(const KXLDSymtab
*symtab
, u_int idx
)
90 __attribute__((pure
, nonnull
, visibility("hidden")));
92 KXLDSym
* kxld_symtab_get_symbol_by_name(const KXLDSymtab
*symtab
,
94 __attribute__((pure
, nonnull
, visibility("hidden")));
96 KXLDSym
* kxld_symtab_get_locally_defined_symbol_by_name(
97 const KXLDSymtab
*symtab
, const char *name
)
98 __attribute__((pure
, nonnull
, visibility("hidden")));
100 KXLDSym
* kxld_symtab_get_cxx_symbol_by_value(const KXLDSymtab
*symtab
,
102 __attribute__((pure
, nonnull
, visibility("hidden")));
104 kern_return_t
kxld_symtab_get_sym_index(const KXLDSymtab
*symtab
,
105 const KXLDSym
* sym
, u_int
*idx
)
106 __attribute__((nonnull
, visibility("hidden")));
108 u_long
kxld_symtab_get_macho_header_size(void)
109 __attribute__((pure
, visibility("hidden")));
111 u_long
kxld_symtab_get_macho_data_size(const KXLDSymtab
*symtab
,
113 __attribute__((pure
, nonnull
, visibility("hidden")));
116 kxld_symtab_export_macho(const KXLDSymtab
*symtab
, u_char
*buf
,
117 u_long
*header_offset
, u_long header_size
,
118 u_long
*data_offset
, u_long data_size
,
120 __attribute__((nonnull
, visibility("hidden")));
122 u_int
kxld_symtab_iterator_get_num_remaining(const KXLDSymtabIterator
*iter
)
123 __attribute__((pure
, nonnull
, visibility("hidden")));
125 /*******************************************************************************
127 *******************************************************************************/
129 kern_return_t
kxld_symtab_index_symbols_by_name(KXLDSymtab
*symtab
)
130 __attribute__((nonnull
, visibility("hidden")));
132 kern_return_t
kxld_symtab_index_cxx_symbols_by_value(KXLDSymtab
*symtab
)
133 __attribute__((nonnull
, visibility("hidden")));
135 kern_return_t
kxld_symtab_relocate(KXLDSymtab
*symtab
,
136 const struct kxld_array
*sectarray
)
137 __attribute__((nonnull
, visibility("hidden")));
139 kern_return_t
kxld_symtab_add_symbol(KXLDSymtab
*symtab
, char *name
,
140 kxld_addr_t link_addr
, KXLDSym
**symout
)
141 __attribute__((nonnull
, visibility("hidden")));
143 KXLDSym
* kxld_symtab_iterator_get_next(KXLDSymtabIterator
*iter
)
144 __attribute__((nonnull
, visibility("hidden")));
146 void kxld_symtab_iterator_reset(KXLDSymtabIterator
*iter
)
147 __attribute__((nonnull
, visibility("hidden")));
149 #endif /* _KXLD_SYMTAB_H_ */