194830eb2SIngo Weinhold /* 294830eb2SIngo Weinhold * Copyright 2008-2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3*b6455c08SAxel Dörfler * Copyright 2003-2011, Axel Dörfler, axeld@pinc-software.de. 494830eb2SIngo Weinhold * Distributed under the terms of the MIT License. 594830eb2SIngo Weinhold * 694830eb2SIngo Weinhold * Copyright 2002, Manuel J. Petit. All rights reserved. 794830eb2SIngo Weinhold * Copyright 2001, Travis Geiselbrecht. All rights reserved. 894830eb2SIngo Weinhold * Distributed under the terms of the NewOS License. 994830eb2SIngo Weinhold */ 1094830eb2SIngo Weinhold #ifndef IMAGES_H 1194830eb2SIngo Weinhold #define IMAGES_H 1294830eb2SIngo Weinhold 1394830eb2SIngo Weinhold #include <runtime_loader.h> 1494830eb2SIngo Weinhold 1594830eb2SIngo Weinhold 1694830eb2SIngo Weinhold enum { 1794830eb2SIngo Weinhold // the lower two bits are reserved for RTLD_NOW and RTLD_GLOBAL 1894830eb2SIngo Weinhold 1994830eb2SIngo Weinhold RFLAG_RW = 0x0010, 2094830eb2SIngo Weinhold RFLAG_ANON = 0x0020, 2194830eb2SIngo Weinhold 2294830eb2SIngo Weinhold RFLAG_TERMINATED = 0x0200, 2394830eb2SIngo Weinhold RFLAG_INITIALIZED = 0x0400, 2494830eb2SIngo Weinhold RFLAG_SYMBOLIC = 0x0800, 2594830eb2SIngo Weinhold RFLAG_RELOCATED = 0x1000, 2694830eb2SIngo Weinhold RFLAG_PROTECTED = 0x2000, 2794830eb2SIngo Weinhold RFLAG_DEPENDENCIES_LOADED = 0x4000, 2894830eb2SIngo Weinhold RFLAG_REMAPPED = 0x8000, 2994830eb2SIngo Weinhold 3094830eb2SIngo Weinhold RFLAG_VISITED = 0x10000, 3194830eb2SIngo Weinhold RFLAG_USE_FOR_RESOLVING = 0x20000 3294830eb2SIngo Weinhold // temporarily set in the symbol resolution code 3394830eb2SIngo Weinhold }; 3494830eb2SIngo Weinhold 3594830eb2SIngo Weinhold 3694830eb2SIngo Weinhold #define IMAGE_TYPE_TO_MASK(type) (1 << ((type) - 1)) 3794830eb2SIngo Weinhold #define ALL_IMAGE_TYPES (IMAGE_TYPE_TO_MASK(B_APP_IMAGE) \ 3894830eb2SIngo Weinhold | IMAGE_TYPE_TO_MASK(B_LIBRARY_IMAGE) \ 3994830eb2SIngo Weinhold | IMAGE_TYPE_TO_MASK(B_ADD_ON_IMAGE) \ 4094830eb2SIngo Weinhold | IMAGE_TYPE_TO_MASK(B_SYSTEM_IMAGE)) 4194830eb2SIngo Weinhold #define APP_OR_LIBRARY_TYPE (IMAGE_TYPE_TO_MASK(B_APP_IMAGE) \ 4294830eb2SIngo Weinhold | IMAGE_TYPE_TO_MASK(B_LIBRARY_IMAGE)) 4394830eb2SIngo Weinhold 4494830eb2SIngo Weinhold 4594830eb2SIngo Weinhold extern bool gInvalidImageIDs; 4694830eb2SIngo Weinhold 4794830eb2SIngo Weinhold 4894830eb2SIngo Weinhold image_t* create_image(const char* name, const char* path, int regionCount); 4994830eb2SIngo Weinhold void delete_image_struct(image_t* image); 5094830eb2SIngo Weinhold void delete_image(image_t* image); 5194830eb2SIngo Weinhold void put_image(image_t* image); 5294830eb2SIngo Weinhold 5394830eb2SIngo Weinhold status_t map_image(int fd, char const* path, image_t* image, bool fixed); 5494830eb2SIngo Weinhold void unmap_image(image_t* image); 5594830eb2SIngo Weinhold void remap_images(); 5694830eb2SIngo Weinhold 5794830eb2SIngo Weinhold void register_image(image_t* image, int fd, const char* path); 5894830eb2SIngo Weinhold status_t update_image_ids(); 5994830eb2SIngo Weinhold 6094830eb2SIngo Weinhold image_queue_t& get_loaded_images(); 6194830eb2SIngo Weinhold image_queue_t& get_disposable_images(); 6294830eb2SIngo Weinhold uint32 count_loaded_images(); 6394830eb2SIngo Weinhold void enqueue_loaded_image(image_t* image); 6494830eb2SIngo Weinhold void dequeue_loaded_image(image_t* image); 6594830eb2SIngo Weinhold void dequeue_disposable_image(image_t* image); 6694830eb2SIngo Weinhold 6794830eb2SIngo Weinhold image_t* find_loaded_image_by_name(char const* name, uint32 typeMask); 6894830eb2SIngo Weinhold image_t* find_loaded_image_by_id(image_id id, bool ignoreDisposable); 69*b6455c08SAxel Dörfler image_t* find_loaded_image_by_address(addr_t address); 7094830eb2SIngo Weinhold 7194830eb2SIngo Weinhold void set_image_flags_recursively(image_t* image, uint32 flags); 7294830eb2SIngo Weinhold void clear_image_flags_recursively(image_t* image, uint32 flags); 7394830eb2SIngo Weinhold ssize_t get_sorted_image_list(image_t* image, image_t*** _list, 7494830eb2SIngo Weinhold uint32 sortFlag); 7594830eb2SIngo Weinhold 7694830eb2SIngo Weinhold 7794830eb2SIngo Weinhold #endif // IMAGES_H 78