forked from KolibriOS/kolibrios
newlib: rework console initialization.
git-svn-id: svn://kolibrios.org@6074 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
36d7425fb6
commit
adda605e2e
@ -14,7 +14,7 @@ SECTIONS
|
|||||||
LONG(___stacktop);
|
LONG(___stacktop);
|
||||||
LONG(___cmdline);
|
LONG(___cmdline);
|
||||||
LONG(___pgmname); /* full path */
|
LONG(___pgmname); /* full path */
|
||||||
LONG(0); /*FIXME tls data */
|
LONG(__subsystem__);
|
||||||
LONG(__idata_start)
|
LONG(__idata_start)
|
||||||
LONG(__idata_end)
|
LONG(__idata_end)
|
||||||
LONG(_main)
|
LONG(_main)
|
||||||
@ -65,7 +65,7 @@ SECTIONS
|
|||||||
___crt_xt_end__ = . ;
|
___crt_xt_end__ = . ;
|
||||||
}
|
}
|
||||||
|
|
||||||
.data ALIGN(64) :
|
.data ALIGN(16) :
|
||||||
{
|
{
|
||||||
PROVIDE ( __data_start__ = .) ;
|
PROVIDE ( __data_start__ = .) ;
|
||||||
*(.data)
|
*(.data)
|
||||||
@ -79,12 +79,12 @@ SECTIONS
|
|||||||
___iend = . ;
|
___iend = . ;
|
||||||
}
|
}
|
||||||
|
|
||||||
.eh_frame BLOCK(16) :
|
/* .eh_frame BLOCK(16) :
|
||||||
{
|
{
|
||||||
PROVIDE (___EH_FRAME_BEGIN__ = .) ;
|
PROVIDE (___EH_FRAME_BEGIN__ = .) ;
|
||||||
*(.eh_frame*)
|
*(.eh_frame*)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
.idata ALIGN(16):
|
.idata ALIGN(16):
|
||||||
{
|
{
|
||||||
__idata_start = .;
|
__idata_start = .;
|
||||||
@ -120,6 +120,7 @@ SECTIONS
|
|||||||
*(.drectve)
|
*(.drectve)
|
||||||
*(.note.GNU-stack)
|
*(.note.GNU-stack)
|
||||||
*(.comment)
|
*(.comment)
|
||||||
|
*(.eh_frame)
|
||||||
*(.debug_abbrev)
|
*(.debug_abbrev)
|
||||||
*(.debug_info)
|
*(.debug_info)
|
||||||
*(.debug_line)
|
*(.debug_line)
|
||||||
|
@ -29,8 +29,12 @@ struct app_hdr
|
|||||||
int stacktop;
|
int stacktop;
|
||||||
char *cmdline;
|
char *cmdline;
|
||||||
char *path;
|
char *path;
|
||||||
|
int __subsystem__;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void __init_conio();
|
||||||
|
void __fini_conio();
|
||||||
|
|
||||||
extern int main (int, char **, char **);
|
extern int main (int, char **, char **);
|
||||||
|
|
||||||
/* NOTE: The code for initializing the _argv, _argc, and environ variables
|
/* NOTE: The code for initializing the _argv, _argc, and environ variables
|
||||||
@ -177,6 +181,8 @@ __crt_startup (void)
|
|||||||
init_reent();
|
init_reent();
|
||||||
init_stdio();
|
init_stdio();
|
||||||
|
|
||||||
|
if(header->__subsystem__ == 3)
|
||||||
|
__init_conio();
|
||||||
|
|
||||||
if( header->cmdline[0] != 0)
|
if( header->cmdline[0] != 0)
|
||||||
{
|
{
|
||||||
@ -196,6 +202,9 @@ __crt_startup (void)
|
|||||||
|
|
||||||
retval = main(argc, argv, NULL);
|
retval = main(argc, argv, NULL);
|
||||||
done:
|
done:
|
||||||
|
if(header->__subsystem__ == 3)
|
||||||
|
__fini_conio();
|
||||||
|
|
||||||
exit (retval);
|
exit (retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
|
|
||||||
extern void _pei386_runtime_relocator (void);
|
|
||||||
|
|
||||||
int DllStartup(void *module, int reason)
|
|
||||||
{
|
|
||||||
_pei386_runtime_relocator();
|
|
||||||
return 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
void ___dll_start ()
|
|
||||||
|
|
||||||
{
|
|
||||||
_pei386_runtime_relocator();
|
|
||||||
|
|
||||||
}
|
|
@ -29,7 +29,7 @@ struct app_hdr
|
|||||||
int stacktop;
|
int stacktop;
|
||||||
char *cmdline;
|
char *cmdline;
|
||||||
char *path;
|
char *path;
|
||||||
int reserved;
|
int __subsystem__;
|
||||||
void *__idata_start;
|
void *__idata_start;
|
||||||
void *__idata_end;
|
void *__idata_end;
|
||||||
int (*main)(int argc, char **argv, char **envp);
|
int (*main)(int argc, char **argv, char **envp);
|
||||||
@ -38,7 +38,8 @@ struct app_hdr
|
|||||||
void _pei386_runtime_relocator (void);
|
void _pei386_runtime_relocator (void);
|
||||||
void init_loader(void *libc_image);
|
void init_loader(void *libc_image);
|
||||||
void init_reent();
|
void init_reent();
|
||||||
|
void __init_conio();
|
||||||
|
void __fini_conio();
|
||||||
int link_app();
|
int link_app();
|
||||||
void* get_entry_point(void *raw);
|
void* get_entry_point(void *raw);
|
||||||
int (*entry)(int, char **, char **);
|
int (*entry)(int, char **, char **);
|
||||||
@ -182,6 +183,10 @@ libc_crt_startup (void *libc_base)
|
|||||||
_tls_map[0] = 0xE0;
|
_tls_map[0] = 0xE0;
|
||||||
init_reent();
|
init_reent();
|
||||||
init_stdio();
|
init_stdio();
|
||||||
|
|
||||||
|
if(header->__subsystem__ == 3)
|
||||||
|
__init_conio();
|
||||||
|
|
||||||
__do_global_ctors();
|
__do_global_ctors();
|
||||||
|
|
||||||
// __appenv = load_file("/sys/system.env", &__appenv_size);
|
// __appenv = load_file("/sys/system.env", &__appenv_size);
|
||||||
@ -209,6 +214,9 @@ libc_crt_startup (void *libc_base)
|
|||||||
|
|
||||||
retval = header->main(argc, argv, NULL);
|
retval = header->main(argc, argv, NULL);
|
||||||
done:
|
done:
|
||||||
|
if(header->__subsystem__ == 3)
|
||||||
|
__fini_conio();
|
||||||
|
|
||||||
exit (retval);
|
exit (retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,8 +22,6 @@
|
|||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
int __gui_mode;
|
|
||||||
|
|
||||||
int
|
int
|
||||||
_DEFUN(_printf_r, (ptr, fmt),
|
_DEFUN(_printf_r, (ptr, fmt),
|
||||||
struct _reent *ptr _AND
|
struct _reent *ptr _AND
|
||||||
@ -57,11 +55,3 @@ _DEFUN(printf, (fmt),
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif /* ! _REENT_ONLY */
|
#endif /* ! _REENT_ONLY */
|
||||||
|
|
||||||
extern int __gui_mode;
|
|
||||||
|
|
||||||
extern void __attribute__ ((constructor)) __init_conio();
|
|
||||||
static void __attribute__ ((constructor)) init_printf()
|
|
||||||
{
|
|
||||||
__gui_mode = (int)&__init_conio;
|
|
||||||
}
|
|
||||||
|
@ -139,12 +139,3 @@ _DEFUN(puts, (s),
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int __gui_mode;
|
|
||||||
|
|
||||||
extern void __attribute__ ((constructor)) __init_conio();
|
|
||||||
static void __attribute__ ((constructor)) init_puts()
|
|
||||||
{
|
|
||||||
__gui_mode = (int)&__init_conio;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -21,19 +21,19 @@ static int console_write(const char *path, const void *buff,
|
|||||||
return count;
|
return count;
|
||||||
};
|
};
|
||||||
|
|
||||||
void __attribute__ ((constructor)) __init_conio()
|
void __init_conio()
|
||||||
{
|
{
|
||||||
__io_handle *ioh;
|
__io_handle *ioh;
|
||||||
|
|
||||||
load_libconsole();
|
load_libconsole();
|
||||||
con_init(80, 25, 80, 250, "Console application");
|
con_init(80, 25, 80, 500, "Console application");
|
||||||
|
|
||||||
ioh = &__io_tab[STDOUT_FILENO];
|
ioh = &__io_tab[STDOUT_FILENO];
|
||||||
ioh->mode = _WRITE|_ISTTY;
|
ioh->mode = _WRITE|_ISTTY;
|
||||||
ioh->write = &console_write;
|
ioh->write = &console_write;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __attribute__ ((destructor)) __fini_conio()
|
void __fini_conio()
|
||||||
{
|
{
|
||||||
con_exit(0);
|
con_exit(0);
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ SECTIONS
|
|||||||
LONG(___stacktop);
|
LONG(___stacktop);
|
||||||
LONG(___cmdline);
|
LONG(___cmdline);
|
||||||
LONG(___pgmname); /* full path */
|
LONG(___pgmname); /* full path */
|
||||||
LONG(0); /*FIXME tls data */
|
LONG(__subsystem__);
|
||||||
|
|
||||||
*(.init)
|
*(.init)
|
||||||
*(.text)
|
*(.text)
|
||||||
|
Loading…
Reference in New Issue
Block a user