summaryrefslogtreecommitdiffstats
path: root/libelf/gelf_getsym.c
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:22 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:22 -0800
commit7a80622f69812ca3262d2027c07a4ed0c0242945 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /libelf/gelf_getsym.c
parentee6008996aa701ad2a50d5d6b1529c9e2c2724c1 (diff)
downloadandroid_external_elfutils-7a80622f69812ca3262d2027c07a4ed0c0242945.tar.gz
android_external_elfutils-7a80622f69812ca3262d2027c07a4ed0c0242945.tar.bz2
android_external_elfutils-7a80622f69812ca3262d2027c07a4ed0c0242945.zip
auto import from //depot/cupcake/@135843
Diffstat (limited to 'libelf/gelf_getsym.c')
-rw-r--r--libelf/gelf_getsym.c105
1 files changed, 0 insertions, 105 deletions
diff --git a/libelf/gelf_getsym.c b/libelf/gelf_getsym.c
deleted file mode 100644
index 90536c60..00000000
--- a/libelf/gelf_getsym.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Get symbol information from symbol table at the given index.
- Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc.
- Written by Ulrich Drepper <drepper@redhat.com>, 1999.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, version 2.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <assert.h>
-#include <gelf.h>
-#include <string.h>
-
-#include "libelfP.h"
-
-
-GElf_Sym *
-gelf_getsym (data, ndx, dst)
- Elf_Data *data;
- int ndx;
- GElf_Sym *dst;
-{
- Elf_Data_Scn *data_scn = (Elf_Data_Scn *) data;
- GElf_Sym *result = NULL;
-
- if (data == NULL)
- return NULL;
-
- if (unlikely (data->d_type != ELF_T_SYM))
- {
- __libelf_seterrno (ELF_E_INVALID_HANDLE);
- return NULL;
- }
-
- rwlock_rdlock (data_scn->s->elf->lock);
-
- /* This is the one place where we have to take advantage of the fact
- that an `Elf_Data' pointer is also a pointer to `Elf_Data_Scn'.
- The interface is broken so that it requires this hack. */
- if (data_scn->s->elf->class == ELFCLASS32)
- {
- Elf32_Sym *src;
-
- /* Here it gets a bit more complicated. The format of the symbol
- table entries has to be adopted. The user better has provided
- a buffer where we can store the information. While copying the
- data we are converting the format. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Sym) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- src = &((Elf32_Sym *) data->d_buf)[ndx];
-
- /* This might look like a simple copy operation but it's
- not. There are zero- and sign-extensions going on. */
-#define COPY(name) \
- dst->name = src->name
- COPY (st_name);
- /* Please note that we can simply copy the `st_info' element since
- the definitions of ELFxx_ST_BIND and ELFxx_ST_TYPE are the same
- for the 64 bit variant. */
- COPY (st_info);
- COPY (st_other);
- COPY (st_shndx);
- COPY (st_value);
- COPY (st_size);
- }
- else
- {
- /* If this is a 64 bit object it's easy. */
- assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
-
- /* The data is already in the correct form. Just make sure the
- index is OK. */
- if (unlikely ((ndx + 1) * sizeof (GElf_Sym) > data->d_size))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- goto out;
- }
-
- *dst = ((GElf_Sym *) data->d_buf)[ndx];
- }
-
- result = dst;
-
- out:
- rwlock_unlock (data_scn->s->elf->lock);
-
- return result;
-}
-INTDEF(gelf_getsym)