1/* -*- mode: C++; c-basic-offset: 4; tab-width: 4 -*-
2 *
3 * Copyright (c) 2009-2012 Apple Inc. All rights reserved.
4 *
5 * @APPLE_LICENSE_HEADER_START@
6 *
7 * This file contains Original Code and/or Modifications of Original Code
8 * as defined in and that are subject to the Apple Public Source License
9 * Version 2.0 (the 'License'). You may not use this file except in
10 * compliance with the License. Please obtain a copy of the License at
11 * http://www.opensource.apple.com/apsl/ and read it before using this
12 * file.
13 *
14 * The Original Code and all software distributed under the License are
15 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
19 * Please see the License for the specific language governing rights and
20 * limitations under the License.
21 *
22 * @APPLE_LICENSE_HEADER_END@
23 */
24
25#include <stdint.h>
26#include <uuid/uuid.h>
27
28struct dyld_shared_cache_dylib_info {
29	uint32_t		version;		// initial version 1
30	uint32_t		isAlias;		// this is alternate path (symlink)
31	const void*		machHeader;		// of dylib in mapped cached file
32	const char*		path;			// of dylib
33	const uuid_t*	uuid;			// of dylib, or NULL is missing
34	// above fields all exist in version 1
35};
36typedef struct dyld_shared_cache_dylib_info dyld_shared_cache_dylib_info;
37
38struct dyld_shared_cache_segment_info {
39	uint64_t		version;		// initial version 1
40	const char*		name;			// of segment
41	uint64_t		fileOffset;		// of segment in cache file
42	uint64_t		fileSize;		// of segment
43	uint64_t		address;		// of segment when cache mapped with ASLR (sliding) off
44	// above fields all exist in version 1
45};
46typedef struct dyld_shared_cache_segment_info dyld_shared_cache_segment_info;
47
48
49#ifdef __cplusplus
50extern "C" {
51#endif
52
53
54// Given a pointer and size of an in-memory copy of a dyld shared cache file,
55// this routine will call the callback block once for each segment in each dylib
56// in the shared cache file.
57// Returns -1 if there was an error, otherwise 0.
58extern int dyld_shared_cache_iterate(const void* shared_cache_file, uint32_t shared_cache_size,
59									void (^callback)(const dyld_shared_cache_dylib_info* dylibInfo, const dyld_shared_cache_segment_info* segInfo));
60
61
62
63//
64// The following iterator functions are deprecated:
65//
66typedef void (^dyld_shared_cache_iterator_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t size, uint64_t mappedddress);
67typedef void (^dyld_shared_cache_iterator_slide_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t size, uint64_t mappedddress, uint64_t slide);
68typedef void (*dyld_shared_cache_iterator_nb_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t sizem, uint64_t mappedddress, void* userData);
69typedef void (*dyld_shared_cache_iterator_slide_nb_t)(const char* dylibName, const char* segName, uint64_t offset, uint64_t sizem, uint64_t mappedddress, uint64_t slide, void* userData);
70
71extern int dyld_shared_cache_iterate_segments(const void* shared_cache_file, dyld_shared_cache_iterator_t callback) __attribute__((deprecated));
72extern int dyld_shared_cache_iterate_segments_with_slide(const void* shared_cache_file, dyld_shared_cache_iterator_slide_t callback) __attribute__((deprecated));
73extern int dyld_shared_cache_iterate_segments_nb(const void* shared_cache_file, dyld_shared_cache_iterator_nb_t callback, void* userData) __attribute__((deprecated));
74extern int dyld_shared_cache_iterate_segments_with_slide_nb(const void* shared_cache_file, dyld_shared_cache_iterator_slide_nb_t callback, void* userData) __attribute__((deprecated));
75
76
77#ifdef __cplusplus
78}
79#endif
80