Commit 2384531d authored by desrt's avatar desrt
Browse files

[project @ 2005-02-19 18:51:19 by desrt]

Linker.c: ELF: Added two utility functions findElfSectionIndexByName
               and findElfSectionByName that are used by the PPC64 linker
               currently being worked on.  These functions should be used
               in other (generic) ELF code too.
parent 11eb56fb
......@@ -2441,6 +2441,65 @@ findElfSection ( void* objImage, Elf_Word sh_type )
return ptr;
}
static int
findElfSectionIndexByName( ObjectCode *oc, const char *sh_name,
Elf_Word expected_type, Elf_Word expected_entsize )
{
Elf_Ehdr *ehdr = (Elf_Ehdr *) oc->image;
Elf_Shdr *shdr = (Elf_Shdr *) (oc->image + ehdr->e_shoff);
char *sectnames = oc->image + shdr[ehdr->e_shstrndx].sh_offset;
int i;
for( i = 0; i < ehdr->e_shnum; i++ )
if( !strcmp( sectnames + shdr[i].sh_name, sh_name ) )
{
if( shdr[i].sh_type != expected_type )
{
errorBelch( "The entry type (%d) of the '%s' section isn't %d\n",
shdr[i].sh_type, sh_name, expected_type );
return -1;
}
if( shdr[i].sh_entsize != expected_entsize )
{
errorBelch( "The entry size (%d) of the '%s' section isn't %d\n",
shdr[i].sh_entsize, sh_name, expected_entsize );
return -1;
}
return i;
}
errorBelch( "This ELF file contains no '%s' section", sh_name );
return -1;
}
static char *
findElfSectionByName( ObjectCode *oc, const char *sh_name,
Elf_Word expected_type, int expected_entsize,
int *num_entries )
{
Elf_Ehdr *ehdr = (Elf_Ehdr *) oc->image;
Elf_Shdr *shdr = (Elf_Shdr *) (oc->image + ehdr->e_shoff);
int section;
section = findElfSectionIndexByName( oc, sh_name, expected_type,
expected_entsize );
if( section < 0 )
return NULL;
/* allow for meaningful results in num_entries even when entsize is 0 */
if( expected_entsize == 0 )
expected_entsize = 1;
if( num_entries )
*num_entries = shdr[section].sh_size / expected_entsize;
return oc->image + shdr[section].sh_offset;
}
#if defined(ia64_HOST_ARCH)
static Elf_Addr
findElfSegment ( void* objImage, Elf_Addr vaddr )
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment