/**************************************************************************** * libs/libc/modlib/modlib.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. The * ASF licenses this file to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. * ****************************************************************************/ #ifndef __LIBS_LIBC_MODLIB_MODLIB_H #define __LIBS_LIBC_MODLIB_MODLIB_H /**************************************************************************** * Included Files ****************************************************************************/ #include #include #include #include /**************************************************************************** * Public Function Prototypes ****************************************************************************/ /**************************************************************************** * Name: modlib_verifyheader * * Description: * Given the header from a possible ELF executable, verify that it is * an ELF executable. * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_verifyheader(FAR const Elf_Ehdr *header); /**************************************************************************** * Name: modlib_findsymtab * * Description: * Find the symbol table section. * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_findsymtab(FAR struct mod_loadinfo_s *loadinfo); /**************************************************************************** * Name: modlib_readsym * * Description: * Read the ELF symbol structure at the specified index into memory. * * Input Parameters: * loadinfo - Load state information * index - Symbol table index * sym - Location to return the table entry * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_readsym(FAR struct mod_loadinfo_s *loadinfo, int index, FAR Elf_Sym *sym, FAR Elf_Shdr *shdr); /**************************************************************************** * Name: modlib_symvalue * * Description: * Get the value of a symbol. The updated value of the symbol is returned * in the st_value field of the symbol table entry. * * Input Parameters: * modp - Module state information * loadinfo - Load state information * sym - Symbol table entry (value might be undefined) * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * * EINVAL - There is something inconsistent in the symbol table (should * only happen if the file is corrupted) * ENOSYS - Symbol lies in common * ESRCH - Symbol has no name * ENOENT - Symbol undefined and not provided via a symbol table * ****************************************************************************/ int modlib_symvalue(FAR struct module_s *modp, FAR struct mod_loadinfo_s *loadinfo, FAR Elf_Sym *sym, Elf_Off offset); /**************************************************************************** * Name: modlib_insertsymtab * * Description: * Insert a symbol table for the current module. * * Input Parameters: * modp - Module state information * loadinfo - Module load information * shdr - Symbol table section header * sym - Symbol table entry * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * * ENOMEM - Symbol undefined and not provided via a symbol table * ****************************************************************************/ int modlib_insertsymtab(FAR struct module_s *modp, FAR struct mod_loadinfo_s *loadinfo, FAR Elf_Shdr *shdr, FAR Elf_Sym *sym); /**************************************************************************** * Name: modlib_findglobal * * Description: * Find a symbol in the global symbol table * * Input Parameters: * modp - Module state information * loadinfo - Module load information * shdr - Symbol table section header * sym - Symbol table entry * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * * ENOMEM - Symbol undefined and not provided via a symbol table * ****************************************************************************/ void *modlib_findglobal(FAR struct module_s *modp, FAR struct mod_loadinfo_s *loadinfo, FAR Elf_Shdr *shdr, FAR Elf_Sym *sym); /**************************************************************************** * Name: modlib_loadhdrs * * Description: * Loads program and section headers into memory. * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_loadhdrs(FAR struct mod_loadinfo_s *loadinfo); /**************************************************************************** * Name: modlib_findsection * * Description: * A section by its name. * * Input Parameters: * loadinfo - Load state information * sectname - Name of the section to find * * Returned Value: * On success, the index to the section is returned; A negated errno value * is returned on failure. * ****************************************************************************/ int modlib_findsection(FAR struct mod_loadinfo_s *loadinfo, FAR const char *sectname); /**************************************************************************** * Name: modlib_allocbuffer * * Description: * Perform the initial allocation of the I/O buffer, if it has not already * been allocated. * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_allocbuffer(FAR struct mod_loadinfo_s *loadinfo); /**************************************************************************** * Name: modlib_reallocbuffer * * Description: * Increase the size of I/O buffer by the specified buffer increment. * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_reallocbuffer(FAR struct mod_loadinfo_s *loadinfo, size_t increment); /**************************************************************************** * Name: modlib_freebuffers * * Description: * Release all working buffers. * * Returned Value: * 0 (OK) is returned on success and a negated errno is returned on * failure. * ****************************************************************************/ int modlib_freebuffers(FAR struct mod_loadinfo_s *loadinfo); #endif /* __LIBS_LIBC_MODLIB_MODLIB_H */