- Misc changes
[tpg/acess2.git] / AcessNative / ld-acess.so_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         __asm__ __volatile__ (
41                 "push %0;\n\t"
42                 "push %1;\n\t"
43                 "push %2;\n\t"
44                 "jmp *%3;\n\t"
45                 : : "r" (envp), "r" (appArgv), "r" (appArgc), "r" (appMain) );
46         //return appMain(appArgc, appArgv, envp);
47         return -1;
48 }
49
50 void Warning(const char *Format, ...)
51 {
52         va_list args;
53         printf("Warning: ");
54         va_start(args, Format);
55         vprintf(Format, args);
56         va_end(args);
57         printf("\n");
58 }
59
60 void Notice(const char *Format, ...)
61 {
62         va_list args;
63         printf("Notice: ");
64         va_start(args, Format);
65         vprintf(Format, args);
66         va_end(args);
67         printf("\n");
68 }
69

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