blob: 216ee57ba14412a8d61a9a895fc52d2bebda1b0a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
* Wind River Systems - initial API and implementation
*******************************************************************************/
#include <tcf/config.h>
#include <tcf/framework/context.h>
#include <tcf/framework/context-dispatcher.h>
#include <tcf/framework/context-mux-ext.h>
#if ENABLE_ContextProxy
#include <tcf/framework/cpudefs-mux.h>
#include <tcf/framework/cpudefs-mdep-mux.h>
#endif
static const char * sys_context_suspend_reason(Context * ctx);
static int sys_context_stop(Context * ctx);
static int sys_context_continue(Context * ctx);
static int sys_context_resume(Context * ctx, int mode, ContextAddress range_start, ContextAddress range_end);
static int sys_context_can_resume(Context * ctx, int mode);
static int sys_context_single_step(Context * ctx);
static int sys_context_get_canonical_addr(Context * ctx, ContextAddress addr,
Context ** canonical_ctx, ContextAddress * canonical_addr,
ContextAddress * block_addr, ContextAddress * block_size);
static int sys_context_get_supported_bp_access_types(Context * ctx);
static int sys_context_plant_breakpoint(ContextBreakpoint * bp);
static int sys_context_unplant_breakpoint(ContextBreakpoint * bp);
static int sys_context_has_state(Context * ctx);
static int sys_context_write_mem(Context * ctx, ContextAddress address,
void * buf, size_t size);
static int sys_context_read_mem(Context * ctx, ContextAddress address,
void * buf, size_t size);
static unsigned sys_context_word_size(Context * ctx);
static int sys_context_read_reg(Context * ctx, RegisterDefinition * def,
unsigned offs, unsigned size, void * buf);
static int sys_context_write_reg(Context * ctx, RegisterDefinition * def,
unsigned offs, unsigned size, void * buf);
static Context * sys_context_get_group(Context * ctx, int group);
static int sys_context_get_memory_map(Context * ctx, MemoryMap * map);
#if ENABLE_ContextStateProperties
static int sys_context_get_state_properties(Context * ctx, const char *** names, const char *** values,
int * cnt);
#endif
#if ENABLE_ExtendedMemoryErrorReports
static int sys_context_get_mem_error_info(MemoryErrorInfo * info);
#endif
#if ENABLE_ExtendedBreakpointStatus
static int sys_context_get_breakpoint_status(ContextBreakpoint * bp, const char *** names, const char *** values, int * cnt);
#endif
#if ENABLE_ContextExtraProperties
static int sys_context_get_extra_properties(Context * ctx, const char *** names, const char *** values, int * cnt);
#endif
#if ENABLE_ContextISA
static int sys_context_get_isa(Context * ctx, ContextAddress addr, ContextISA * isa);
#endif
ContextIf sys_ctx_if = {
sys_context_has_state,
sys_context_suspend_reason,
sys_context_stop,
sys_context_continue,
sys_context_resume,
sys_context_can_resume,
sys_context_single_step,
sys_context_write_mem,
sys_context_read_mem, sys_context_word_size,
sys_context_read_reg,
sys_context_write_reg,
sys_context_get_group,
sys_context_get_canonical_addr,
sys_context_get_memory_map,
sys_context_get_supported_bp_access_types,
sys_context_plant_breakpoint,
sys_context_unplant_breakpoint,
#if ENABLE_ContextStateProperties
sys_context_get_state_properties,
#endif
#if ENABLE_ExtendedMemoryErrorReports
sys_context_get_mem_error_info,
#endif
#if ENABLE_ExtendedBreakpointStatus
sys_context_get_breakpoint_status,
#endif
#if ENABLE_ContextExtraProperties
sys_context_get_extra_properties,
#endif
#if ENABLE_ContextISA
sys_context_get_isa,
#endif
};
static void sys_send_context_created_event(Context * ctx) {
static int initialized = 0;
if (!initialized) {
sys_ctx_if.cpudefs_if = sys_cpudefs_if;
sys_ctx_if.ctxext_if = sys_ctxext_if;
initialized = 1;
}
context_set_interface(ctx, &sys_ctx_if);
send_context_created_event(ctx);
}
#define context_suspend_reason sys_context_suspend_reason
#define context_has_state sys_context_has_state
#define context_stop sys_context_stop
#define context_continue sys_context_continue
#define context_resume sys_context_resume
#define context_can_resume sys_context_can_resume
#define context_single_step sys_context_single_step
#define context_write_mem sys_context_write_mem
#define context_read_mem sys_context_read_mem
#define context_access_mem sys_context_access_mem
#define context_word_size sys_context_word_size
#define context_read_reg sys_context_read_reg
#define context_write_reg sys_context_write_reg
#define context_get_group sys_context_get_group
#define context_get_canonical_addr sys_context_get_canonical_addr
#define context_get_memory_map sys_context_get_memory_map
#define send_context_created_event sys_send_context_created_event
#define context_get_supported_bp_access_types sys_context_get_supported_bp_access_types
#define context_plant_breakpoint sys_context_plant_breakpoint
#define context_unplant_breakpoint sys_context_unplant_breakpoint
#if ENABLE_ContextStateProperties
#define context_get_state_properties sys_context_get_state_properties
#endif
#if ENABLE_ExtendedMemoryErrorReports
#define context_get_mem_error_info sys_context_get_mem_error_info
#endif
#if ENABLE_ExtendedBreakpointStatus
#define context_get_breakpoint_status sys_context_get_breakpoint_status
#endif
#if ENABLE_ContextExtraProperties
#define context_get_extra_properties sys_context_get_extra_properties
#endif
#if ENABLE_ContextISA
#define context_get_isa sys_context_get_isa
#endif