Exemple #1
0
/* 编译从这开始 */
int main (int argc, char **argv)
{
    int i;

	//share_fs ();

    CurrentHeap = &ProgramHeap;
    argc--; argv++;

#if defined(_LF)
    init_file_layout ();
    init_memory_layout ();
#endif
    CreateLogFile ();

#if 1
    i = ParseCommandLine (argc, argv);
    
    /* 初始化词法分析器 */
    SetupLexer ();
    /* 按照配置文件设置基本类型和默认函数的属性 */
    SetupTypeSystem ();

    for ( ; i < argc; i++ ) {
    
        Compile (argv[i]);
    }
#endif
    CloseLogFile ();
    return (ErrorCount != 0 ? -1 : 0);
}
Exemple #2
0
/*-------------------------------------------------------------------------
 *
 * Preform initialization of guests and guest CPUs
 *
 * Should be called on BSP only while all APs are stopped
 *
 * Return TRUE for success
 *
 *------------------------------------------------------------------------- */
boolean_t initialize_all_guests(uint32_t number_of_host_processors,
				const mon_memory_layout_t *mon_memory_layout,
				const mon_guest_startup_t *
				primary_guest_startup_state,
				uint32_t number_of_secondary_guests,
				const mon_guest_startup_t *
				secondary_guests_startup_state_array,
				const mon_application_params_struct_t *
				application_params)
{
	guest_handle_t primary_guest;
	gpm_handle_t primary_guest_startup_gpm;
	boolean_t ok = FALSE;
	/* guest_handle_t cur_guest; */
	guest_cpu_handle_t gcpu;
	guest_gcpu_econtext_t gcpu_context;

	MON_ASSERT(hw_cpu_id() == 0);
	MON_ASSERT(number_of_host_processors > 0);
	MON_ASSERT(mon_memory_layout);
	MON_ASSERT(primary_guest_startup_state);

	if (number_of_secondary_guests > 0) {
		MON_LOG(mask_anonymous, level_trace,
			"initialize_all_guests ASSERT: Secondary guests are"
			" yet not implemented\n");

		MON_ASSERT(secondary_guests_startup_state_array);

		/* init guests and allocate memory for them */

		/* shutdown temporary layout object */

		MON_DEADLOOP();
		return FALSE;
	}

	/* first init primary guest */
	MON_LOG(mask_anonymous, level_trace, "Init primary guest\n");

	/* BUGBUG: This is a workaround until loader will not do this!!! */
	BITMAP_SET(((mon_guest_startup_t *)primary_guest_startup_state)->flags,
		MON_GUEST_FLAG_REAL_BIOS_ACCESS_ENABLE |
		MON_GUEST_FLAG_LAUNCH_IMMEDIATELY);

	/* TODO: Uses global policym but should be part of mon_guest_startup_t
	 * structure.  */
	primary_guest = init_single_guest(number_of_host_processors,
		primary_guest_startup_state, NULL);
	if (!primary_guest) {
		MON_LOG(mask_anonymous, level_trace,
			"initialize_all_guests: Cannot init primary guest\n");
		MON_DEADLOOP();
		return FALSE;
	}

	guest_set_primary(primary_guest);
	primary_guest_startup_gpm = mon_guest_get_startup_gpm(primary_guest);

	/* init memory layout in the startup gpm */
	ok = init_memory_layout(mon_memory_layout,
		primary_guest_startup_gpm,
		number_of_secondary_guests > 0,
		application_params);

	/* Set active_gpm to startup gpm */
	for (gcpu = mon_guest_gcpu_first(primary_guest, &gcpu_context); gcpu;
	     gcpu = mon_guest_gcpu_next(&gcpu_context))
		mon_gcpu_set_current_gpm(gcpu, primary_guest_startup_gpm);

	MON_LOG(mask_anonymous, level_trace,
		"Primary guest initialized successfully\n");

	return TRUE;
}