* Copyright 2008-2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Copyright 2003-2011, Axel DΓΆrfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*
* Copyright 2002, Manuel J. Petit. All rights reserved.
* Copyright 2001, Travis Geiselbrecht. All rights reserved.
* Distributed under the terms of the NewOS License.
*/
#ifndef IMAGES_H
#define IMAGES_H
#include <runtime_loader.h>
enum {
RFLAG_WRITABLE = 0x0010,
RFLAG_EXECUTABLE = 0x0020,
RFLAG_ANON = 0x0040,
RFLAG_TERMINATED = 0x0200,
RFLAG_INITIALIZED = 0x0400,
RFLAG_SYMBOLIC = 0x0800,
RFLAG_RELOCATED = 0x1000,
RFLAG_PROTECTED = 0x2000,
RFLAG_DEPENDENCIES_LOADED = 0x4000,
RFLAG_REMAPPED = 0x8000,
RFLAG_VISITED = 0x10000,
RFLAG_USE_FOR_RESOLVING = 0x20000
};
#define IMAGE_TYPE_TO_MASK(type) (1 << ((type) - 1))
#define ALL_IMAGE_TYPES (IMAGE_TYPE_TO_MASK(B_APP_IMAGE) \
| IMAGE_TYPE_TO_MASK(B_LIBRARY_IMAGE) \
| IMAGE_TYPE_TO_MASK(B_ADD_ON_IMAGE) \
| IMAGE_TYPE_TO_MASK(B_SYSTEM_IMAGE))
#define APP_OR_LIBRARY_TYPE (IMAGE_TYPE_TO_MASK(B_APP_IMAGE) \
| IMAGE_TYPE_TO_MASK(B_LIBRARY_IMAGE))
extern bool gInvalidImageIDs;
image_t* create_image(const char* name, const char* path, int regionCount);
void delete_image_struct(image_t* image);
void delete_image(image_t* image);
void put_image(image_t* image);
status_t map_image(int fd, char const* path, image_t* image, bool fixed);
void unmap_image(image_t* image);
void remap_images();
void register_image(image_t* image, int fd, const char* path);
status_t update_image_ids();
image_queue_t& get_loaded_images();
image_queue_t& get_disposable_images();
uint32 count_loaded_images();
void enqueue_loaded_image(image_t* image);
void dequeue_loaded_image(image_t* image);
void dequeue_disposable_image(image_t* image);
image_t* find_loaded_image_by_name(char const* name, uint32 typeMask);
image_t* find_loaded_image_by_id(image_id id, bool ignoreDisposable);
image_t* find_loaded_image_by_address(addr_t address);
void set_image_flags_recursively(image_t* image, uint32 flags);
void clear_image_flags_recursively(image_t* image, uint32 flags);
ssize_t get_sorted_image_list(image_t* image, image_t*** _list,
uint32 sortFlag);
#endif