newlibrt.c

#include <stddef.h>
#include <reent.h>
#include <errno.h>
#include "../kernel/fdmp_kernel.h"

newlibrt.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#define HEAP_TOP   ~0UL
#define ATEXIT_MAX   (32 + 1)

関数

void __malloc_lock (struct _reent *ptr)
void __malloc_unlock (struct _reent *ptr)
void * _sbrk_r (struct _reent *ptr, ptrdiff_t nbyte)
int atexit (void(*func)(void))
void exit (int status)
void abort (void)
void software_init_hook (void)
void software_term_hook (void)
int main ()

変数

static int cxxrt_dis_dsp
static void(* atexit_table [ATEXIT_MAX])(void)
static int atexit_num
void(* _atabort )(void)=0


マクロ定義

#define ATEXIT_MAX   (32 + 1)
 

newlibrt.c の 99 行で定義されています。

参照元 atexit().

#define HEAP_TOP   ~0UL
 

newlibrt.c の 47 行で定義されています。

参照元 _sbrk_r().


関数

void __malloc_lock (  struct _reent *  ptr  ) 
 

newlibrt.c の 55 行で定義されています。

参照先 cxxrt_dis_dsp・dis_dsp()・iniflg・sns_dsp().

00056 {
00057     if (!iniflg || sns_dsp())
00058         return;
00059     dis_dsp();
00060     cxxrt_dis_dsp = 1;
00061 }

関数の呼び出しグラフ:

void __malloc_unlock (  struct _reent *  ptr  ) 
 

newlibrt.c の 63 行で定義されています。

参照先 cxxrt_dis_dsp・ena_dsp().

00064 {
00065     if (!cxxrt_dis_dsp)
00066         return;
00067     cxxrt_dis_dsp = 0;
00068     ena_dsp();
00069 }

関数の呼び出しグラフ:

void* _sbrk_r (  struct _reent *  ptr,
ptrdiff_t  nbyte
) 
 

newlibrt.c の 71 行で定義されています。

参照先 HEAP_TOP・iniflg.

00072 {
00073     extern char end;
00074     static char *heap_ptr = &end;
00075     static char *heap_end = (char*)HEAP_TOP;
00076     char *base;
00077 
00078     if (!iniflg)
00079     {
00080         volatile char _auto;
00081         if (&end < &_auto && &_auto < heap_end)
00082             heap_end = (char*)&_auto;
00083     }
00084 
00085     if (heap_ptr + nbyte + 32 > heap_end)
00086     {
00087         ptr->_errno = errno = ENOMEM;
00088         return (void*)-1;
00089     }
00090 
00091     base = heap_ptr;
00092     heap_ptr += nbyte;
00093     return base;
00094 }

void abort (  void   ) 
 

newlibrt.c の 137 行で定義されています。

参照先 _atabort・iniflg・kernel_abort().

00138 {
00139     if (_atabort != 0)
00140         (*_atabort)();
00141     if (iniflg)
00142         kernel_abort();
00143     _exit(3);
00144 }

関数の呼び出しグラフ:

int atexit (  void(*)(void)  func  ) 
 

newlibrt.c の 110 行で定義されています。

参照先 ATEXIT_MAX・atexit_num・atexit_table・iniflg・loc_cpu()・unl_cpu().

参照元 software_init_hook().

00111 {
00112     int result = -1;
00113     int sync = iniflg;
00114 
00115     if (sync)
00116         loc_cpu();
00117 
00118     if (atexit_num < ATEXIT_MAX)
00119     {
00120         atexit_table[atexit_num++] = func;
00121         result = 0;
00122     }
00123 
00124     if (sync)
00125         unl_cpu();
00126 
00127     return result;
00128 }

関数の呼び出しグラフ:

void exit (  int  status  ) 
 

newlibrt.c の 130 行で定義されています。

参照先 iniflg・kernel_exit().

00131 {
00132     if (iniflg)
00133         kernel_exit();
00134     _exit(status);
00135 }

関数の呼び出しグラフ:

int main (   ) 
 

newlibrt.c の 175 行で定義されています。

00175 { return 0; }

void software_init_hook (  void   ) 
 

newlibrt.c の 149 行で定義されています。

参照先 atexit().

00150 {
00151     extern void _toppers_cxxrt_init(void);
00152     _toppers_cxxrt_init();
00153     {
00154 #ifdef  __ELF__
00155         extern void _init(void);
00156         extern void _fini(void);
00157         atexit(_fini);
00158         _init();
00159 #else
00160         extern void __main(void);
00161         __main();
00162 #endif
00163     }
00164 }

関数の呼び出しグラフ:

void software_term_hook (  void   ) 
 

newlibrt.c の 166 行で定義されています。

参照先 atexit_num・atexit_table.

参照元 call_atexit().

00167 {
00168     int i;
00169 
00170     for (i = atexit_num - 1; i >= 0; i--)
00171         (*atexit_table[i])();
00172 }


変数

void(* _atabort)(void)=0
 

newlibrt.c の 108 行で定義されています。

参照元 abort().

int atexit_num [static]
 

newlibrt.c の 102 行で定義されています。

参照元 atexit()・software_term_hook().

void(* atexit_table[ATEXIT_MAX])(void) [static]
 

newlibrt.c の 101 行で定義されています。

参照元 atexit()・software_term_hook().

int cxxrt_dis_dsp [static]
 

newlibrt.c の 53 行で定義されています。

参照元 __malloc_lock()・__malloc_unlock().


Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:16 2006 に Doxygen によって生成されました。