haiku/headers/private/kernel/elf_priv.h

70 lines
1.7 KiB
C
Raw Normal View History

/*
* Copyright 2002-2007, Haiku Inc. All Rights Reserved.
* Distributed under the terms of the MIT license.
*
* Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
* Distributed under the terms of the NewOS License.
*/
#ifndef _KERNEL_ELF_PRIV_H
#define _KERNEL_ELF_PRIV_H
#include <elf32.h>
#include <image.h>
typedef struct elf_region {
area_id id;
addr_t start;
addr_t size;
long delta;
} elf_region;
struct elf_image_info {
struct elf_image_info *next; // next image in the hash
char *name;
image_id id;
int32 ref_count;
struct vnode *vnode;
elf_region text_region;
elf_region data_region;
addr_t dynamic_section; // pointer to the dynamic section
struct elf_linked_image *linked_images;
struct Elf32_Ehdr *elf_header;
// pointer to symbol participation data structures
char *needed;
uint32 *symhash;
struct Elf32_Sym *syms;
char *strtab;
struct Elf32_Rel *rel;
int rel_len;
struct Elf32_Rela *rela;
int rela_len;
struct Elf32_Rel *pltrel;
int pltrel_len;
int pltrel_type;
struct Elf32_Sym *debug_symbols;
uint32 num_debug_symbols;
const char *debug_string_table;
};
#define STRING(image, offset) ((char *)(&(image)->strtab[(offset)]))
#define SYMNAME(image, sym) STRING(image, (sym)->st_name)
#define SYMBOL(image, num) ((struct Elf32_Sym *)&(image)->syms[num])
#define HASHTABSIZE(image) ((image)->symhash[0])
#define HASHBUCKETS(image) ((unsigned int *)&(image)->symhash[2])
#define HASHCHAINS(image) ((unsigned int *)&(image)->symhash[2+HASHTABSIZE(image)])
extern
#ifdef __cplusplus
"C"
#endif
status_t elf_resolve_symbol(struct elf_image_info *image, struct Elf32_Sym *sym,
struct elf_image_info *shared_image, const char *sym_prepend, addr_t *sym_addr);
#endif /* _KERNEL_ELF_PRIV_H */