Newer
Older
UbixOS / lib / ubix / sstart.c
char **environ;
const char *__progname = "";

typedef struct {
  int a_type;
  int a_val;
} Elf32_Auxinfo;

typedef void (*fptr)(void);

void _start1(fptr cleanup, int argc, char *argv[])
{
        char **env;

        env = argv + argc + 1;
/*
        handle_argv(argc, argv, env);
        if (&_DYNAMIC != NULL)
                atexit(cleanup);
        else
                _init_tls();

#ifdef GCRT
        atexit(_mcleanup);
        monstartup(&eprol, &etext);
__asm__("eprol:");
#endif

        handle_static_init(argc, argv, env);
*/
/*
asm(
  "pushl %eax\n"
  "movl $0xDEADBEEF,%eax\n"
  "pushl %eax\n"
  "movl (%eax),%eax\n"
  "pushl %eax\n"
);
*/
        exit(main(argc, argv, env));
}


#ifdef _IGNORE
void _start1(unsigned int *ap, ...) {
  Elf32_Auxinfo *aux, *auxp;
  unsigned int *argcp;
  int argc;
  char **argv;
  char **env;

printf("{0x%X}", ap);

  argcp = ap;
  argc = *ap++;
  argv = (char **)ap;
  ap += argc + 1;
  env = (char **)ap;
  environ = (char **)ap;
  while (*ap++ != 0)
    ;
  aux = (Elf32_Auxinfo *) ap;

  for (auxp = aux; auxp->a_type != 0x0; auxp++) {
    printf("TEST");
  }
  printf("TEST2");
  

//  if (env[0] != 0) 
 //   printf("env[0]: 0x%X\n",env[0]);

  /*
  printf("(&ap: 0x%X)\n",&ap);
  printf("(argv[0]: 0x%X\n",argv[0]);
  printf("(argv[-1]: 0x%X:0x%X)\n",argv[-1],*(argv - 1));
  */

/*
  if (argc > 0 && argv[0] != 0x0) {
     __progname = argv[0];
     for (s = __progname; *s != '\0'; s++)
       if (*s == '/')
    __progname = s + 1;
    }
*/

  exit(main(argc, argv, env));

  }
#endif