Example #1
0
static int linux_os_smp_init(struct target *target)
{
	struct target_list *head;
	/* keep only target->rtos */
	struct rtos *rtos = target->rtos;
	struct linux_os *os_linux =
		(struct linux_os *)rtos->rtos_specific_params;
	struct current_thread *ct;
	head = target->head;

	while (head != (struct target_list *)NULL) {
		if (head->target->rtos != rtos) {
			struct linux_os *smp_os_linux =
				(struct linux_os *)head->target->rtos->
				rtos_specific_params;
			/*  remap smp target on rtos  */
			free(head->target->rtos);
			head->target->rtos = rtos;
			/*  reuse allocated ct */
			ct = smp_os_linux->current_threads;
			ct->threadid = -1;
			ct->TS = 0xdeadbeef;
			ct->core_id = head->target->coreid;
			os_linux->current_threads =
				add_current_thread(os_linux->current_threads, ct);
			os_linux->nr_cpus++;
			free(smp_os_linux);
		}

		head = head->next;
	}

	return ERROR_OK;
}
Example #2
0
static int linux_os_create(struct target *target)
{
	struct linux_os *os_linux = calloc(1, sizeof(struct linux_os));
	struct current_thread *ct = calloc(1, sizeof(struct current_thread));
	LOG_INFO("linux os creation\n");
	os_linux->init_task_addr = 0xdeadbeef;
	os_linux->name = "linux";
	os_linux->thread_list = NULL;
	os_linux->thread_count = 0;
	target->rtos->current_threadid = -1;
	os_linux->nr_cpus = 1;
	os_linux->threads_lookup = 0;
	os_linux->threads_needs_update = 0;
	os_linux->threadid_count = 1;
	os_linux->current_threads = NULL;
	target->rtos->rtos_specific_params = (void *)os_linux;
	ct->core_id = target->coreid;
	ct->threadid = -1;
	ct->TS = 0xdeadbeef;
	os_linux->current_threads =
		add_current_thread(os_linux->current_threads, ct);
	/*  overload rtos thread default handler */
	target->rtos->gdb_thread_packet = linux_thread_packet;
	/*  initialize a default virt 2 phys translation */
	os_linux->phys_mask = ~0xc0000000;
	os_linux->phys_base = 0x0;
	return JIM_OK;
}