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.c99 行で定義されています。

参照元 atexit().

#define HEAP_TOP   ~0UL
 

newlibrt.c47 行で定義されています。

参照元 _sbrk_r().


関数

void __malloc_lock struct _reent *  ptr  ) 
 

newlibrt.c55 行で定義されています。

参照先 cxxrt_dis_dspdis_dsp()iniflgsns_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.c63 行で定義されています。

参照先 cxxrt_dis_dspena_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.c71 行で定義されています。

参照先 HEAP_TOPiniflg.

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.c137 行で定義されています。

参照先 _atabortiniflgkernel_abort().

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

関数の呼び出しグラフ:

int atexit void(*)(void)  func  ) 
 

newlibrt.c110 行で定義されています。

参照先 ATEXIT_MAXatexit_numatexit_tableiniflgloc_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.c130 行で定義されています。

参照先 iniflgkernel_exit().

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

関数の呼び出しグラフ:

int main  ) 
 

newlibrt.c175 行で定義されています。

00175 { return 0; }

void software_init_hook void   ) 
 

newlibrt.c149 行で定義されています。

参照先 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.c166 行で定義されています。

参照先 atexit_numatexit_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.c108 行で定義されています。

参照元 abort().

int atexit_num [static]
 

newlibrt.c102 行で定義されています。

参照元 atexit()software_term_hook().

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

newlibrt.c101 行で定義されています。

参照元 atexit()software_term_hook().

int cxxrt_dis_dsp [static]
 

newlibrt.c53 行で定義されています。

参照元 __malloc_lock()__malloc_unlock().


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