static void create_ppc_aix_stack_frame(device *me, unsigned_word bottom_of_stack, char **argv, char **envp) { unsigned_word core_envp; unsigned_word core_argv; unsigned_word core_argc; unsigned_word core_aux; unsigned_word top_of_stack; /* cheat - create an elf stack frame */ create_ppc_elf_stack_frame(me, bottom_of_stack, argv, envp); /* extract argument addresses from registers */ psim_read_register(device_system(me), 0, &top_of_stack, "r1", cooked_transfer); psim_read_register(device_system(me), 0, &core_argc, "r3", cooked_transfer); psim_read_register(device_system(me), 0, &core_argv, "r4", cooked_transfer); psim_read_register(device_system(me), 0, &core_envp, "r5", cooked_transfer); psim_read_register(device_system(me), 0, &core_aux, "r6", cooked_transfer); /* extract arguments from registers */ device_error(me, "Unfinished procedure create_ppc_aix_stack_frame\n"); }
psim_stack(psim *system, char **argv, char **envp) { /* pass the stack device the argv/envp and let it work out what to do with it */ device *stack_device = tree_find_device(system->devices, "/openprom/init/stack"); if (stack_device != (device*)0) { unsigned_word stack_pointer; ASSERT (psim_read_register(system, 0, &stack_pointer, "sp", cooked_transfer) > 0); device_ioctl(stack_device, NULL, /*cpu*/ 0, /*cia*/ device_ioctl_create_stack, stack_pointer, argv, envp); } }