link_elf.c (722b8e3cb62bd3e43035527e08fe058d5046901d) | link_elf.c (7ef5c19b219e47684afd9d8d9126df39edc8d885) |
---|---|
1/*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 1998-2000 Doug Rabson 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 344 unchanged lines hidden (view full) --- 353{ 354 if (filename == NULL) 355 printf("kldload: %s\n", s); 356 else 357 printf("kldload: %s: %s\n", filename, s); 358} 359 360static void | 1/*- 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 1998-2000 Doug Rabson 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 344 unchanged lines hidden (view full) --- 353{ 354 if (filename == NULL) 355 printf("kldload: %s\n", s); 356 else 357 printf("kldload: %s: %s\n", filename, s); 358} 359 360static void |
361link_elf_invoke_ctors(caddr_t addr, size_t size) | 361link_elf_invoke_cbs(caddr_t addr, size_t size) |
362{ 363 void (**ctor)(void); 364 size_t i, cnt; 365 366 if (addr == NULL || size == 0) 367 return; 368 cnt = size / sizeof(*ctor); 369 ctor = (void *)addr; 370 for (i = 0; i < cnt; i++) { 371 if (ctor[i] != NULL) 372 (*ctor[i])(); 373 } 374} 375 | 362{ 363 void (**ctor)(void); 364 size_t i, cnt; 365 366 if (addr == NULL || size == 0) 367 return; 368 cnt = size / sizeof(*ctor); 369 ctor = (void *)addr; 370 for (i = 0; i < cnt; i++) { 371 if (ctor[i] != NULL) 372 (*ctor[i])(); 373 } 374} 375 |
376static void 377link_elf_invoke_ctors(linker_file_t lf) 378{ 379 KASSERT(lf->ctors_invoked == LF_NONE, 380 ("%s: file %s ctor state %d", 381 __func__, lf->filename, lf->ctors_invoked)); 382 383 link_elf_invoke_cbs(lf->ctors_addr, lf->ctors_size); 384 lf->ctors_invoked = LF_CTORS; 385} 386 |
|
376/* 377 * Actions performed after linking/loading both the preloaded kernel and any 378 * modules; whether preloaded or dynamicly loaded. 379 */ 380static int 381link_elf_link_common_finish(linker_file_t lf) 382{ 383#ifdef GDB --- 14 unchanged lines hidden (view full) --- 398 strcpy(newfilename, lf->filename); 399 ef->gdb.l_name = newfilename; 400 ef->gdb.l_ld = ef->dynamic; 401 link_elf_add_gdb(&ef->gdb); 402 GDB_STATE(RT_CONSISTENT); 403#endif 404 405 /* Invoke .ctors */ | 387/* 388 * Actions performed after linking/loading both the preloaded kernel and any 389 * modules; whether preloaded or dynamicly loaded. 390 */ 391static int 392link_elf_link_common_finish(linker_file_t lf) 393{ 394#ifdef GDB --- 14 unchanged lines hidden (view full) --- 409 strcpy(newfilename, lf->filename); 410 ef->gdb.l_name = newfilename; 411 ef->gdb.l_ld = ef->dynamic; 412 link_elf_add_gdb(&ef->gdb); 413 GDB_STATE(RT_CONSISTENT); 414#endif 415 416 /* Invoke .ctors */ |
406 link_elf_invoke_ctors(lf->ctors_addr, lf->ctors_size); | 417 link_elf_invoke_ctors(lf); |
407 return (0); 408} 409 410#ifdef RELOCATABLE_KERNEL 411/* 412 * __startkernel and __endkernel are symbols set up as relocation canaries. 413 * 414 * They are defined in locore to reference linker script symbols at the --- 1632 unchanged lines hidden --- | 418 return (0); 419} 420 421#ifdef RELOCATABLE_KERNEL 422/* 423 * __startkernel and __endkernel are symbols set up as relocation canaries. 424 * 425 * They are defined in locore to reference linker script symbols at the --- 1632 unchanged lines hidden --- |