示例#1
0
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");
}
示例#2
0
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);
    }
}