Get aarch64 hello world working

$ m=aarch64-tiny
    $ make -j8 m=$m o/$m/tool/hello/hello.com o/third_party/qemu/qemu-aarch64
    $ o/third_party/qemu/qemu-aarch64 o/$m/tool/hello/hello.com
    hello world
    $ ls -hal o/$m/tool/hello/hello.com
    -rwxr-xr-x 1 jart jart 4.0K May  9 05:04 o/aarch64-tiny/tool/hello/hello.com
This commit is contained in:
Justine Tunney 2023-05-09 02:35:05 -07:00
parent e5e3cdf447
commit ae0ee59614
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
174 changed files with 1454 additions and 851 deletions

View file

@ -16,6 +16,7 @@
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
*/
#include "libc/runtime/internal.h"
#include "libc/runtime/runtime.h"
#ifndef __x86_64__
@ -34,8 +35,15 @@ static inline long sys_set_tid_address(int *t) {
}
#endif
typedef int init_f(int argc, char **argv, char **envp, unsigned long *auxv);
extern init_f __strace_init;
extern init_f *__init_array_start[] __attribute__((__weak__));
extern init_f *__init_array_end[] __attribute__((__weak__));
void cosmo(long *sp) {
int argc;
init_f **fp;
char **argv, **envp;
unsigned long *auxv;
argc = *sp;
@ -47,12 +55,19 @@ void cosmo(long *sp) {
break;
}
}
#ifdef SYSDEBUG
argc = __strace_init(argc, argv, envp, auxv);
#endif
__argc = argc;
__argv = argv;
__envp = envp;
__auxv = auxv;
environ = envp;
if (argc) program_invocation_name = argv[0];
_init();
for (fp = __init_array_start; fp < __init_array_end; ++fp) {
(*fp)(argc, argv, envp, auxv);
}
exit(main(argc, argv, envp));
}