runtime loader: Register extended image info with kernel
Add structure extended_image_info which extends image_info by the fields symbol_table, symbol_hash, string_table.
This commit is contained in:
@@ -7,6 +7,8 @@
|
||||
|
||||
#include <image.h>
|
||||
|
||||
#include <image_defs.h>
|
||||
|
||||
|
||||
struct image;
|
||||
|
||||
@@ -25,7 +27,7 @@ struct image {
|
||||
struct image* next;
|
||||
struct image* prev;
|
||||
struct image* hash_link;
|
||||
image_info info;
|
||||
extended_image_info info;
|
||||
team_id team;
|
||||
};
|
||||
|
||||
@@ -41,8 +43,10 @@ struct image {
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern image_id register_image(Team *team, image_info *info, size_t size);
|
||||
extern image_id register_image(Team *team, extended_image_info *info,
|
||||
size_t size);
|
||||
extern status_t unregister_image(Team *team, image_id id);
|
||||
extern status_t copy_images(team_id fromTeamId, Team *toTeam);
|
||||
extern int32 count_images(Team *team);
|
||||
extern status_t remove_images(Team *team);
|
||||
|
||||
@@ -59,7 +63,8 @@ extern status_t image_init(void);
|
||||
|
||||
// user-space exported calls
|
||||
extern status_t _user_unregister_image(image_id id);
|
||||
extern image_id _user_register_image(image_info *userInfo, size_t size);
|
||||
extern image_id _user_register_image(extended_image_info *userInfo,
|
||||
size_t size);
|
||||
extern void _user_image_relocated(image_id id);
|
||||
extern void _user_loading_app_failed(status_t error);
|
||||
extern status_t _user_get_next_image_info(team_id team, int32 *_cookie,
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
/*
|
||||
* Copyright 2009, Ingo Weinhold, [email protected].
|
||||
* Copyright 2009-2016, Ingo Weinhold, [email protected].
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _SYSTEM_IMAGE_DEFS_H
|
||||
#define _SYSTEM_IMAGE_DEFS_H
|
||||
|
||||
|
||||
#include <SupportDefs.h>
|
||||
#include <image.h>
|
||||
|
||||
|
||||
#define B_SHARED_OBJECT_HAIKU_VERSION_VARIABLE _gSharedObjectHaikuVersion
|
||||
@@ -15,4 +17,12 @@
|
||||
#define B_SHARED_OBJECT_HAIKU_ABI_VARIABLE_NAME "_gSharedObjectHaikuABI"
|
||||
|
||||
|
||||
typedef struct extended_image_info {
|
||||
image_info basic_info;
|
||||
void* symbol_table;
|
||||
void* symbol_hash;
|
||||
void* string_table;
|
||||
} extended_image_info;
|
||||
|
||||
|
||||
#endif /* _SYSTEM_IMAGE_DEFS_H */
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <DiskDeviceDefs.h>
|
||||
#include <elf_private.h>
|
||||
#include <image.h>
|
||||
#include <image_defs.h>
|
||||
#include <OS.h>
|
||||
|
||||
#include <signal.h>
|
||||
@@ -223,7 +224,8 @@ extern status_t _kern_set_signal_stack(const stack_t *newStack,
|
||||
stack_t *oldStack);
|
||||
|
||||
// image functions
|
||||
extern image_id _kern_register_image(image_info *info, size_t size);
|
||||
extern image_id _kern_register_image(extended_image_info *info,
|
||||
size_t size);
|
||||
extern status_t _kern_unregister_image(image_id id);
|
||||
extern void _kern_image_relocated(image_id id);
|
||||
extern void _kern_loading_app_failed(status_t error);
|
||||
|
||||
Reference in New Issue
Block a user