44f24718b1
* add x86 versions of fnsave frstor. * add missing declaration for elf32_resolve_symbol(). How-to build a x86_64/x86 bootstrap build: mkdir generated_bootstrap; cd generated_bootstrap ../configure --bootstrap /dir/to/haikuporter/haikuporter /dir/to/haikuports.cross \ /dir/to/haikuports --build-cross-tools x86_64 /dir/to/buildtools --build-cross-tools x86 -j8 --use-gcc-pipe jam -q -sHAIKU_PORTER_EXTRA_OPTIONS="-j8 --sourceforge-mirror=freefr --no-source-packages" @bootstrap-raw Change-Id: I6eae3653c42a53683ae307107fae595c4b8ebcfb
97 lines
2.2 KiB
C
97 lines
2.2 KiB
C
/*
|
|
* Copyright 2002-2018, 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 <elf_private.h>
|
|
|
|
#include <image.h>
|
|
|
|
|
|
struct elf_version_info;
|
|
|
|
|
|
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;
|
|
|
|
bool symbolic;
|
|
|
|
elf_ehdr* elf_header;
|
|
|
|
// pointer to symbol participation data structures
|
|
char* needed;
|
|
uint32* symhash;
|
|
elf_sym* syms;
|
|
char* strtab;
|
|
elf_rel* rel;
|
|
int rel_len;
|
|
elf_rela* rela;
|
|
int rela_len;
|
|
elf_rel* pltrel;
|
|
int pltrel_len;
|
|
int pltrel_type;
|
|
|
|
elf_sym* debug_symbols;
|
|
uint32 num_debug_symbols;
|
|
const char* debug_string_table;
|
|
|
|
// versioning related structures
|
|
uint32 num_version_definitions;
|
|
elf_verdef* version_definitions;
|
|
uint32 num_needed_versions;
|
|
elf_verneed* needed_versions;
|
|
elf_versym* symbol_versions;
|
|
struct elf_version_info* versions;
|
|
uint32 num_versions;
|
|
};
|
|
|
|
|
|
#define STRING(image, offset) ((char*)(&(image)->strtab[(offset)]))
|
|
#define SYMNAME(image, sym) STRING(image, (sym)->st_name)
|
|
#define SYMBOL(image, num) (&(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)])
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern status_t elf_resolve_symbol(struct elf_image_info* image,
|
|
elf_sym* symbol, struct elf_image_info* sharedImage,
|
|
elf_addr* _symbolAddress);
|
|
#ifdef _COMPAT_MODE
|
|
extern status_t elf32_resolve_symbol(struct elf_image_info* image,
|
|
elf_sym* symbol, struct elf_image_info* sharedImage,
|
|
elf_addr* _symbolAddress);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* _KERNEL_ELF_PRIV_H */
|