Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/libc.c

    r47b7006 r64d2b10  
    4343#include <stdio.h>
    4444#include <unistd.h>
    45 #include <stdlib.h>
    4645#include <malloc.h>
    4746#include <tls.h>
     47#include <thread.h>
    4848#include <fibril.h>
    49 #include <task.h>
     49#include <async.h>
     50#include <as.h>
    5051#include <loader/pcb.h>
    5152#include "private/libc.h"
    52 #include "private/async.h"
    53 #include "private/async_sess.h"
    54 #include "private/malloc.h"
    55 #include "private/io.h"
    5653
    57 static bool env_setup = false;
     54void _exit(int status)
     55{
     56        thread_exit(status);
     57}
    5858
    5959void __main(void *pcb_ptr)
    6060{
    6161        /* Initialize user task run-time environment */
    62         __malloc_init();
     62        __heap_init();
    6363        __async_init();
    64         __async_sess_init();
    65        
    6664        fibril_t *fibril = fibril_setup();
    67         if (fibril == NULL)
    68                 abort();
    69        
    7065        __tcb_set(fibril->tcb);
    7166       
     
    7368        __pcb = (pcb_t *) pcb_ptr;
    7469       
    75         /* The basic run-time environment is setup */
    76         env_setup = true;
    77        
    7870        int argc;
    7971        char **argv;
    8072       
    81         /*
    82          * Get command line arguments and initialize
    83          * standard input and output
    84          */
     73        /* Get command line arguments and initialize
     74           standard input and output */
    8575        if (__pcb == NULL) {
    8676                argc = 0;
     
    9484        }
    9585       
    96         /*
    97          * Run main() and set task return value
    98          * according the result
    99          */
    100         int retval = main(argc, argv);
    101         exit(retval);
     86        /* Run main() and set task return value
     87           according the result */
     88        (void) task_retval(main(argc, argv));
    10289}
    10390
    104 void exit(int status)
     91void __exit(void)
    10592{
    106         if (env_setup) {
    107                 __stdio_done();
    108                 task_retval(status);
    109                 fibril_teardown(__tcb_get()->fibril_data);
    110         }
    111        
    112         __SYSCALL1(SYS_TASK_EXIT, false);
    113        
    114         /* Unreachable */
    115         while (1);
    116 }
    117 
    118 void abort(void)
    119 {
    120         __SYSCALL1(SYS_TASK_EXIT, true);
    121        
    122         /* Unreachable */
    123         while (1);
     93        __stdio_done();
     94        fibril_teardown(__tcb_get()->fibril_data);
     95        _exit(0);
    12496}
    12597
Note: See TracChangeset for help on using the changeset viewer.