Lots of work on the AcessNative kernel
[tpg/acess2.git] / AcessNative / ld-acess_src / main.c
1 /*
2  */
3 #include "common.h"
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <stdarg.h>
7
8 // === CODE ===
9 int main(int argc, char *argv[], char **envp)
10 {
11          int    i;
12          int    appArgc;
13         char    **appArgv;
14         char    *appPath;
15          int    (*appMain)(int, char *[], char **);
16         void    *base;
17         
18         for( i = 1; i < argc; i ++ )
19         {
20                 if( argv[i][0] != '-' ) break;
21         }
22
23         if( i >= argc ) {
24                 fprintf(stderr, "Usage: ld-acess <executable> [arguments ...]\n");
25                 return 1;
26         }
27         
28         appPath = argv[i];
29
30         appArgc = argc - i;
31         appArgv = &argv[i];
32
33         printf("Exectutable Path: '%s'\n", appPath);
34         printf("Executable argc = %i\n", appArgc);
35
36         base = Binary_Load(appPath, (uintptr_t*)&appMain);
37         printf("base = %p\n", base);
38         if( !base )     return 127;
39         
40         printf("==============================\n");
41         for(i = 0; i < appArgc; i ++)
42                 printf("\"%s\" ", appArgv[i]);
43         printf("\n");
44         __asm__ __volatile__ (
45                 "push %0;\n\t"
46                 "push %1;\n\t"
47                 "push %2;\n\t"
48                 "jmp *%3;\n\t"
49                 : : "r" (envp), "r" (appArgv), "r" (appArgc), "r" (appMain) );
50         //return appMain(appArgc, appArgv, envp);
51         return -1;
52 }
53
54 void Warning(const char *Format, ...)
55 {
56         va_list args;
57         printf("Warning: ");
58         va_start(args, Format);
59         vprintf(Format, args);
60         va_end(args);
61         printf("\n");
62 }
63
64 void Notice(const char *Format, ...)
65 {
66         va_list args;
67         printf("Notice: ");
68         va_start(args, Format);
69         vprintf(Format, args);
70         va_end(args);
71         printf("\n");
72 }
73

UCC git Repository :: git.ucc.asn.au