link_elf_obj.c (188440) | link_elf_obj.c (192859) |
---|---|
1/*- 2 * Copyright (c) 1998-2000 Doug Rabson 3 * Copyright (c) 2004 Peter Wemm 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1998-2000 Doug Rabson 3 * Copyright (c) 2004 Peter Wemm 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 12 unchanged lines hidden (view full) --- 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 */ 27 28#include <sys/cdefs.h> |
29__FBSDID("$FreeBSD: head/sys/kern/link_elf_obj.c 188440 2009-02-10 15:50:19Z attilio $"); | 29__FBSDID("$FreeBSD: head/sys/kern/link_elf_obj.c 192859 2009-05-26 21:39:09Z sson $"); |
30 31#include "opt_ddb.h" 32#include "opt_mac.h" 33 34#include <sys/param.h> 35#include <sys/systm.h> 36#include <sys/kernel.h> 37#include <sys/lock.h> --- 97 unchanged lines hidden (view full) --- 135static int link_elf_lookup_set(linker_file_t, const char *, 136 void ***, void ***, int *); 137static int link_elf_each_function_name(linker_file_t, 138 int (*)(const char *, void *), void *); 139static int link_elf_each_function_nameval(linker_file_t, 140 linker_function_nameval_callback_t, 141 void *); 142static void link_elf_reloc_local(linker_file_t); | 30 31#include "opt_ddb.h" 32#include "opt_mac.h" 33 34#include <sys/param.h> 35#include <sys/systm.h> 36#include <sys/kernel.h> 37#include <sys/lock.h> --- 97 unchanged lines hidden (view full) --- 135static int link_elf_lookup_set(linker_file_t, const char *, 136 void ***, void ***, int *); 137static int link_elf_each_function_name(linker_file_t, 138 int (*)(const char *, void *), void *); 139static int link_elf_each_function_nameval(linker_file_t, 140 linker_function_nameval_callback_t, 141 void *); 142static void link_elf_reloc_local(linker_file_t); |
143static long link_elf_symtab_get(linker_file_t, Elf_Sym **); 144static long link_elf_strtab_get(linker_file_t, caddr_t *); |
|
143 144static Elf_Addr elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps); 145 146static kobj_method_t link_elf_methods[] = { 147 KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol), 148 KOBJMETHOD(linker_symbol_values, link_elf_symbol_values), 149 KOBJMETHOD(linker_search_symbol, link_elf_search_symbol), 150 KOBJMETHOD(linker_unload, link_elf_unload_file), 151 KOBJMETHOD(linker_load_file, link_elf_load_file), 152 KOBJMETHOD(linker_link_preload, link_elf_link_preload), 153 KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish), 154 KOBJMETHOD(linker_lookup_set, link_elf_lookup_set), 155 KOBJMETHOD(linker_each_function_name, link_elf_each_function_name), 156 KOBJMETHOD(linker_each_function_nameval, link_elf_each_function_nameval), 157 KOBJMETHOD(linker_ctf_get, link_elf_ctf_get), | 145 146static Elf_Addr elf_obj_lookup(linker_file_t lf, Elf_Size symidx, int deps); 147 148static kobj_method_t link_elf_methods[] = { 149 KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol), 150 KOBJMETHOD(linker_symbol_values, link_elf_symbol_values), 151 KOBJMETHOD(linker_search_symbol, link_elf_search_symbol), 152 KOBJMETHOD(linker_unload, link_elf_unload_file), 153 KOBJMETHOD(linker_load_file, link_elf_load_file), 154 KOBJMETHOD(linker_link_preload, link_elf_link_preload), 155 KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish), 156 KOBJMETHOD(linker_lookup_set, link_elf_lookup_set), 157 KOBJMETHOD(linker_each_function_name, link_elf_each_function_name), 158 KOBJMETHOD(linker_each_function_nameval, link_elf_each_function_nameval), 159 KOBJMETHOD(linker_ctf_get, link_elf_ctf_get), |
160 KOBJMETHOD(linker_symtab_get, link_elf_symtab_get), 161 KOBJMETHOD(linker_strtab_get, link_elf_strtab_get), |
|
158 { 0, 0 } 159}; 160 161static struct linker_class link_elf_class = { 162#if ELF_TARG_CLASS == ELFCLASS32 163 "elf32_obj", 164#else 165 "elf64_obj", --- 1115 unchanged lines hidden (view full) --- 1281 /* Only do local relocs */ 1282 if (ELF_ST_BIND(sym->st_info) != STB_LOCAL) 1283 continue; 1284 elf_reloc_local(lf, base, rela, ELF_RELOC_RELA, 1285 elf_obj_lookup); 1286 } 1287 } 1288} | 162 { 0, 0 } 163}; 164 165static struct linker_class link_elf_class = { 166#if ELF_TARG_CLASS == ELFCLASS32 167 "elf32_obj", 168#else 169 "elf64_obj", --- 1115 unchanged lines hidden (view full) --- 1285 /* Only do local relocs */ 1286 if (ELF_ST_BIND(sym->st_info) != STB_LOCAL) 1287 continue; 1288 elf_reloc_local(lf, base, rela, ELF_RELOC_RELA, 1289 elf_obj_lookup); 1290 } 1291 } 1292} |
1293 1294static long 1295link_elf_symtab_get(linker_file_t lf, Elf_Sym **symtab) 1296{ 1297 elf_file_t ef = (elf_file_t)lf; 1298 1299 *symtab = ef->ddbsymtab; 1300 1301 if (*symtab == NULL) 1302 return (0); 1303 1304 return (ef->ddbsymcnt); 1305} 1306 1307static long 1308link_elf_strtab_get(linker_file_t lf, caddr_t *strtab) 1309{ 1310 elf_file_t ef = (elf_file_t)lf; 1311 1312 *strtab = ef->ddbstrtab; 1313 1314 if (*strtab == NULL) 1315 return (0); 1316 1317 return (ef->ddbstrcnt); 1318} |
|