link_elf.c (685dc743dc3b5645e34836464128e1c0558b404b) | link_elf.c (110113bc086f5df1a9b6547edb1ab0cec698c55c) |
---|---|
1/*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 1998-2000 Doug Rabson 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 146 unchanged lines hidden (view full) --- 155 void ***, void ***, int *); 156static int link_elf_each_function_name(linker_file_t, 157 int (*)(const char *, void *), void *); 158static int link_elf_each_function_nameval(linker_file_t, 159 linker_function_nameval_callback_t, void *); 160static void link_elf_reloc_local(linker_file_t); 161static long link_elf_symtab_get(linker_file_t, const Elf_Sym **); 162static long link_elf_strtab_get(linker_file_t, caddr_t *); | 1/*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 1998-2000 Doug Rabson 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 146 unchanged lines hidden (view full) --- 155 void ***, void ***, int *); 156static int link_elf_each_function_name(linker_file_t, 157 int (*)(const char *, void *), void *); 158static int link_elf_each_function_nameval(linker_file_t, 159 linker_function_nameval_callback_t, void *); 160static void link_elf_reloc_local(linker_file_t); 161static long link_elf_symtab_get(linker_file_t, const Elf_Sym **); 162static long link_elf_strtab_get(linker_file_t, caddr_t *); |
163#ifdef VIMAGE 164static void link_elf_propagate_vnets(linker_file_t); 165#endif |
|
163static int elf_lookup(linker_file_t, Elf_Size, int, Elf_Addr *); 164 165static kobj_method_t link_elf_methods[] = { 166 KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol), 167 KOBJMETHOD(linker_lookup_debug_symbol, link_elf_lookup_debug_symbol), 168 KOBJMETHOD(linker_symbol_values, link_elf_symbol_values), 169 KOBJMETHOD(linker_debug_symbol_values, link_elf_debug_symbol_values), 170 KOBJMETHOD(linker_search_symbol, link_elf_search_symbol), 171 KOBJMETHOD(linker_unload, link_elf_unload_file), 172 KOBJMETHOD(linker_load_file, link_elf_load_file), 173 KOBJMETHOD(linker_link_preload, link_elf_link_preload), 174 KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish), 175 KOBJMETHOD(linker_lookup_set, link_elf_lookup_set), 176 KOBJMETHOD(linker_each_function_name, link_elf_each_function_name), 177 KOBJMETHOD(linker_each_function_nameval, link_elf_each_function_nameval), 178 KOBJMETHOD(linker_ctf_get, link_elf_ctf_get), 179 KOBJMETHOD(linker_symtab_get, link_elf_symtab_get), 180 KOBJMETHOD(linker_strtab_get, link_elf_strtab_get), | 166static int elf_lookup(linker_file_t, Elf_Size, int, Elf_Addr *); 167 168static kobj_method_t link_elf_methods[] = { 169 KOBJMETHOD(linker_lookup_symbol, link_elf_lookup_symbol), 170 KOBJMETHOD(linker_lookup_debug_symbol, link_elf_lookup_debug_symbol), 171 KOBJMETHOD(linker_symbol_values, link_elf_symbol_values), 172 KOBJMETHOD(linker_debug_symbol_values, link_elf_debug_symbol_values), 173 KOBJMETHOD(linker_search_symbol, link_elf_search_symbol), 174 KOBJMETHOD(linker_unload, link_elf_unload_file), 175 KOBJMETHOD(linker_load_file, link_elf_load_file), 176 KOBJMETHOD(linker_link_preload, link_elf_link_preload), 177 KOBJMETHOD(linker_link_preload_finish, link_elf_link_preload_finish), 178 KOBJMETHOD(linker_lookup_set, link_elf_lookup_set), 179 KOBJMETHOD(linker_each_function_name, link_elf_each_function_name), 180 KOBJMETHOD(linker_each_function_nameval, link_elf_each_function_nameval), 181 KOBJMETHOD(linker_ctf_get, link_elf_ctf_get), 182 KOBJMETHOD(linker_symtab_get, link_elf_symtab_get), 183 KOBJMETHOD(linker_strtab_get, link_elf_strtab_get), |
184#ifdef VIMAGE 185 KOBJMETHOD(linker_propagate_vnets, link_elf_propagate_vnets), 186#endif |
|
181 KOBJMETHOD_END 182}; 183 184static struct linker_class link_elf_class = { 185#if ELF_TARG_CLASS == ELFCLASS32 186 "elf32", 187#else 188 "elf64", --- 1729 unchanged lines hidden (view full) --- 1918 *strtab = ef->ddbstrtab; 1919 1920 if (*strtab == NULL) 1921 return (0); 1922 1923 return (ef->ddbstrcnt); 1924} 1925 | 187 KOBJMETHOD_END 188}; 189 190static struct linker_class link_elf_class = { 191#if ELF_TARG_CLASS == ELFCLASS32 192 "elf32", 193#else 194 "elf64", --- 1729 unchanged lines hidden (view full) --- 1924 *strtab = ef->ddbstrtab; 1925 1926 if (*strtab == NULL) 1927 return (0); 1928 1929 return (ef->ddbstrcnt); 1930} 1931 |
1932#ifdef VIMAGE 1933static void 1934link_elf_propagate_vnets(linker_file_t lf) 1935{ 1936 elf_file_t ef = (elf_file_t)lf; 1937 int size; 1938 1939 if (ef->vnet_base != 0) { 1940 size = (uintptr_t)ef->vnet_stop - (uintptr_t)ef->vnet_start; 1941 vnet_data_copy((void *)ef->vnet_base, size); 1942 } 1943} 1944#endif 1945 |
|
1926#if defined(__i386__) || defined(__amd64__) || defined(__aarch64__) || defined(__powerpc__) 1927/* 1928 * Use this lookup routine when performing relocations early during boot. 1929 * The generic lookup routine depends on kobj, which is not initialized 1930 * at that point. 1931 */ 1932static int 1933elf_lookup_ifunc(linker_file_t lf, Elf_Size symidx, int deps __unused, --- 56 unchanged lines hidden --- | 1946#if defined(__i386__) || defined(__amd64__) || defined(__aarch64__) || defined(__powerpc__) 1947/* 1948 * Use this lookup routine when performing relocations early during boot. 1949 * The generic lookup routine depends on kobj, which is not initialized 1950 * at that point. 1951 */ 1952static int 1953elf_lookup_ifunc(linker_file_t lf, Elf_Size symidx, int deps __unused, --- 56 unchanged lines hidden --- |