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 ---