/programs/develop/libraries/newlib/Makefile |
---|
24,6 → 24,7 |
STATIC_SRCS:= \ |
crt/start.S \ |
crt/crt1.c \ |
crt/crt2.c \ |
crt/chkstk.S \ |
crt/exit.S \ |
crt/setjmp.S |
81,7 → 82,9 |
locale/locale.c \ |
locale/lctype.c \ |
reent/impure.c \ |
reent/init_reent.c \ |
reent/getreent.c \ |
reent/mutex.c \ |
reent/gettimeofdayr.c \ |
reent/hdlman.c \ |
reent/isattyr.c \ |
/programs/develop/libraries/newlib/crt/crt1.c |
---|
54,26 → 54,7 |
} |
void __main (){}; |
void init_reent(); |
void __attribute__((noreturn)) |
__thread_startup (int (*entry)(void*), void *param, |
void *stacklow, void *stackhigh) |
{ |
int retval; |
__asm__ __volatile__( // save stack limits |
"movl %0, %%fs:4 \n\t" // use TLS |
"movl %1, %%fs:8 \n\t" |
::"r"(stacklow), "r"(stackhigh)); |
init_reent(); // initialize thread reentry structure |
retval = entry(param); // call user thread function |
_exit(retval); |
}; |
struct app_hdr |
{ |
char banner[8]; |
86,6 → 67,19 |
char *path; |
}; |
typedef void (*ctp)(); |
static void __do_global_ctors () |
{ |
extern int __CTOR_LIST__; |
int *c = &__CTOR_LIST__; |
c++; |
while (*c) |
{ |
ctp d = (ctp)*c; |
(d)(); |
c++; |
} |
} |
void __attribute__((noreturn)) |
__crt_startup (void) |
102,7 → 96,7 |
__cpu_features_init (); /* Do we have SSE, etc.*/ |
// _fpreset (); /* Supplied by the runtime library. */ |
__initPOSIXHandles(); |
__do_global_ctors(); |
__appcwdlen = strrchr(&__pgmname, '/') - &__pgmname + 1; |
__appcwdlen = __appcwdlen > 1023 ? 1023 : __appcwdlen; |
/programs/develop/libraries/newlib/crt/crt2.c |
---|
0,0 → 1,22 |
#include <newlib.h> |
void init_reent(); |
void __attribute__((noreturn)) |
__thread_startup (int (*entry)(void*), void *param, |
void *stacklow, void *stackhigh) |
{ |
int retval; |
__asm__ __volatile__( // save stack limits |
"movl %0, %%fs:4 \n\t" // use TLS |
"movl %1, %%fs:8 \n\t" |
::"r"(stacklow), "r"(stackhigh)); |
init_reent(); // initialize thread reentry structure |
retval = entry(param); // call user thread function |
_exit(retval); |
}; |
/programs/develop/libraries/newlib/reent/getreent.c |
---|
29,40 → 29,6 |
__sinit(ent); |
} |
void init_global_reent() |
{ |
struct _reent *ent; |
ent =_GLOBAL_REENT; |
_REENT_INIT_PTR(ent); |
__asm__ __volatile__( |
"movl %0, %%fs:12" |
::"r"(ent)); |
__sinit(ent); |
} |
void __mutex_lock(volatile int *val) |
{ |
int tmp; |
__asm__ __volatile__ ( |
"0:\n\t" |
"mov %0, %1\n\t" |
"testl %1, %1\n\t" |
"jz 1f\n\t" |
"movl $68, %%eax\n\t" |
"movl $1, %%ebx\n\t" |
"int $0x40\n\t" |
"jmp 0b\n\t" |
"1:\n\t" |
"incl %1\n\t" |
"xchgl %0, %1\n\t" |
"testl %1, %1\n\t" |
"jnz 0b\n" |
: "+m" (*val), "=&r"(tmp) |
::"eax","ebx" ); |
} |
/programs/develop/libraries/newlib/reent/hdlman.c |
---|
54,6 → 54,8 |
void __ChkTTYIOMode( int handle ); |
void __initPOSIXHandles( void ) __attribute__ ((constructor)); |
void __grow_iomode( int num ); |
int debugwrite(const char *path,const void *buff, |
size_t offset, size_t count, size_t *writes); |
/programs/develop/libraries/newlib/reent/init_reent.c |
---|
0,0 → 1,18 |
#include <_ansi.h> |
#include <string.h> |
#include <reent.h> |
void init_global_reent() |
{ |
struct _reent *ent; |
ent =_GLOBAL_REENT; |
_REENT_INIT_PTR(ent); |
__asm__ __volatile__( |
"movl %0, %%fs:12" |
::"r"(ent)); |
// __sinit(ent); |
} |
/programs/develop/libraries/newlib/reent/mutex.c |
---|
0,0 → 1,23 |
void __mutex_lock(volatile int *val) |
{ |
int tmp; |
__asm__ __volatile__ ( |
"0:\n\t" |
"mov %0, %1\n\t" |
"testl %1, %1\n\t" |
"jz 1f\n\t" |
"movl $68, %%eax\n\t" |
"movl $1, %%ebx\n\t" |
"int $0x40\n\t" |
"jmp 0b\n\t" |
"1:\n\t" |
"incl %1\n\t" |
"xchgl %0, %1\n\t" |
"testl %1, %1\n\t" |
"jnz 0b\n" |
: "+m" (*val), "=&r"(tmp) |
::"eax","ebx" ); |
} |