source: rtems/cpukit/sapi/src/sysinitverbose.c @ 8ecbc38

5
Last change on this file since 8ecbc38 was 8ecbc38, checked in by Sebastian Huber <sebastian.huber@…>, on 02/04/20 at 12:56:41

sysinit: Add RTEMS_SYSINIT_ZERO_MEMORY

Use a dedicate system initialization step to zero the memory used for
the workspace and C program heap.

This avoids dead code in case CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY is
not configured.

  • Property mode set to 100644
File size: 14.5 KB
Line 
1/*
2 * SPDX-License-Identifier: BSD-2-Clause
3 *
4 * Copyright (C) 2020 embedded brains GmbH
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include <rtems/sysinit.h>
29#include <rtems/score/memory.h>
30#include <rtems/bspIo.h>
31
32#include <inttypes.h>
33
34RTEMS_LINKER_RWSET_ITEM_DECLARE(
35  _Sysinit,
36  rtems_sysinit_item,
37  _Sysinit_Verbose
38);
39
40#define SYSINIT_VERBOSE(x) \
41  static void _Sysinit_Verbose_##x( void ); \
42  RTEMS_SYSINIT_ITEM( \
43    _Sysinit_Verbose_##x, \
44    RTEMS_SYSINIT_##x, \
45    RTEMS_SYSINIT_ORDER_LAST \
46  )
47
48SYSINIT_VERBOSE( BSP_EARLY );
49SYSINIT_VERBOSE( MEMORY );
50SYSINIT_VERBOSE( DIRTY_MEMORY );
51SYSINIT_VERBOSE( ZERO_MEMORY );
52SYSINIT_VERBOSE( ISR_STACK );
53SYSINIT_VERBOSE( PER_CPU_DATA );
54SYSINIT_VERBOSE( SBRK );
55SYSINIT_VERBOSE( WORKSPACE );
56SYSINIT_VERBOSE( MALLOC );
57SYSINIT_VERBOSE( BSP_START );
58SYSINIT_VERBOSE( CPU_COUNTER );
59SYSINIT_VERBOSE( INITIAL_EXTENSIONS );
60SYSINIT_VERBOSE( MP_EARLY );
61SYSINIT_VERBOSE( DATA_STRUCTURES );
62SYSINIT_VERBOSE( MP );
63SYSINIT_VERBOSE( USER_EXTENSIONS );
64SYSINIT_VERBOSE( CLASSIC_TASKS );
65SYSINIT_VERBOSE( CLASSIC_TASKS_MP );
66SYSINIT_VERBOSE( CLASSIC_TIMER );
67SYSINIT_VERBOSE( CLASSIC_SIGNAL_MP );
68SYSINIT_VERBOSE( CLASSIC_EVENT_MP );
69SYSINIT_VERBOSE( CLASSIC_MESSAGE_QUEUE );
70SYSINIT_VERBOSE( CLASSIC_MESSAGE_QUEUE_MP );
71SYSINIT_VERBOSE( CLASSIC_SEMAPHORE );
72SYSINIT_VERBOSE( CLASSIC_SEMAPHORE_MP );
73SYSINIT_VERBOSE( CLASSIC_PARTITION );
74SYSINIT_VERBOSE( CLASSIC_PARTITION_MP );
75SYSINIT_VERBOSE( CLASSIC_REGION );
76SYSINIT_VERBOSE( CLASSIC_DUAL_PORTED_MEMORY );
77SYSINIT_VERBOSE( CLASSIC_RATE_MONOTONIC );
78SYSINIT_VERBOSE( CLASSIC_BARRIER );
79SYSINIT_VERBOSE( POSIX_SIGNALS );
80SYSINIT_VERBOSE( POSIX_THREADS );
81SYSINIT_VERBOSE( POSIX_MESSAGE_QUEUE );
82SYSINIT_VERBOSE( POSIX_SEMAPHORE );
83SYSINIT_VERBOSE( POSIX_TIMER );
84SYSINIT_VERBOSE( POSIX_SHM );
85SYSINIT_VERBOSE( POSIX_KEYS );
86SYSINIT_VERBOSE( POSIX_CLEANUP );
87SYSINIT_VERBOSE( IDLE_THREADS );
88SYSINIT_VERBOSE( LIBIO );
89SYSINIT_VERBOSE( ROOT_FILESYSTEM );
90SYSINIT_VERBOSE( DRVMGR );
91SYSINIT_VERBOSE( MP_SERVER );
92SYSINIT_VERBOSE( BSP_PRE_DRIVERS );
93SYSINIT_VERBOSE( DRVMGR_LEVEL_1 );
94SYSINIT_VERBOSE( DEVICE_DRIVERS );
95SYSINIT_VERBOSE( DRVMGR_LEVEL_2 );
96SYSINIT_VERBOSE( DRVMGR_LEVEL_3 );
97SYSINIT_VERBOSE( DRVMGR_LEVEL_4 );
98SYSINIT_VERBOSE( MP_FINALIZE );
99SYSINIT_VERBOSE( CLASSIC_USER_TASKS );
100SYSINIT_VERBOSE( POSIX_USER_THREADS );
101SYSINIT_VERBOSE( STD_FILE_DESCRIPTORS );
102SYSINIT_VERBOSE( LAST );
103
104static bool _Sysinit_Verbose_is_adjacent(
105  const rtems_sysinit_item *a,
106  const rtems_sysinit_item *b
107)
108{
109  RTEMS_OBFUSCATE_VARIABLE( a );
110  RTEMS_OBFUSCATE_VARIABLE( b );
111
112  return a + 1 == b;
113}
114
115#define SYSINIT_IS_ADJACENT( x, y ) \
116  _Sysinit_Verbose_is_adjacent( \
117    &_Linker_set__Sysinit__Sysinit_Verbose_##x, \
118    &_Linker_set__Sysinit__Sysinit_Verbose_##y \
119  )
120
121static void _Sysinit_Print_free_memory( void )
122{
123  const Memory_Information *mem;
124  size_t                    i;
125
126  mem = _Memory_Get();
127
128  for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
129    const Memory_Area *area;
130
131    area = _Memory_Get_area( mem, i );
132    printk(
133      "sysinit: memory area %zu: free begin = 0x%08" PRIxPTR
134        ", free size = 0x%08" PRIxPTR "\n",
135      i,
136      (uintptr_t) _Memory_Get_free_begin( area ),
137      _Memory_Get_free_size( area )
138    );
139  }
140}
141
142void _Sysinit_Verbose( void )
143{
144  printk( "sysinit: begin\n" );
145}
146
147static void _Sysinit_Verbose_BSP_EARLY( void )
148{
149  if (
150    !_Sysinit_Verbose_is_adjacent(
151      &_Linker_set__Sysinit__Sysinit_Verbose,
152      &_Linker_set__Sysinit__Sysinit_Verbose_BSP_EARLY
153    )
154  ) {
155    printk( "sysinit: BSP early: done\n" );
156  }
157}
158
159static void _Sysinit_Verbose_MEMORY( void )
160{
161  const Memory_Information *mem;
162  size_t                    i;
163
164  if ( !SYSINIT_IS_ADJACENT( BSP_EARLY, MEMORY ) ) {
165    printk( "sysinit: memory: done\n" );
166  }
167
168  printk(
169    "sysinit: stack pointer: 0x%08" PRIxPTR "\n",
170    (uintptr_t) __builtin_frame_address( 0 )
171  );
172
173  mem = _Memory_Get();
174
175  for ( i = 0; i < _Memory_Get_count( mem ); ++i ) {
176    const Memory_Area *area;
177
178    area = _Memory_Get_area( mem, i );
179    printk(
180      "sysinit: memory area %zu: begin = 0x%08" PRIxPTR
181        ", size = 0x%08" PRIxPTR "\n",
182      i,
183      (uintptr_t) _Memory_Get_begin( area ),
184      _Memory_Get_size( area )
185    );
186  }
187}
188
189static void _Sysinit_Verbose_DIRTY_MEMORY( void )
190{
191  if ( !SYSINIT_IS_ADJACENT( BSP_EARLY, DIRTY_MEMORY ) ) {
192    printk( "sysinit: DIRTY_MEMORY: done\n" );
193  }
194}
195
196static void _Sysinit_Verbose_ZERO_MEMORY( void )
197{
198  if ( !SYSINIT_IS_ADJACENT( DIRTY_MEMORY, ZERO_MEMORY ) ) {
199    printk( "sysinit: ZERO_MEMORY: done\n" );
200  }
201}
202
203static void _Sysinit_Verbose_ISR_STACK( void )
204{
205  if ( !SYSINIT_IS_ADJACENT( ZERO_MEMORY, ISR_STACK ) ) {
206    printk( "sysinit: ISR_STACK: done\n" );
207  }
208}
209
210static void _Sysinit_Verbose_PER_CPU_DATA( void )
211{
212  if ( !SYSINIT_IS_ADJACENT( ISR_STACK, PER_CPU_DATA ) ) {
213    _Sysinit_Print_free_memory();
214    printk( "sysinit: PER_CPU_DATA: done\n" );
215  }
216}
217
218static void _Sysinit_Verbose_SBRK( void )
219{
220  if ( !SYSINIT_IS_ADJACENT( PER_CPU_DATA, SBRK ) ) {
221    _Sysinit_Print_free_memory();
222    printk( "sysinit: SBRK: done\n" );
223  }
224}
225
226static void _Sysinit_Verbose_WORKSPACE( void )
227{
228  if ( !SYSINIT_IS_ADJACENT( SBRK, WORKSPACE ) ) {
229    _Sysinit_Print_free_memory();
230    printk( "sysinit: WORKSPACE: done\n" );
231  }
232}
233
234static void _Sysinit_Verbose_MALLOC( void )
235{
236  if ( !SYSINIT_IS_ADJACENT( WORKSPACE, MALLOC ) ) {
237    _Sysinit_Print_free_memory();
238    printk( "sysinit: MALLOC: done\n" );
239  }
240}
241
242static void _Sysinit_Verbose_BSP_START( void )
243{
244  if ( !SYSINIT_IS_ADJACENT( MALLOC, BSP_START ) ) {
245    printk( "sysinit: BSP_START: done\n" );
246  }
247}
248
249static void _Sysinit_Verbose_CPU_COUNTER( void )
250{
251  if ( !SYSINIT_IS_ADJACENT( BSP_START, CPU_COUNTER ) ) {
252    printk( "sysinit: CPU_COUNTER: done\n" );
253  }
254}
255
256static void _Sysinit_Verbose_INITIAL_EXTENSIONS( void )
257{
258  if ( !SYSINIT_IS_ADJACENT( CPU_COUNTER, INITIAL_EXTENSIONS ) ) {
259    printk( "sysinit: INITIAL_EXTENSIONS: done\n" );
260  }
261}
262
263static void _Sysinit_Verbose_MP_EARLY( void )
264{
265  if ( !SYSINIT_IS_ADJACENT( INITIAL_EXTENSIONS, MP_EARLY ) ) {
266    printk( "sysinit: MP_EARLY: done\n" );
267  }
268}
269
270static void _Sysinit_Verbose_DATA_STRUCTURES( void )
271{
272  if ( !SYSINIT_IS_ADJACENT( MP_EARLY, DATA_STRUCTURES ) ) {
273    printk( "sysinit: DATA_STRUCTURES: done\n" );
274  }
275}
276
277static void _Sysinit_Verbose_MP( void )
278{
279  if ( !SYSINIT_IS_ADJACENT( DATA_STRUCTURES, MP ) ) {
280    printk( "sysinit: MP: done\n" );
281  }
282}
283
284static void _Sysinit_Verbose_USER_EXTENSIONS( void )
285{
286  if ( !SYSINIT_IS_ADJACENT( MP, USER_EXTENSIONS ) ) {
287    printk( "sysinit: USER_EXTENSIONS: done\n" );
288  }
289}
290
291static void _Sysinit_Verbose_CLASSIC_TASKS( void )
292{
293  if ( !SYSINIT_IS_ADJACENT( CLASSIC_USER_TASKS, CLASSIC_TASKS ) ) {
294    printk( "sysinit: CLASSIC_TASKS: done\n" );
295  }
296}
297
298static void _Sysinit_Verbose_CLASSIC_TASKS_MP( void )
299{
300  if ( !SYSINIT_IS_ADJACENT( CLASSIC_TASKS, CLASSIC_TASKS_MP ) ) {
301    printk( "sysinit: CLASSIC_TASKS_MP: done\n" );
302  }
303}
304
305static void _Sysinit_Verbose_CLASSIC_TIMER( void )
306{
307  if ( !SYSINIT_IS_ADJACENT( CLASSIC_TASKS_MP, CLASSIC_TIMER ) ) {
308    printk( "sysinit: CLASSIC_TIMER: done\n" );
309  }
310}
311
312static void _Sysinit_Verbose_CLASSIC_SIGNAL_MP( void )
313{
314  if ( !SYSINIT_IS_ADJACENT( CLASSIC_TIMER, CLASSIC_SIGNAL_MP ) ) {
315    printk( "sysinit: CLASSIC_SIGNAL_MP: done\n" );
316  }
317}
318
319static void _Sysinit_Verbose_CLASSIC_EVENT_MP( void )
320{
321  if ( !SYSINIT_IS_ADJACENT( CLASSIC_SIGNAL_MP, CLASSIC_EVENT_MP ) ) {
322    printk( "sysinit: CLASSIC_EVENT_MP: done\n" );
323  }
324}
325
326static void _Sysinit_Verbose_CLASSIC_MESSAGE_QUEUE( void )
327{
328  if ( !SYSINIT_IS_ADJACENT( CLASSIC_EVENT_MP, CLASSIC_MESSAGE_QUEUE ) ) {
329    printk( "sysinit: CLASSIC_MESSAGE_QUEUE: done\n" );
330  }
331}
332
333static void _Sysinit_Verbose_CLASSIC_MESSAGE_QUEUE_MP( void )
334{
335  if ( !SYSINIT_IS_ADJACENT( CLASSIC_MESSAGE_QUEUE, CLASSIC_MESSAGE_QUEUE_MP ) ) {
336    printk( "sysinit: CLASSIC_MESSAGE_QUEUE_MP: done\n" );
337  }
338}
339
340static void _Sysinit_Verbose_CLASSIC_SEMAPHORE( void )
341{
342  if ( !SYSINIT_IS_ADJACENT( CLASSIC_MESSAGE_QUEUE_MP, CLASSIC_SEMAPHORE ) ) {
343    printk( "sysinit: CLASSIC_SEMAPHORE: done\n" );
344  }
345}
346
347static void _Sysinit_Verbose_CLASSIC_SEMAPHORE_MP( void )
348{
349  if ( !SYSINIT_IS_ADJACENT( CLASSIC_SEMAPHORE, CLASSIC_SEMAPHORE_MP ) ) {
350    printk( "sysinit: CLASSIC_SEMAPHORE_MP: done\n" );
351  }
352}
353
354static void _Sysinit_Verbose_CLASSIC_PARTITION( void )
355{
356  if ( !SYSINIT_IS_ADJACENT( CLASSIC_SEMAPHORE_MP, CLASSIC_PARTITION ) ) {
357    printk( "sysinit: CLASSIC_PARTITION: done\n" );
358  }
359}
360
361static void _Sysinit_Verbose_CLASSIC_PARTITION_MP( void )
362{
363  if ( !SYSINIT_IS_ADJACENT( CLASSIC_PARTITION, CLASSIC_PARTITION_MP ) ) {
364    printk( "sysinit: CLASSIC_PARTITION_MP: done\n" );
365  }
366}
367
368static void _Sysinit_Verbose_CLASSIC_REGION( void )
369{
370  if ( !SYSINIT_IS_ADJACENT( CLASSIC_PARTITION_MP, CLASSIC_REGION ) ) {
371    printk( "sysinit: CLASSIC_REGION: done\n" );
372  }
373}
374
375static void _Sysinit_Verbose_CLASSIC_DUAL_PORTED_MEMORY( void )
376{
377  if ( !SYSINIT_IS_ADJACENT( CLASSIC_REGION, CLASSIC_DUAL_PORTED_MEMORY ) ) {
378    printk( "sysinit: CLASSIC_DUAL_PORTED_MEMORY: done\n" );
379  }
380}
381
382static void _Sysinit_Verbose_CLASSIC_RATE_MONOTONIC( void )
383{
384  if (
385    !SYSINIT_IS_ADJACENT(
386      CLASSIC_DUAL_PORTED_MEMORY,
387      CLASSIC_RATE_MONOTONIC
388    )
389  ) {
390    printk( "sysinit: CLASSIC_RATE_MONOTONIC: done\n" );
391  }
392}
393
394static void _Sysinit_Verbose_CLASSIC_BARRIER( void )
395{
396  if ( !SYSINIT_IS_ADJACENT( CLASSIC_RATE_MONOTONIC, CLASSIC_BARRIER ) ) {
397    printk( "sysinit: CLASSIC_BARRIER: done\n" );
398  }
399}
400
401static void _Sysinit_Verbose_POSIX_SIGNALS( void )
402{
403  if ( !SYSINIT_IS_ADJACENT( CLASSIC_BARRIER, POSIX_SIGNALS ) ) {
404    printk( "sysinit: POSIX_SIGNALS: done\n" );
405  }
406}
407
408static void _Sysinit_Verbose_POSIX_THREADS( void )
409{
410  if ( !SYSINIT_IS_ADJACENT( POSIX_SIGNALS, POSIX_THREADS ) ) {
411    printk( "sysinit: POSIX_THREADS: done\n" );
412  }
413}
414
415static void _Sysinit_Verbose_POSIX_MESSAGE_QUEUE( void )
416{
417  if ( !SYSINIT_IS_ADJACENT( POSIX_THREADS, POSIX_MESSAGE_QUEUE ) ) {
418    printk( "sysinit: POSIX_MESSAGE_QUEUE: done\n" );
419  }
420}
421
422static void _Sysinit_Verbose_POSIX_SEMAPHORE( void )
423{
424  if ( !SYSINIT_IS_ADJACENT( POSIX_MESSAGE_QUEUE, POSIX_SEMAPHORE ) ) {
425    printk( "sysinit: POSIX_SEMAPHORE: done\n" );
426  }
427}
428
429static void _Sysinit_Verbose_POSIX_TIMER( void )
430{
431  if ( !SYSINIT_IS_ADJACENT( POSIX_SEMAPHORE, POSIX_TIMER ) ) {
432    printk( "sysinit: POSIX_TIMER: done\n" );
433  }
434}
435
436static void _Sysinit_Verbose_POSIX_SHM( void )
437{
438  if ( !SYSINIT_IS_ADJACENT( POSIX_TIMER, POSIX_SHM ) ) {
439    printk( "sysinit: POSIX_SHM: done\n" );
440  }
441}
442
443static void _Sysinit_Verbose_POSIX_KEYS( void )
444{
445  if ( !SYSINIT_IS_ADJACENT( POSIX_SHM, POSIX_KEYS ) ) {
446    printk( "sysinit: POSIX_KEYS: done\n" );
447  }
448}
449
450static void _Sysinit_Verbose_POSIX_CLEANUP( void )
451{
452  if ( !SYSINIT_IS_ADJACENT( POSIX_KEYS, POSIX_CLEANUP ) ) {
453    printk( "sysinit: POSIX_CLEANUP: done\n" );
454  }
455}
456
457static void _Sysinit_Verbose_IDLE_THREADS( void )
458{
459  if ( !SYSINIT_IS_ADJACENT( POSIX_CLEANUP, IDLE_THREADS ) ) {
460    printk( "sysinit: IDLE_THREADS: done\n" );
461  }
462}
463
464static void _Sysinit_Verbose_LIBIO( void )
465{
466  if ( !SYSINIT_IS_ADJACENT( IDLE_THREADS, LIBIO ) ) {
467    printk( "sysinit: LIBIO: done\n" );
468  }
469}
470
471static void _Sysinit_Verbose_ROOT_FILESYSTEM( void )
472{
473  if ( !SYSINIT_IS_ADJACENT( LIBIO, ROOT_FILESYSTEM ) ) {
474    printk( "sysinit: ROOT_FILESYSTEM: done\n" );
475  }
476}
477
478static void _Sysinit_Verbose_DRVMGR( void )
479{
480  if ( !SYSINIT_IS_ADJACENT( ROOT_FILESYSTEM, DRVMGR ) ) {
481    printk( "sysinit: DRVMGR: done\n" );
482  }
483}
484
485static void _Sysinit_Verbose_MP_SERVER( void )
486{
487  if ( !SYSINIT_IS_ADJACENT( DRVMGR, MP_SERVER ) ) {
488    printk( "sysinit: MP_SERVER: done\n" );
489  }
490}
491
492static void _Sysinit_Verbose_BSP_PRE_DRIVERS( void )
493{
494  if ( !SYSINIT_IS_ADJACENT( MP_SERVER, BSP_PRE_DRIVERS ) ) {
495    printk( "sysinit: BSP_PRE_DRIVERS: done\n" );
496  }
497}
498
499static void _Sysinit_Verbose_DRVMGR_LEVEL_1( void )
500{
501  if ( !SYSINIT_IS_ADJACENT( BSP_PRE_DRIVERS, DRVMGR_LEVEL_1 ) ) {
502    printk( "sysinit: DRVMGR_LEVEL_1: done\n" );
503  }
504}
505
506static void _Sysinit_Verbose_DEVICE_DRIVERS( void )
507{
508  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_1, DEVICE_DRIVERS ) ) {
509    printk( "sysinit: DEVICE_DRIVERS: done\n" );
510  }
511}
512
513static void _Sysinit_Verbose_DRVMGR_LEVEL_2( void )
514{
515  if ( !SYSINIT_IS_ADJACENT( DEVICE_DRIVERS, DRVMGR_LEVEL_2 ) ) {
516    printk( "sysinit: DRVMGR_LEVEL_2: done\n" );
517  }
518}
519
520static void _Sysinit_Verbose_DRVMGR_LEVEL_3( void )
521{
522  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_2, DRVMGR_LEVEL_3 ) ) {
523    printk( "sysinit: DRVMGR_LEVEL_3: done\n" );
524  }
525}
526
527static void _Sysinit_Verbose_DRVMGR_LEVEL_4( void )
528{
529  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_3, DRVMGR_LEVEL_4 ) ) {
530    printk( "sysinit: DRVMGR_LEVEL_4: done\n" );
531  }
532}
533
534static void _Sysinit_Verbose_MP_FINALIZE( void )
535{
536  if ( !SYSINIT_IS_ADJACENT( DRVMGR_LEVEL_4, MP_FINALIZE ) ) {
537    printk( "sysinit: MP_FINALIZE: done\n" );
538  }
539}
540
541static void _Sysinit_Verbose_CLASSIC_USER_TASKS( void )
542{
543  if ( !SYSINIT_IS_ADJACENT( MP_FINALIZE, CLASSIC_USER_TASKS ) ) {
544    printk( "sysinit: CLASSIC_USER_TASKS: done\n" );
545  }
546}
547
548static void _Sysinit_Verbose_POSIX_USER_THREADS( void )
549{
550  if ( !SYSINIT_IS_ADJACENT( CLASSIC_USER_TASKS, POSIX_USER_THREADS ) ) {
551    printk( "sysinit: POSIX_USER_THREADS: done\n" );
552  }
553}
554
555static void _Sysinit_Verbose_STD_FILE_DESCRIPTORS( void )
556{
557  if ( !SYSINIT_IS_ADJACENT( POSIX_USER_THREADS, STD_FILE_DESCRIPTORS ) ) {
558    printk( "sysinit: STD_FILE_DESCRIPTORS: done\n" );
559  }
560}
561
562static void _Sysinit_Verbose_LAST( void )
563{
564  printk( "sysinit: done\n" );
565}
Note: See TracBrowser for help on using the repository browser.