mirror of
https://review.haiku-os.org/haiku
synced 2025-01-31 18:56:49 +01:00
513403d420
This reverts commit c558f9c8fe54bc14515aa62bac7826271289f0e4. This reverts commit 44f24718b1505e8d9c75e00e59f2f471a79b5f56. This reverts commit a69cb330301c4d697daae57e6019a307f285043e. This reverts commit 951182620e297d10af7fdcfe32f2b04d56086ae9. There have been multiple reports that these changes break mounting NTFS partitions (on all systems, see #14204), and shutting down (on certain systems, see #12405.) Until they can be fixed, they are being backed out.
92 lines
2.0 KiB
C
92 lines
2.0 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 __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif /* _KERNEL_ELF_PRIV_H */
|