Deleted Added
full compact
link_elf_obj.c (85735) link_elf_obj.c (85736)
1/*-
2 * Copyright (c) 1998-2000 Doug Rabson
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
1/*-
2 * Copyright (c) 1998-2000 Doug Rabson
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 9 unchanged lines hidden (view full) ---

18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: head/sys/kern/link_elf_obj.c 85735 2001-10-30 15:10:16Z green $
26 * $FreeBSD: head/sys/kern/link_elf_obj.c 85736 2001-10-30 15:21:45Z green $
27 */
28
29#include "opt_ddb.h"
30
31#include <sys/param.h>
32#include <sys/systm.h>
33#include <sys/kernel.h>
34#include <sys/lock.h>

--- 73 unchanged lines hidden (view full) ---

108static int link_elf_symbol_values(linker_file_t, c_linker_sym_t, linker_symval_t*);
109static int link_elf_search_symbol(linker_file_t, caddr_t value,
110 c_linker_sym_t* sym, long* diffp);
111
112static void link_elf_unload_file(linker_file_t);
113static void link_elf_unload_preload(linker_file_t);
114static int link_elf_lookup_set(linker_file_t, const char *,
115 void ***, void ***, int *);
27 */
28
29#include "opt_ddb.h"
30
31#include <sys/param.h>
32#include <sys/systm.h>
33#include <sys/kernel.h>
34#include <sys/lock.h>

--- 73 unchanged lines hidden (view full) ---

108static int link_elf_symbol_values(linker_file_t, c_linker_sym_t, linker_symval_t*);
109static int link_elf_search_symbol(linker_file_t, caddr_t value,
110 c_linker_sym_t* sym, long* diffp);
111
112static void link_elf_unload_file(linker_file_t);
113static void link_elf_unload_preload(linker_file_t);
114static int link_elf_lookup_set(linker_file_t, const char *,
115 void ***, void ***, int *);
116static int link_elf_each_function_name(linker_file_t,
117 int (*)(const char *, void *),
118 void *);
116
117static kobj_method_t link_elf_methods[] = {
118 KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol),
119 KOBJMETHOD(linker_symbol_values, link_elf_symbol_values),
120 KOBJMETHOD(linker_search_symbol, link_elf_search_symbol),
121 KOBJMETHOD(linker_unload, link_elf_unload_file),
122 KOBJMETHOD(linker_load_file, link_elf_load_file),
123 KOBJMETHOD(linker_link_preload, link_elf_link_preload),
124 KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish),
125 KOBJMETHOD(linker_lookup_set, link_elf_lookup_set),
119
120static kobj_method_t link_elf_methods[] = {
121 KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol),
122 KOBJMETHOD(linker_symbol_values, link_elf_symbol_values),
123 KOBJMETHOD(linker_search_symbol, link_elf_search_symbol),
124 KOBJMETHOD(linker_unload, link_elf_unload_file),
125 KOBJMETHOD(linker_load_file, link_elf_load_file),
126 KOBJMETHOD(linker_link_preload, link_elf_link_preload),
127 KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish),
128 KOBJMETHOD(linker_lookup_set, link_elf_lookup_set),
129 KOBJMETHOD(linker_each_function_name, link_elf_each_function_name),
126 { 0, 0 }
127};
128
129static struct linker_class link_elf_class = {
130#if ELF_TARG_CLASS == ELFCLASS32
131 "elf32",
132#else
133 "elf64",

--- 1010 unchanged lines hidden (view full) ---

1144 *stopp = stop;
1145 if (countp)
1146 *countp = count;
1147
1148out:
1149 free(setsym, M_LINKER);
1150 return error;
1151}
130 { 0, 0 }
131};
132
133static struct linker_class link_elf_class = {
134#if ELF_TARG_CLASS == ELFCLASS32
135 "elf32",
136#else
137 "elf64",

--- 1010 unchanged lines hidden (view full) ---

1148 *stopp = stop;
1149 if (countp)
1150 *countp = count;
1151
1152out:
1153 free(setsym, M_LINKER);
1154 return error;
1155}
1156
1157static int
1158link_elf_each_function_name(linker_file_t file,
1159 int (*callback)(const char *, void *), void *opaque) {
1160 elf_file_t ef = (elf_file_t)file;
1161 const Elf_Sym* symp;
1162 int i, error;
1163
1164 /* Exhaustive search */
1165 for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) {
1166 if (symp->st_value != 0 &&
1167 ELF_ST_TYPE(symp->st_info) == STT_FUNC) {
1168 error = callback(ef->ddbstrtab + symp->st_name, opaque);
1169 if (error)
1170 return (error);
1171 }
1172 }
1173 return (0);
1174}