#! /bin/bash -e OVERLAY="$1" NAME="$2" FREQ=40000 BASE=$(dirname "$0") TARGET="$BASE"/core-$NAME [ $# -ge 2 -a -f "$OVERLAY" ] || { cat < "$TARGET"/gdb-config.inc.c # # Fix up known issues in the xtensa-modules.c # tar -xf "$OVERLAY" -O binutils/xtensa-modules.c | \ sed -e 's/^\(xtensa_opcode_encode_fn.*\[\] =\)/static \1/' \ -e '/^int num_bypass_groups()/,/}/d' \ -e '/^int num_bypass_group_chunks()/,/}/d' \ -e '/^uint32 \*bypass_entry(int i)/,/}/d' \ -e '/^#include "ansidecl.h"/d' \ -e '/^Slot_[a-zA-Z0-9_]\+_decode (const xtensa_insnbuf insn)/,/^}/s/^ return 0;$/ return XTENSA_UNDEFINED;/' \ -e 's/#include /#include "xtensa-isa.h"/' \ > "$TARGET"/xtensa-modules.inc.c cat < "${TARGET}.c" #include "qemu/osdep.h" #include "cpu.h" #include "exec/gdbstub.h" #include "qemu-common.h" #include "qemu/host-utils.h" #include "core-$NAME/core-isa.h" #include "core-$NAME/core-matmap.h" #include "overlay_tool.h" #define xtensa_modules xtensa_modules_$NAME #include "core-$NAME/xtensa-modules.inc.c" static XtensaConfig $NAME __attribute__((unused)) = { .name = "$NAME", .gdb_regmap = { .reg = { #include "core-$NAME/gdb-config.inc.c" } }, .isa_internal = &xtensa_modules, .clock_freq_khz = $FREQ, DEFAULT_SECTIONS }; REGISTER_CORE($NAME) EOF grep -q core-${NAME}.o "$BASE"/Makefile.objs || \ echo "obj-y += core-${NAME}.o" >> "$BASE"/Makefile.objs