MCPcopy Create free account
hub / github.com/F-Stack/f-stack / preload_delete_name

Function preload_delete_name

freebsd/kern/subr_module.c:210–255  ·  view source on GitHub ↗

* Delete a preload record by name. */

Source from the content-addressed store, hash-verified

208 * Delete a preload record by name.
209 */
210void
211preload_delete_name(const char *name)
212{
213 caddr_t addr, curp;
214 uint32_t *hdr, sz;
215 int next;
216 int clearing;
217
218 addr = 0;
219 sz = 0;
220
221 if (preload_metadata != NULL) {
222 clearing = 0;
223 curp = preload_metadata;
224 for (;;) {
225 hdr = (uint32_t *)curp;
226 if (hdr[0] == MODINFO_NAME || (hdr[0] == 0 && hdr[1] == 0)) {
227 /* Free memory used to store the file. */
228 if (addr != 0 && sz != 0)
229 kmem_bootstrap_free((vm_offset_t)addr, sz);
230 addr = 0;
231 sz = 0;
232
233 if (hdr[0] == 0)
234 break;
235 if (!strcmp(name, curp + sizeof(uint32_t) * 2))
236 clearing = 1; /* got it, start clearing */
237 else if (clearing) {
238 clearing = 0; /* at next one now.. better stop */
239 }
240 }
241 if (clearing) {
242 if (hdr[0] == MODINFO_ADDR)
243 addr = *(caddr_t *)(curp + sizeof(uint32_t) * 2);
244 else if (hdr[0] == MODINFO_SIZE)
245 sz = *(uint32_t *)(curp + sizeof(uint32_t) * 2);
246 hdr[0] = MODINFO_EMPTY;
247 }
248
249 /* skip to next field */
250 next = sizeof(uint32_t) * 2 + hdr[1];
251 next = roundup(next, sizeof(u_long));
252 curp += next;
253 }
254 }
255}
256
257void *
258preload_fetch_addr(caddr_t mod)

Callers 3

link_elf_unload_fileFunction · 0.85
link_elf_unload_preloadFunction · 0.85
ucode_releaseFunction · 0.85

Calls 2

strcmpFunction · 0.85
kmem_bootstrap_freeFunction · 0.50

Tested by

no test coverage detected