Example #1
0
static	int
print_pc( caddr_t pc )
{
	void		*handle ;
	DlInfoRec	dli ;
	OZ_ClassID	cid ;

	if ( DlIsCore( pc ) ) cid = 0LL ;
	else cid = DlIsClass( pc ) ;
	handle = DlOpen( cid ) ;
	if ( handle == NULL ) {
		if ( cid ) OzOutput( -1, " %016lx:0x%08x", cid, pc ) ;
		else OzOutput( -1, " 0x%08x", pc ) ;
		goto error ;
	}
	if ( DlAddr( handle, pc, &dli ) < 0 ) {
		if ( cid ) OzOutput( -1, " %016lx:0x%08x", cid, pc ) ;
		else OzOutput( -1, " 0x%08x", pc ) ;
		goto error ;
	}
	if ( dli.sname != NULL ) {
		char	*ptr ;
		char	*buff ;
		OzOutput( -1, " in " ) ;
		buff = OzMalloc( OzStrlen(dli.sname) + 1 ) ;
		if ( buff == NULL ) ptr = (char *)dli.sname ;
		else {
			OzStrcpy( buff, dli.sname ) ;
			ptr = OzStrchr( buff, ':' ) ;
			if ( ptr ) *ptr = '\0' ;
			ptr = buff ;
		}
		if ( cid ) OzOutput( -1, "%016lx::%s", cid, ptr ) ;
		else OzOutput( -1, "<%s>", ptr ) ;
		if ( buff != NULL ) OzFree( buff ) ;
	}

	if ( dli.sline ) {
		if ( dli.fname == NULL || cid ) {
			OzOutput( -1, " (at %d)", dli.sline ) ;
		} else OzOutput(-1, " at %s:%d", dli.fname, dli.sline ) ;
	}

error:
	if ( handle != NULL ) DlClose( handle ) ;
	return( 0 ) ;
}
Example #2
0
static	int
Break( char *aStrAddr )
{
	int		id = -1 ;
	char		*p ;
	caddr_t		addr ;
	OZ_ClassID	cid ;
	void		*handle ;
	int		line ;

	if ( aStrAddr == NULL ) return( 1 ) ;

	cid = OzStrtoull( aStrAddr, &p, 16 ) ;
	if ( p - aStrAddr < 16 ) cid |= OzExecutorID ;

	handle = DlOpen( cid ) ;
	if ( handle == NULL ) {
		OzOutput( -1, "Not found %016lx\n", cid ) ;
		goto error ;
	}
	line = OzStrtol( p+1, NULL, 0 ) ;
	addr = DlSrc( handle, "/private.c", line ) ;
	if ( addr == NULL ) {
		OzOutput( -1, "Not found %016lx:%d\n", cid, line ) ;
		goto error ;
	}

	id = OzBreak( addr ) ;
	if ( id < 0 ) {
		OzOutput( -1, "Can't break at %016lx:%d[0x%x]\n",
				cid, line, addr ) ;
		goto error ;
	}
	OzOutput( -1, "%d at 0x%x.\n", id, addr ) ;

error:
	if ( handle != NULL ) DlClose( handle ) ;
	return( 0 <= id ? 0 : -1 )  ;
}
Example #3
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;
}