Lines Matching +full:data +full:- +full:mapping
2 * Copyright (c) 2013-2019, Intel Corporation
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 #include "intel-pt.h"
38 static int fmap_init(struct pt_sec_file_mapping *mapping) in fmap_init() argument
40 if (!mapping) in fmap_init()
41 return -pte_internal; in fmap_init()
43 memset(mapping, 0, sizeof(*mapping)); in fmap_init()
49 errcode = mtx_init(&mapping->lock, mtx_plain); in fmap_init()
51 return -pte_bad_lock; in fmap_init()
58 static void fmap_fini(struct pt_sec_file_mapping *mapping) in fmap_fini() argument
60 if (!mapping) in fmap_fini()
63 fclose(mapping->file); in fmap_fini()
67 mtx_destroy(&mapping->lock); in fmap_fini()
72 static int fmap_lock(struct pt_sec_file_mapping *mapping) in fmap_lock() argument
74 if (!mapping) in fmap_lock()
75 return -pte_internal; in fmap_lock()
81 errcode = mtx_lock(&mapping->lock); in fmap_lock()
83 return -pte_bad_lock; in fmap_lock()
90 static int fmap_unlock(struct pt_sec_file_mapping *mapping) in fmap_unlock() argument
92 if (!mapping) in fmap_unlock()
93 return -pte_internal; in fmap_unlock()
99 errcode = mtx_unlock(&mapping->lock); in fmap_unlock()
101 return -pte_bad_lock; in fmap_unlock()
110 struct pt_sec_file_mapping *mapping; in pt_sec_file_map() local
116 return -pte_internal; in pt_sec_file_map()
118 mapping = section->mapping; in pt_sec_file_map()
119 if (mapping) in pt_sec_file_map()
120 return -pte_internal; in pt_sec_file_map()
122 offset = section->offset; in pt_sec_file_map()
123 size = section->size; in pt_sec_file_map()
130 return -pte_bad_image; in pt_sec_file_map()
133 return -pte_bad_image; in pt_sec_file_map()
136 return -pte_bad_image; in pt_sec_file_map()
141 return -pte_bad_image; in pt_sec_file_map()
145 return -pte_bad_image; in pt_sec_file_map()
148 return -pte_bad_image; in pt_sec_file_map()
150 mapping = malloc(sizeof(*mapping)); in pt_sec_file_map()
151 if (!mapping) in pt_sec_file_map()
152 return -pte_nomem; in pt_sec_file_map()
154 errcode = fmap_init(mapping); in pt_sec_file_map()
158 mapping->file = file; in pt_sec_file_map()
159 mapping->begin = begin; in pt_sec_file_map()
160 mapping->end = end; in pt_sec_file_map()
162 section->mapping = mapping; in pt_sec_file_map()
163 section->unmap = pt_sec_file_unmap; in pt_sec_file_map()
164 section->read = pt_sec_file_read; in pt_sec_file_map()
165 section->memsize = pt_sec_file_memsize; in pt_sec_file_map()
170 free(mapping); in pt_sec_file_map()
176 struct pt_sec_file_mapping *mapping; in pt_sec_file_unmap() local
179 return -pte_internal; in pt_sec_file_unmap()
181 mapping = section->mapping; in pt_sec_file_unmap()
183 if (!mapping || !section->unmap || !section->read || !section->memsize) in pt_sec_file_unmap()
184 return -pte_internal; in pt_sec_file_unmap()
186 section->mapping = NULL; in pt_sec_file_unmap()
187 section->unmap = NULL; in pt_sec_file_unmap()
188 section->read = NULL; in pt_sec_file_unmap()
189 section->memsize = NULL; in pt_sec_file_unmap()
191 fmap_fini(mapping); in pt_sec_file_unmap()
192 free(mapping); in pt_sec_file_unmap()
200 struct pt_sec_file_mapping *mapping; in pt_sec_file_read() local
207 return -pte_internal; in pt_sec_file_read()
209 mapping = section->mapping; in pt_sec_file_read()
210 if (!mapping) in pt_sec_file_read()
211 return -pte_internal; in pt_sec_file_read()
213 file = mapping->file; in pt_sec_file_read()
221 begin = mapping->begin + (long) offset; in pt_sec_file_read()
223 errcode = fmap_lock(mapping); in pt_sec_file_read()
233 errcode = fmap_unlock(mapping); in pt_sec_file_read()
240 (void) fmap_unlock(mapping); in pt_sec_file_read()
241 return -pte_nomap; in pt_sec_file_read()
247 return -pte_internal; in pt_sec_file_memsize()
249 if (!section->mapping) in pt_sec_file_memsize()
250 return -pte_internal; in pt_sec_file_memsize()