From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-sender-0.a4lg.com (mail-sender.a4lg.com [153.120.152.154]) by sourceware.org (Postfix) with ESMTPS id D0D893858D28 for ; Tue, 29 Nov 2022 02:32:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org D0D893858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=irq.a4lg.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=irq.a4lg.com Received: from [127.0.0.1] (localhost [127.0.0.1]) by mail-sender-0.a4lg.com (Postfix) with ESMTPSA id 204EF300089; Tue, 29 Nov 2022 02:32:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=irq.a4lg.com; s=2017s01; t=1669689127; bh=3WaNveWe2Xsrp2VaiPm+e9S81S1QsDP/cUqlWqog7GU=; h=Message-ID:Date:Mime-Version:Subject:To:References:From: In-Reply-To:Content-Type:Content-Transfer-Encoding; b=VwCcgIxeSU8M5SVkZh8ElghqnMtIRLZEIsJHA9N3ahPxYB+LyedsYBt5o6GOZ+WaK SmDP9PKpwZ9dEOFiicidRFQE5J0EP+TS+0K710cowtkiiHZzw/GNceza4cnzToZzQJ jUOXDIYJnvrK83evgRmSKysGjrYV8ohbQutLn6hE= Message-ID: <01990896-e81c-be50-85df-0dbf1bb9732b@irq.a4lg.com> Date: Tue, 29 Nov 2022 11:32:05 +0900 Mime-Version: 1.0 Subject: Re: [REVIEW ONLY 2/2] TEST: Add instantiation script on CSR allocation Content-Language: en-US To: Palmer Dabbelt , binutils@sourceware.org References: From: Tsukasa OI In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 2022/11/29 11:22, Palmer Dabbelt wrote: > On Mon, 28 Nov 2022 17:20:58 PST (-0800), binutils@sourceware.org wrote: >> From: Tsukasa OI >> >> --- >>  instantiate-sspmp.sh | 130 +++++++++++++++++++++++++++++++++++++++++++ >>  1 file changed, 130 insertions(+) >>  create mode 100755 instantiate-sspmp.sh > > It's not clear to me what you're trying to do here. It will not be a part of GNU Binutils. Because 'Sspmp' CSRs don't have CSR numbers assigned, I assigned numbers in the "custom" CSR range. Once we determined the real number, we can replace all related files in GNU Binutils just by running this script. e.g. ./instantiate-sspmp.sh 0x1a0 0x1b0 0x1f0 0x1f1 if real CSR numbers are assigned as follows: - (hypothetical) spmpcfg0 == 0x1a0 - (hypothetical) spmpaddr0 == 0x1b0 - (hypothetical) spmpswitch0 == 0x1f0 - (hypothetical) spmpswitch1 == 0x1f1 If someone tests this extension, it's possible that they assign their CSR numbers. I attached this script for this reason. It also applies to 'Zisslpcfi' and (not yet submitted) 'Zjpm' extension proposals. Thanks, Tsukasa > >> >> diff --git a/instantiate-sspmp.sh b/instantiate-sspmp.sh >> new file mode 100755 >> index 000000000000..23b6a2f554e6 >> --- /dev/null >> +++ b/instantiate-sspmp.sh >> @@ -0,0 +1,130 @@ >> +#! /bin/bash >> +# SPDX-License-Identifier: CC0-1.0 >> +# Author: Tsukasa OI >> +# Year: 2022 >> + >> +check_csr_addr () >> +{ >> +    ADDR="$1" >> +    case "$ADDR" in >> +    0x* | 0X*) >> +        ADDR="${ADDR#??}" >> +        ;; >> +    esac >> +    case "$ADDR" in >> +    [0-9a-fA-F]) >> +        ADDR=00$ADDR >> +        ;; >> +    [0-9a-fA-F][0-9a-fA-F]) >> +        ADDR=0$ADDR >> +        ;; >> +    [0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]) >> +        ;; >> +    *) >> +        echo "ERROR: \`$1' is not a valid CSR address for \`$2'." 1>&2 >> +        exit 1 >> +        ;; >> +    esac >> +    ADDR=$(echo $ADDR | tr A-F a-f) >> +    printf %s $ADDR >> +    return 0 >> +} >> + >> +canonicalize_hex () >> +{ >> +    ADDR=$1 >> +    while : >> +    do >> +        case $ADDR in >> +        0) >> +            break >> +            ;; >> +        0?*) >> +            ADDR=${ADDR#0} >> +            ;; >> +        *) >> +            break >> +            ;; >> +        esac >> +    done >> +    printf 0x%s $ADDR >> +} >> + >> +dwarf_regnum () >> +{ >> +    echo -n $(($1 + 4096)) >> +} >> + >> +dwarf_offset () >> +{ >> +    echo -n $(($1 * 4)) >> +} >> + >> +test_path () >> +{ >> +    if test '!' -f "$1" >> +    then >> +        echo "ERROR: file \`$1' is not found." 1>&2 >> +        exit 1 >> +    fi >> +} >> + >> +if test $# -ne 4 >> +then >> +    ERRMSG="usage: $0 ADDR_SPMPCFG0 ADDR_SPMPADDR0 ADDR_SPMPSWITCH0 >> ADDR_SPMPSWITCH1" >> +    echo "$ERRMSG" 1>&2 >> +    exit 1 >> +fi >> + >> +PRIV_VERSIONS="1p9p1 1p10 1p11 1p12" >> + >> +test_path include/opcode/riscv-opc.h >> +for V in $PRIV_VERSIONS >> +do >> +    test_path gas/testsuite/gas/riscv/csr-version-$V.d >> +done >> +test_path gas/testsuite/gas/riscv/csr-dw-regnums.s >> +test_path gas/testsuite/gas/riscv/csr-dw-regnums.d >> + >> +do_csr_instantiation () >> +{ >> +    CSR="$1" >> +    CSR_UPPER=$(echo $CSR | tr a-z A-Z) >> +    ADDR=$(check_csr_addr "$2" $CSR) >> +    HEXC=$(canonicalize_hex $ADDR) >> +    DWREG=$(dwarf_regnum $HEXC) >> +    DWOFF=$(dwarf_offset $HEXC) >> +    ORIG_ADDR=$(grep "a0,${CSR}\$" >> gas/testsuite/gas/riscv/csr-version-1p12.d | head -n 1 | sed >> 's/.*+\([0-9a-f]\{3\}\)02573.*/\1/') >> +    sed -i "s/^#define CSR_${CSR_UPPER} .*/#define CSR_${CSR_UPPER} >> $HEXC/" include/opcode/riscv-opc.h >> +    for V in $PRIV_VERSIONS >> +    do >> +        sed -i "s/+${ORIG_ADDR}\\(02573\\|59073\\)/+${ADDR}\\1/" >> gas/testsuite/gas/riscv/csr-version-$V.d >> +    done >> +    sed -i "s/\\.cfi_offset ${CSR}, .*/.cfi_offset ${CSR}, ${DWOFF}/" >> gas/testsuite/gas/riscv/csr-dw-regnums.s >> +    sed -i "s/DW_CFA_offset_extended_sf: r[0-9]\\+ \\\\(${CSR}\\\\) >> at cfa\\\\+[0-9]\\+/DW_CFA_offset_extended_sf: r${DWREG} >> \\\\(${CSR}\\\\) at cfa\\\\+${DWOFF}/" >> gas/testsuite/gas/riscv/csr-dw-regnums.d >> +} >> + >> +ADDR=$(check_csr_addr "$1" spmpcfg0) >> +NADDR=$((0x$ADDR)) >> +for N in $(seq 0 15) >> +do >> +    ADDR_N=$(printf %03x $(($NADDR + $N))) >> +    do_csr_instantiation spmpcfg$N $ADDR_N >> +done >> + >> +ADDR=$(check_csr_addr "$2" spmpaddr0) >> +NADDR=$((0x$ADDR)) >> +for N in $(seq 0 63) >> +do >> +    ADDR_N=$(printf %03x $(($NADDR + $N))) >> +    do_csr_instantiation spmpaddr$N $ADDR_N >> +done >> + >> +do_csr_instantiation spmpswitch0 "$3" >> +do_csr_instantiation spmpswitch1 "$4" >> + >> +if test -f "$0" >> +then >> +    rm -f "$0" >> +fi >> +exit 0 >