OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [language/] [c/] [libc/] [startup/] [current/] [src/] [mainthread.cxx] - Blame information for rev 786

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
//=======================================================================
2
//
3
//      mainthread.cxx
4
//
5
//      Support for startup of ISO C environment
6
//
7
//========================================================================
8
// ####ECOSGPLCOPYRIGHTBEGIN####                                            
9
// -------------------------------------------                              
10
// This file is part of eCos, the Embedded Configurable Operating System.   
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under    
14
// the terms of the GNU General Public License as published by the Free     
15
// Software Foundation; either version 2 or (at your option) any later      
16
// version.                                                                 
17
//
18
// eCos is distributed in the hope that it will be useful, but WITHOUT      
19
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or    
20
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License    
21
// for more details.                                                        
22
//
23
// You should have received a copy of the GNU General Public License        
24
// along with eCos; if not, write to the Free Software Foundation, Inc.,    
25
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.            
26
//
27
// As a special exception, if other files instantiate templates or use      
28
// macros or inline functions from this file, or you compile this file      
29
// and link it with other works to produce a work based on this file,       
30
// this file does not by itself cause the resulting work to be covered by   
31
// the GNU General Public License. However the source code for this file    
32
// must still be made available in accordance with section (3) of the GNU   
33
// General Public License v2.                                               
34
//
35
// This exception does not invalidate any other reasons why a work based    
36
// on this file might be covered by the GNU General Public License.         
37
// -------------------------------------------                              
38
// ####ECOSGPLCOPYRIGHTEND####                                              
39
//========================================================================
40
//#####DESCRIPTIONBEGIN####
41
//
42
// Author(s):     jlarmour
43
// Contributors:  
44
// Date:          2000-04-30
45
// Purpose:       Provides a thread object to call into a user-supplied
46
//                main()
47
// Description:   Here we define the thread object that calls
48
//                cyg_libc_invoke_main() which in turn will invoke
49
//                the user-supplied main() entry point function (or
50
//                alternatively the dummy empty one supplied by eCos)
51
// Usage:         Both the stack (cyg_libc_main_stack) and the thread
52
//                (cyg_libc_main_thread) can be overriden if you provide
53
//                your own symbols with those names. In the case of the
54
//                stack obviously you need to ensure
55
//                CYGNUM_LIBC_MAIN_STACK_SIZE corresponds to your own
56
//                stack.
57
//                The thread object is also available externally if you
58
//                want to control it (suspend/resume/etc.) either by
59
//                extern Cyg_Thread cyg_libc_main_thread; from C++, using
60
//                the kernel C++ API, or
61
//                extern cyg_handle_t cyg_libc_main_thread; from C using
62
//                the kernel C API.
63
//
64
//####DESCRIPTIONEND####
65
//
66
//========================================================================
67
 
68
// CONFIGURATION
69
 
70
#include <pkgconf/libc_startup.h>          // C library configuration
71
 
72
#ifdef CYGSEM_LIBC_STARTUP_MAIN_THREAD
73
 
74
// INCLUDES
75
 
76
#include <cyg/infra/cyg_type.h>    // Common type definitions and support
77
#include <pkgconf/kernel.h>        // eCos kernel configuration
78
#include <cyg/kernel/thread.hxx>   // eCos thread support
79
#include <cyg/kernel/thread.inl>
80
#include <cyg/hal/hal_arch.h>      // for CYGNUM_HAL_STACK_SIZE_TYPICAL
81
 
82
 
83
// EXTERNS
84
 
85
#ifdef CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS
86
extern cyg_bool cyg_hal_stop_constructors;
87
#endif
88
 
89
// FUNCTION PROTOTYPES
90
 
91
externC void
92
cyg_libc_invoke_main( CYG_ADDRWORD );
93
 
94
// STATICS
95
 
96
#ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM
97
 
98
// override stack size on some platforms
99
#ifdef CYGNUM_HAL_STACK_SIZE_TYPICAL
100
# if CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE < CYGNUM_HAL_STACK_SIZE_TYPICAL
101
#  undef CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE
102
#  define CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
103
# endif
104
#endif
105
 
106
static cyg_uint8 cyg_libc_main_stack[ CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE ]
107
  CYGBLD_ATTRIB_ALIGN(CYGARC_ALIGNMENT);
108
 
109
#else // !ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM
110
 
111
extern char *cyg_libc_main_stack;
112
extern int cyg_libc_main_stack_size;
113
 
114
#endif // !ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM
115
 
116
// GLOBALS
117
 
118
// let the main thread be global so people can play with it (e.g. suspend
119
// or resume etc.) if that's what they want to do
120
Cyg_Thread cyg_libc_main_thread CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC) =
121
    Cyg_Thread(CYGNUM_LIBC_MAIN_THREAD_PRIORITY,
122
                &cyg_libc_invoke_main, (CYG_ADDRWORD) 0,
123
                "main",
124
                (CYG_ADDRESS) &cyg_libc_main_stack[0],
125
#ifdef CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM
126
                CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE
127
#else
128
                cyg_libc_main_stack_size
129
#endif
130
              );
131
 
132
#endif // ifdef CYGSEM_LIBC_STARTUP_MAIN_THREAD
133
 
134
// EOF mainthread.cxx

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.