blob: b467933ef6a611f8b322188470ad0e87d3674d44 [file] [log] [blame]
#!/bin/bash
set -e
while getopts n:f name ; do
case $name in
f)
FORCE=y
;;
n)
OPSYS=$OPTARG
;;
esac
done
cd `dirname $0`/../../..
echo "This script creates a git repository for a customized TCF agent."
echo "The repository will contain minimal amount of code"
echo "to start porting the agent to a new OS."
echo
if [ -z "$OPSYS" ] ; then
read -p 'Target OS name: ' OPSYS
fi
if [ -z "$OPSYS" ] ; then
exit 0
fi
REPO=tcf.agent.$OPSYS
if [ -z "$FORCE" ] ; then
if [ -d $REPO ] ; then
echo "Directory $REPO already exists"
exit 1
fi
else
rm -rf $REPO
fi
mkdir $REPO
cd $REPO
mkdir -p system/$OPSYS/tcf
cat >system/$OPSYS/tcf/context-`echo "$OPSYS" | tr '[:upper:]' '[:lower:]'`.c <<EOF
#include <tcf/config.h>
#include <tcf/framework/myalloc.h>
#include <tcf/framework/events.h>
#include <tcf/framework/context.h>
Context * context_find_from_pid(pid_t pid, int thread) {
return NULL;
}
int context_attach_self(void) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_attach(pid_t pid, ContextAttachCallBack * done, void * client_data, int mode) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_has_state(Context * ctx) {
return 0;
}
#if ENABLE_ContextMemoryProperties
int context_get_memory_properties(Context * ctx, const char *** names, const char *** values, int * cnt) {
return 0;
}
#endif
#if ENABLE_ContextExtraProperties
int context_get_extra_properties(Context * ctx, const char *** names, const char *** values, int * cnt) {
return 0;
}
#endif
#if ENABLE_ContextStateProperties
int context_get_state_properties(Context * ctx, const char *** names, const char *** values, int * cnt) {
return 0;
}
#endif
int context_stop(Context * ctx) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_resume(Context * ctx, int mode, ContextAddress range_start, ContextAddress range_end) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_can_resume(Context * ctx, int mode) {
return 0;
}
int context_continue(Context * ctx) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_single_step(Context * ctx) {
errno = ERR_UNSUPPORTED;
return -1;
}
const char * context_suspend_reason(Context * ctx) {
return NULL;
}
int context_get_memory_map(Context * ctx, MemoryMap * map) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_write_mem(Context * ctx, ContextAddress address, void * buf, size_t size) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_read_mem(Context * ctx, ContextAddress address, void * buf, size_t size) {
errno = ERR_UNSUPPORTED;
return -1;
}
#if ENABLE_ExtendedMemoryErrorReports
int context_get_mem_error_info(MemoryErrorInfo * info) {
errno = ERR_UNSUPPORTED;
return -1;
}
#endif
#if ENABLE_MemoryAccessModes
int context_write_mem_ext(Context * ctx, MemoryAccessMode * mode, ContextAddress address, void * buf, size_t size) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_read_mem_ext(Context * ctx, MemoryAccessMode * mode, ContextAddress address, void * buf, size_t size) {
errno = ERR_UNSUPPORTED;
return -1;
}
#endif
int context_write_reg(Context * ctx, RegisterDefinition * def, unsigned offs, unsigned size, void * buf) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_read_reg(Context * ctx, RegisterDefinition * def, unsigned offs, unsigned size, void * buf) {
errno = ERR_UNSUPPORTED;
return -1;
}
unsigned context_word_size(Context * ctx) {
return 8;
}
int context_get_canonical_addr(Context * ctx, ContextAddress addr,
Context ** canonical_ctx, ContextAddress * canonical_addr,
ContextAddress * block_addr, ContextAddress * block_size) {
errno = ERR_UNSUPPORTED;
return -1;
}
Context * context_get_group(Context * ctx, int group) {
return ctx;
}
int context_get_supported_bp_access_types(Context * ctx) {
return 0;
}
int context_plant_breakpoint(ContextBreakpoint * bp) {
errno = ERR_UNSUPPORTED;
return -1;
}
int context_unplant_breakpoint(ContextBreakpoint * bp) {
errno = ERR_UNSUPPORTED;
return -1;
}
#if ENABLE_ContextBreakpointCapabilities
int context_get_breakpoint_capabilities(Context * ctx, const char *** names, const char *** values, int * cnt) {
*cnt = 0;
return 0;
}
#endif
#if ENABLE_ExtendedBreakpointStatus
int context_get_breakpoint_status(ContextBreakpoint * bp, const char *** names, const char *** values, int * cnt) {
*cnt = 0;
return 0;
}
#endif
#if ENABLE_ContextISA
int context_get_isa(Context * ctx, ContextAddress addr, ContextISA * isa) {
errno = ERR_UNSUPPORTED;
return -1;
}
#endif
RegisterDefinition * get_reg_definitions(Context * ctx) {
return NULL;
}
RegisterDefinition * get_PC_definition(Context * ctx) {
return NULL;
}
RegisterDefinition * get_reg_by_id(Context * ctx, unsigned id, RegisterIdScope * scope) {
return NULL;
}
int read_reg_bytes(StackFrame * frame, RegisterDefinition * reg_def, unsigned offs, unsigned size, uint8_t * buf) {
errno = ERR_UNSUPPORTED;
return -1;
}
int write_reg_bytes(StackFrame * frame, RegisterDefinition * reg_def, unsigned offs, unsigned size, uint8_t * buf) {
errno = ERR_UNSUPPORTED;
return -1;
}
uint8_t * get_break_instruction(Context * ctx, size_t * size) {
return NULL;
}
int crawl_stack_frame(StackFrame * frame, StackFrame * down) {
errno = ERR_UNSUPPORTED;
return -1;
}
void init_contexts_sys_dep(void) {
}
EOF
cat >system/$OPSYS/tcf/regset.h <<EOF
#include <tcf/config.h>
EOF
cat >Makefile <<EOF
OPSYS = $OPSYS
MACHINE = x86_64
LIBS = -lpthread -lrt
TCF_AGENT_DIR=../org.eclipse.tcf.agent/agent
include \$(TCF_AGENT_DIR)/Makefile.inc
override CFLAGS += \$(foreach dir,\$(INCDIRS),-I\$(dir)) \$(OPTS)
HFILES := \$(foreach dir,\$(SRCDIRS),\$(wildcard \$(dir)/*.h)) \$(HFILES)
CFILES := \$(sort \$(foreach dir,\$(SRCDIRS),\$(wildcard \$(dir)/*.c)) \$(CFILES))
all: \$(addprefix \$(BINDIR)/,agent\$(EXTEXE))
\$(BINDIR)/libtcf\$(EXTLIB) : \$(OFILES)
\$(AR) \$(AR_FLAGS) \$(AR_OUT_F)\$@ \$^
\$(RANLIB)
\$(BINDIR)/agent\$(EXTEXE): \$(BINDIR)/tcf/main/main\$(EXTOBJ) \$(BINDIR)/libtcf\$(EXTLIB)
\$(LINK) \$(LINK_FLAGS) \$(LINK_OUT_F)\$@ \$(BINDIR)/tcf/main/main\$(EXTOBJ) \$(BINDIR)/libtcf\$(EXTLIB) \$(LIBS)
\$(BINDIR)/%\$(EXTOBJ): %.c \$(HFILES) Makefile
@\$(call MKDIR,\$(dir \$@))
\$(CC) \$(CFLAGS) -c -o \$@ \$<
\$(BINDIR)/%\$(EXTOBJ): \$(TCF_AGENT_DIR)/%.c \$(HFILES) Makefile
@\$(call MKDIR,\$(dir \$@))
\$(CC) \$(CFLAGS) -c -o \$@ \$<
clean:
\$(call RMDIR,\$(BINDIR))
EOF
mkdir -p tcf
cat >tcf/config.h <<EOF
#ifndef D_config
#define D_config
#define ENABLE_SSL 0
#define ENABLE_ELF 0
#define ENABLE_LineNumbersProxy 1
#define ENABLE_SymbolsProxy 1
#define ENABLE_ContextProxy 1
#define ENABLE_ContextIdHashTable 1
#define ENABLE_ContextMemoryProperties 0
#define ENABLE_ContextExtraProperties 0
#define ENABLE_ContextStateProperties 0
#define ENABLE_ContextBreakpointCapabilities 0
#define ENABLE_ExtendedBreakpointStatus 0
#define ENABLE_ExtendedMemoryErrorReports 0
#define ENABLE_MemoryAccessModes 0
#define ENABLE_ContextISA 1
#define USE_uuid_generate 0
#define SERVICE_Symbols 0
#define SERVICE_LineNumbers 0
#define SERVICE_SysMonitor 0
#define SERVICE_Terminals 0
#include <tcf/framework/config.h>
#endif /* D_config */
EOF
cat >.gitignore <<EOF
/obj
EOF
git init
git add .gitignore Makefile
git add tcf/* system/$OPSYS/tcf/*
git commit -am "Initial version"
echo "Successfully created repository:"
echo " $(pwd)"