Пример #1
0
int main(int argc, char **argv) {
	ddekit_init();
	bsd_dde_init();

	printf("cold=%d\n", cold);

	mtx_init(&mtx1, "test mutex", "test", MTX_DEF);
	cv_init(&cv1, "test condvar");

	printf("----------------------------------------\n");

	printf("wait for timeout\n");
	l4thread_create(cond, (void*) 1, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	printf("----------------------------------------\n");

	printf("calling signal too early\n");
	cv_signal(&cv1);
	l4thread_create(cond, (void*) 2, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	printf("----------------------------------------\n");

	printf("calling broadcast too early\n");
	cv_broadcast(&cv1);
	l4thread_create(cond, (void*) 3, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	printf("----------------------------------------\n");

	printf("waking up one of two threads by signal\n");
	l4thread_create(cond, (void*) 4, L4THREAD_CREATE_ASYNC);
	l4thread_create(cond, (void*) 5, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(30);
	cv_signal(&cv1);
	l4thread_sleep(200);

	printf("----------------------------------------\n");

	printf("waking up two threads by signal\n");
	l4thread_create(cond, (void*) 6, L4THREAD_CREATE_ASYNC);
	l4thread_create(cond, (void*) 7, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(30);
	cv_signal(&cv1);
	l4thread_sleep(30);
	cv_signal(&cv1);
	l4thread_sleep(200);

	printf("----------------------------------------\n");

	printf("waking up two threads by broadcast\n");
	l4thread_create(cond, (void*) 8, L4THREAD_CREATE_ASYNC);
	l4thread_create(cond, (void*) 9, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(30);
	cv_broadcast(&cv1);
	l4thread_sleep(200);

	printf("----------------------------------------\n");

	l4thread_sleep_forever();
	return 0;
}
Пример #2
0
int main(int argc, char **argv) {
	ddekit_init();
	bsd_dde_init();

	printf("- uninitialized, mtx_initialized= %d\n", mtx_initialized(&m));

	mtx_init(&m, "test mutex", "test", MTX_DEF|MTX_RECURSE);
	printf("- initialized,   mtx_initialized= %d\n", mtx_initialized(&m));
	printf("                 mtx_name       =\"%s\"\n", mtx_name(&m));
	printf("                 mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 1, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_lock(&m);
	printf("- locked         mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 2, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_lock(&m);
	printf("- locked x2      mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 3, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_lock(&m);
	printf("- locked x3      mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 4, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_unlock(&m);
	printf("- unlocked x1    mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 5, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_unlock(&m);
	printf("- unlocked x2    mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 6, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_unlock(&m);
	printf("- unlocked x3    mtx_owned      = %d\n", mtx_owned(&m));
	printf("                 mtx_recursed   = %d\n", mtx_recursed(&m));

	l4thread_create(mdwn, (void*) 7, L4THREAD_CREATE_ASYNC);
	l4thread_sleep(200);

	mtx_destroy(&m);
	printf("- destroyed,     mtx_initialized= %d\n", mtx_initialized(&m));

	l4thread_sleep_forever();
	return 0;
}
Пример #3
0
void main (int argc, char *argv[])
{
  CORBA_Server_Environment env = dice_default_server_environment;
  l4dm_dataspace_t ds;
  l4_threadid_t pager;
  l4_addr_t addr;
  l4_size_t size;
  int  rc, t;
  int  is_int = 0;
  int  value_int = 0;
  char buf[0x1000];
  char *p = buf;
  int optionid;
  int opt = 0;
  const struct option long_options[] =
                {
                { "events",      no_argument, NULL, 'e'},
		{ 0, 0, 0, 0}
                };

  //init_globals();

  if (!names_register("os2exec"))
    {
      LOG("Error registering on the name server!");
      return;
    }

  if (!names_waitfor_name("os2srv", &os2srv, 30000))
    {
      LOG("os2srv not found on name server!");
      return;
    }

  if (!names_waitfor_name("os2fs", &fs, 30000))
    {
      LOG("os2fs not found on name server!");
      return;
    }
  LOG("os2fs tid:%x.%x", fs.id.task, fs.id.lthread);

  if (!names_waitfor_name("LOADER", &loader, 30000))
    {
      LOG("LOADER not found on name server!");
      return;
    }

  execsrv = l4_myself();

  // Parse command line arguments
  for (;;)
  {
    opt = getopt_long(argc, argv, "e", long_options, &optionid);
    if (opt == -1) break;
    switch (opt)
    {
      case 'e':
        LOG("using events server");
	use_events = 1;
	break;
      
      default:
        LOG("Error: Unknown option %c", opt);
        usage();
        return;
    }
  }

  // start events thread
  if (use_events)
  {
    // start events thread
    l4thread_create(event_thread, 0, L4THREAD_CREATE_ASYNC);
    LOG("event thread started");
  }

  /* reserve the area below 64 Mb for application private code
     (not for use by libraries, loaded by execsrv) */
  addr = 0x2f000; size = 0x04000000 - addr;
  if ((rc  = l4rm_direct_area_setup_region(addr,
					   size,
					   L4RM_DEFAULT_REGION_AREA,
					   L4RM_REGION_BLOCKED, 0,
					   L4_INVALID_ID)) < 0)
    {
      LOG_printf("main(): setup region %x-%x failed (%d)!\n",
	  addr, addr + size, rc);
      l4rm_show_region_list();
      enter_kdebug("PANIC");
    }
  memset (&options, 0, sizeof(options));

#if 0
  if (!CfgGetopt("debugmodmgr", &is_int, &value_int, (char **)&p))
    if (is_int)
      options.debugmodmgr = value_int;

  if (!CfgGetopt("debugixfmgr", &is_int, &value_int, (char **)&p))
    if (is_int)
      options.debugixfmgr = value_int;

  if (!CfgGetopt("libpath", &is_int, &value_int, (char **)&p))
    if (!is_int)
    {
      options.libpath = (char *)malloc(strlen(p) + 1);
      strcpy(options.libpath, p);
    }

  LOG("debugmodmgr=%d", options.debugmodmgr);
  LOG("debugixfmgr=%d", options.debugixfmgr);
  LOG("libpath=%s", options.libpath);
#endif
  options.libpath = (char *)malloc(4);
  strcpy(options.libpath, "c:\\");

  /* get our l4env infopage as a dataspace */
  rc = l4loader_app_info_call(&loader, l4_myself().id.task,
                              0, &p, &ds, &env);
  /* attach it */  
  attach_ds(&ds, L4DM_RO, &infopage);

#if 0
  /* load shared libs */
  rc = loadso();
  if (rc)
  {
    LOG("Error loading shared libraries");
    return;
  }
#endif

  init_memmgr(&root_area);

  /* load IXF's */
  rc = load_ixfs();
  if (rc)
  {
    LOG("Error loading IXF driver");
    return;
  }
			      
  /* Initializes the module list. Keeps info about which dlls an process have loaded and
     has linked to it (Only support for LX dlls so far). The head of the linked list is
     declared as a global inside dynlink.c */
  rc = ModInitialize();
  if (rc)
  {
    LOG("Can't initialize module manager");
    return;
  }

  // server loop
  LOG("execsrv started.");
  env.malloc = (dice_malloc_func)malloc;
  env.free = (dice_free_func)free;
  os2exec_server_loop(&env);
}
Пример #4
0
int main (int argc, char *argv[])
{
  //CORBA_Environment env = dice_default_environment;
  l4_uint32_t area;
  int rc = 0;
  int optionid;
  int opt = 0;

  const struct option long_options[] =
                {
                { "events",      no_argument, NULL, 'e'},
		{ 0, 0, 0, 0}
                };

  if (!names_waitfor_name("os2srv", &os2srv, 30000))
    {
      LOG("Can't find os2srv on names, exiting...");
      __exit(1, 1);
    }

  if (!names_waitfor_name(fprov, &fprov_id, 30000))
    {
      LOG("Can't find %s on names, exiting...", fprov);
      __exit(1, 1);
    }

  // reserve the lower 64 Mb for OS/2 app
  rc = l4rm_area_reserve_region(0x10000, 0x04000000 - 0x10000, 0, &area);
  if (rc < 0)
  {
    LOG("Panic: something is using memory within the 1st 64 Mb!");
    __exit(1, 1);
  }

  /* query default dataspace manager id */
  dsm = l4env_get_default_dsm();
  if (l4_is_invalid_id(dsm))
  {
    LOG("No dataspace manager found\n");
    __exit(1, 1);
  }
  LOG("dsm=%u.%u", dsm.id.task, dsm.id.lthread);
  LOG("frov_id=%u.%u", fprov_id.id.task, fprov_id.id.lthread);

  l4env_infopage = &infopg;
  l4env_infopage->fprov_id = fprov_id;
  l4env_infopage->memserv_id = dsm;

  if ((rc = DlOpen("/file/system/libkal.s.so", &kalHandle)))
  {
    LOG("Can't load libkal.s.so");
    __exit(1, 1);
  }

  LOG("kalHandle=%lu", kalHandle);

  // fill in the parameter structure for KalInit
  initstr.stack   = __stack;
  initstr.l4rm_do_attach = l4rm_do_attach;
  initstr.l4rm_detach = l4rm_detach;
  initstr.l4rm_lookup        = l4rm_lookup;
  initstr.l4rm_lookup_region = l4rm_lookup_region;
  initstr.l4rm_do_reserve  = l4rm_do_reserve;
  initstr.l4rm_set_userptr   = l4rm_set_userptr; 
  initstr.l4rm_get_userptr   = l4rm_get_userptr;
  initstr.l4rm_area_release  = l4rm_area_release;
  initstr.l4rm_area_release_addr = l4rm_area_release_addr;
  initstr.l4rm_show_region_list = l4rm_show_region_list;
  initstr.l4env_get_default_dsm  = l4env_get_default_dsm;
  initstr.fiasco_gdt_set         = __fiasco_gdt_set;
  initstr.fiasco_gdt_get_entry_offset = __fiasco_gdt_get_entry_offset;
  initstr.logtag = LOG_tag;

  // init kal.dll
  DlRoute(0, "KalInit", &initstr);

  // Parse command line arguments
  for (;;)
  {
    opt = getopt_long(argc, argv, "e", long_options, &optionid);
    if (opt == -1) break;
    switch (opt)
    {
      case 'e':
        LOG("using events server");
	use_events = 1;
	break;
      
      default:
        LOG("Error: Unknown option %c", opt);
        usage();
        __exit(1, 2);
    }
  }

  // start events thread
  if (use_events)
  {
    // start events thread
    l4thread_create((void *)event_thread, 0, L4THREAD_CREATE_ASYNC);
    LOG("event thread started");
  }

  // release the reserved area for application
  rc = l4rm_area_release(area);

  LOG("calling KalStartApp...");
  DlRoute(0, "KalStartApp", argv[argc - 1]);

  return 0;
}
Пример #5
0
int main(int argc, char **argv)
{
  CORBA_Environment env = dice_default_environment;
  int optionid;
  int opt = 0;
  const struct option long_options[] =
                {
                { "events",      no_argument, NULL, 'e'},
		{ 0, 0, 0, 0}
                };
  //int  rc;

  init_globals();
  //FSR_INIT();

  if (!names_register("os2fs"))
  {
    LOG("Can't register on the name server!");
    return 1;
  }
  LOG("registered at the name server");

  if (!names_waitfor_name("os2srv", &os2srv, 30000))
  {
    LOG("Can't find os2srv on names, exiting...");
    return 1;
  }
  LOG("got os2srv tid from the name server");

  LOG("argc=%d", argc);
  // Parse command line arguments
  for (;;)
  {
    opt = getopt_long(argc, argv, "e", long_options, &optionid);
    LOG("opt=%d", opt);
    if (opt == -1) break;
    switch (opt)
    {
      case 'e':
        LOG("using events server");
	use_events = 1;
	break;
      
      default:
        LOG("Error: Unknown option %c", opt);
        usage();
        break;
    }
  }

  // start events thread
  if (use_events)
  {
    // start events thread
    l4thread_create((void *)event_thread, 0, L4THREAD_CREATE_ASYNC);
    LOG("event thread started");
  }

  // my id
  fs = l4_myself();

  // server loop
  LOG("going to the server loop");
  env.malloc = (dice_malloc_func)malloc;
  env.free = (dice_free_func)free;
  os2fs_server_loop(&env);

  return 0;
}