xref: /qemu/target/xtensa/import_core.sh (revision b1224d8395de9be79c8cddbc2f60d29d9f1c10fe)
19bea2e91SMax Filippov#! /bin/bash -e
29bea2e91SMax Filippov
39bea2e91SMax FilippovOVERLAY="$1"
49bea2e91SMax FilippovNAME="$2"
59bea2e91SMax FilippovFREQ=40000
69bea2e91SMax FilippovBASE=$(dirname "$0")
79bea2e91SMax FilippovTARGET="$BASE"/core-$NAME
89bea2e91SMax Filippov
99bea2e91SMax Filippov[ $# -ge 2 -a -f "$OVERLAY" ] || { cat <<EOF
109bea2e91SMax FilippovUsage: $0 overlay-archive-to-import core-name [frequency-in-KHz]
119bea2e91SMax Filippov    overlay-archive-to-import:  file name of xtensa-config-overlay.tar.gz
129bea2e91SMax Filippov                                to import configuration from.
139bea2e91SMax Filippov    core-name:                  QEMU name of the imported core. Must be valid
149bea2e91SMax Filippov                                C identifier.
159bea2e91SMax Filippov    frequency-in-KHz:           core frequency (40MHz if not specified).
169bea2e91SMax FilippovEOF
179bea2e91SMax Filippovexit
189bea2e91SMax Filippov}
199bea2e91SMax Filippov
209bea2e91SMax Filippov[ $# -ge 3 ] && FREQ="$3"
219bea2e91SMax Filippovmkdir -p "$TARGET"
22ca3c979dSMax Filippovtar -xf "$OVERLAY" -C "$TARGET" --strip-components=2 \
23a153a3f7SMax Filippov    xtensa/config/core-isa.h \
24a153a3f7SMax Filippov    xtensa/config/core-matmap.h
259bea2e91SMax Filippovtar -xf "$OVERLAY" -O gdb/xtensa-config.c | \
26139c1837SPaolo Bonzini    sed -n '1,/*\//p;/XTREG/,/XTREG_END/p' > "$TARGET"/gdb-config.c.inc
272557c3adSMax Filippov#
282557c3adSMax Filippov# Fix up known issues in the xtensa-modules.c
292557c3adSMax Filippov#
302557c3adSMax Filippovtar -xf "$OVERLAY" -O binutils/xtensa-modules.c | \
31571a7e34SMax Filippov    sed -e 's/^\(xtensa_opcode_encode_fn.*\[\] =\)/static \1/' \
322557c3adSMax Filippov        -e '/^int num_bypass_groups()/,/}/d' \
332557c3adSMax Filippov        -e '/^int num_bypass_group_chunks()/,/}/d' \
342557c3adSMax Filippov        -e '/^uint32 \*bypass_entry(int i)/,/}/d' \
352557c3adSMax Filippov        -e '/^#include "ansidecl.h"/d' \
362557c3adSMax Filippov        -e '/^Slot_[a-zA-Z0-9_]\+_decode (const xtensa_insnbuf insn)/,/^}/s/^  return 0;$/  return XTENSA_UNDEFINED;/' \
372745c3bbSMax Filippov        -e 's/#include <xtensa-isa.h>/#include "xtensa-isa.h"/' \
3830c67613SMax Filippov        -e 's/^\(xtensa_isa_internal xtensa_modules\)/static \1/' \
39139c1837SPaolo Bonzini    > "$TARGET"/xtensa-modules.c.inc
409bea2e91SMax Filippov
419bea2e91SMax Filippovcat <<EOF > "${TARGET}.c"
42cb3825b9SMax Filippov#include "qemu/osdep.h"
439bea2e91SMax Filippov#include "cpu.h"
44*4ea5fe99SAlex Bennée#include "gdbstub/helpers.h"
459bea2e91SMax Filippov#include "qemu/host-utils.h"
469bea2e91SMax Filippov
479bea2e91SMax Filippov#include "core-$NAME/core-isa.h"
48a153a3f7SMax Filippov#include "core-$NAME/core-matmap.h"
499bea2e91SMax Filippov#include "overlay_tool.h"
509bea2e91SMax Filippov
512557c3adSMax Filippov#define xtensa_modules xtensa_modules_$NAME
52139c1837SPaolo Bonzini#include "core-$NAME/xtensa-modules.c.inc"
532557c3adSMax Filippov
541479073bSMax Filippovstatic XtensaConfig $NAME __attribute__((unused)) = {
559bea2e91SMax Filippov    .name = "$NAME",
569bea2e91SMax Filippov    .gdb_regmap = {
579bea2e91SMax Filippov        .reg = {
58139c1837SPaolo Bonzini#include "core-$NAME/gdb-config.c.inc"
599bea2e91SMax Filippov        }
609bea2e91SMax Filippov    },
612557c3adSMax Filippov    .isa_internal = &xtensa_modules,
629bea2e91SMax Filippov    .clock_freq_khz = $FREQ,
639bea2e91SMax Filippov    DEFAULT_SECTIONS
649bea2e91SMax Filippov};
659bea2e91SMax Filippov
669bea2e91SMax FilippovREGISTER_CORE($NAME)
679bea2e91SMax FilippovEOF
682796032aSPaolo Bonzini
692796032aSPaolo Bonzinigrep -qxf core-${NAME}.c "$BASE"/cores.list || \
702796032aSPaolo Bonzini    echo core-${NAME}.c >> "$BASE"/cores.list
71