mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-22 19:09:31 +08:00
* cris/sim-main.h (struct _sim_cpu): New member
set_target_thread_data. * cris/crisv32f.c (CRIS_TLS_REGISTER): Define. * cris/crisv10f.c: Ditto. * cris/cris-tmpl.c (MY (set_target_thread_data)): New function. (MY (f_specific_init)): Set new _sim_cpu member to new function. * cris/traps.c (TARGET_SYS_set_thread_area): Define. (cris_break_13_handler) <case TARGET_SYS_set_thread_area>: New case.
This commit is contained in:
@ -1,5 +1,15 @@
|
|||||||
2009-01-03 Hans-Peter Nilsson <hp@axis.com>
|
2009-01-03 Hans-Peter Nilsson <hp@axis.com>
|
||||||
|
|
||||||
|
* cris/sim-main.h (struct _sim_cpu): New member
|
||||||
|
set_target_thread_data.
|
||||||
|
* cris/crisv32f.c (CRIS_TLS_REGISTER): Define.
|
||||||
|
* cris/crisv10f.c: Ditto.
|
||||||
|
* cris/cris-tmpl.c (MY (set_target_thread_data)): New function.
|
||||||
|
(MY (f_specific_init)): Set new _sim_cpu member to new function.
|
||||||
|
* cris/traps.c (TARGET_SYS_set_thread_area): Define.
|
||||||
|
(cris_break_13_handler) <case TARGET_SYS_set_thread_area>: New
|
||||||
|
case.
|
||||||
|
|
||||||
* cris/traps.c (TARGET_SYS_exit_group): Define.
|
* cris/traps.c (TARGET_SYS_exit_group): Define.
|
||||||
(cris_break_13_handler): Handle it like the exit for the last
|
(cris_break_13_handler): Handle it like the exit for the last
|
||||||
thread.
|
thread.
|
||||||
|
@ -233,6 +233,14 @@ MY (f_model_mark_set_h_gr) (SIM_CPU *current_cpu, ARGBUF *abuf)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Set the thread register contents. */
|
||||||
|
|
||||||
|
void
|
||||||
|
MY (set_target_thread_data) (SIM_CPU *current_cpu, USI val)
|
||||||
|
{
|
||||||
|
(CPU (XCONCAT2 (h_sr_v, BASENUM) [CRIS_TLS_REGISTER])) = val;
|
||||||
|
}
|
||||||
|
|
||||||
/* Create the context for a thread. */
|
/* Create the context for a thread. */
|
||||||
|
|
||||||
void *
|
void *
|
||||||
@ -256,6 +264,7 @@ MY (f_specific_init) (SIM_CPU *current_cpu)
|
|||||||
{
|
{
|
||||||
current_cpu->make_thread_cpu_data = MY (make_thread_cpu_data);
|
current_cpu->make_thread_cpu_data = MY (make_thread_cpu_data);
|
||||||
current_cpu->thread_cpu_data_size = sizeof (current_cpu->cpu_data);
|
current_cpu->thread_cpu_data_size = sizeof (current_cpu->cpu_data);
|
||||||
|
current_cpu->set_target_thread_data = MY (set_target_thread_data);
|
||||||
#if WITH_HW
|
#if WITH_HW
|
||||||
current_cpu->deliver_interrupt = MY (deliver_interrupt);
|
current_cpu->deliver_interrupt = MY (deliver_interrupt);
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,6 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|||||||
#define WANT_CPU_CRISV10F
|
#define WANT_CPU_CRISV10F
|
||||||
|
|
||||||
#define BASENUM 10
|
#define BASENUM 10
|
||||||
|
#define CRIS_TLS_REGISTER 14
|
||||||
#include "cris-tmpl.c"
|
#include "cris-tmpl.c"
|
||||||
|
|
||||||
#if WITH_PROFILE_MODEL_P
|
#if WITH_PROFILE_MODEL_P
|
||||||
|
@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|||||||
#define SPECIFIC_U_MEM_FN
|
#define SPECIFIC_U_MEM_FN
|
||||||
#define SPECIFIC_U_MOVEM_FN
|
#define SPECIFIC_U_MOVEM_FN
|
||||||
#define BASENUM 32
|
#define BASENUM 32
|
||||||
|
#define CRIS_TLS_REGISTER 2
|
||||||
#include "cris-tmpl.c"
|
#include "cris-tmpl.c"
|
||||||
|
|
||||||
#if WITH_PROFILE_MODEL_P
|
#if WITH_PROFILE_MODEL_P
|
||||||
|
@ -191,6 +191,9 @@ struct _sim_cpu {
|
|||||||
void* (*make_thread_cpu_data) (SIM_CPU *, void *);
|
void* (*make_thread_cpu_data) (SIM_CPU *, void *);
|
||||||
size_t thread_cpu_data_size;
|
size_t thread_cpu_data_size;
|
||||||
|
|
||||||
|
/* The register differs, so we dispatch to a CPU-specific function. */
|
||||||
|
void (*set_target_thread_data) (SIM_CPU *, USI);
|
||||||
|
|
||||||
/* CPU-model specific parts go here.
|
/* CPU-model specific parts go here.
|
||||||
Note that in files that don't need to access these pieces WANT_CPU_FOO
|
Note that in files that don't need to access these pieces WANT_CPU_FOO
|
||||||
won't be defined and thus these parts won't appear. This is ok in the
|
won't be defined and thus these parts won't appear. This is ok in the
|
||||||
|
@ -113,6 +113,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|||||||
#define TARGET_SYS_getegid32 202
|
#define TARGET_SYS_getegid32 202
|
||||||
#define TARGET_SYS_getgid32 200
|
#define TARGET_SYS_getgid32 200
|
||||||
#define TARGET_SYS_fcntl64 221
|
#define TARGET_SYS_fcntl64 221
|
||||||
|
#define TARGET_SYS_set_thread_area 243
|
||||||
#define TARGET_SYS_exit_group 252
|
#define TARGET_SYS_exit_group 252
|
||||||
|
|
||||||
#define TARGET_PROT_READ 0x1
|
#define TARGET_PROT_READ 0x1
|
||||||
@ -3154,6 +3155,17 @@ cris_break_13_handler (SIM_CPU *current_cpu, USI callnum, USI arg1,
|
|||||||
retval = -cb_host_to_target_errno (cb, ENOSYS);
|
retval = -cb_host_to_target_errno (cb, ENOSYS);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TARGET_SYS_set_thread_area:
|
||||||
|
/* Do the same error check as Linux. */
|
||||||
|
if (arg1 & 255)
|
||||||
|
{
|
||||||
|
retval = -cb_host_to_target_errno (cb, EINVAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
(*current_cpu->set_target_thread_data) (current_cpu, arg1);
|
||||||
|
retval = 0;
|
||||||
|
break;
|
||||||
|
|
||||||
unimplemented_syscall:
|
unimplemented_syscall:
|
||||||
default:
|
default:
|
||||||
retval
|
retval
|
||||||
|
Reference in New Issue
Block a user