symtab.c revision 2796
2796N/A * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. 2796N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 2796N/A * This code is free software; you can redistribute it and/or modify it 2796N/A * under the terms of the GNU General Public License version 2 only, as 2796N/A * published by the Free Software Foundation. 2796N/A * This code is distributed in the hope that it will be useful, but WITHOUT 2796N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 2796N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 2796N/A * version 2 for more details (a copy is included in the LICENSE file that 2796N/A * You should have received a copy of the GNU General Public License version 2796N/A * 2 along with this work; if not, write to the Free Software Foundation, 2796N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2796N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2796N/A// ---------------------------------------------------- 2796N/A// functions for symbol lookups 2796N/A// ---------------------------------------------------- 2796N/A// read symbol table from given fd. 2796N/A // FIXME: there could be multiple data buffers associated with the 2796N/A // same ELF section. Here we can handle only one buffer. See man page 2796N/A // for elf_getdata on Solaris. 2796N/A // guarantee(symtab == NULL, "multiple symtab"); 2796N/A // create hash table, we use berkeley db to 2796N/A // manipulate the hash table. 2796N/A // guarantee(symtab->hash_table, "unexpected failure: dbopen"); 2796N/A // shdr->sh_link points to the section that contains the actual strings 2796N/A // for symbol names. the st_name field in ELF_SYM is just the 2796N/A // string table index. we make a copy of the string table so the 2796N/A // strings will not be destroyed by elf_end. 2796N/A // allocate memory for storing symbol offset and size; 2796N/A // copy symbols info our symtab and enter them info the hash table 2796N/A // skip non-object and non-function symbols 2796N/A // skip empty strings and undefined symbols 2796N/A // library does not have symbol table