xref: /haiku/src/system/runtime_loader/images.h (revision c302a243e15e640fae0f689e32cdf0c18749afee)
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 
53078b88b1SSimon South 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