aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorKito Cheng <kito.cheng@sifive.com>2023-04-24 16:13:24 +0800
committerKito Cheng <kito.cheng@sifive.com>2023-04-24 16:13:24 +0800
commit5da0026b1bff81d6de1dcf21636a970094b61c20 (patch)
treefab0fd473088375c4da8e6ee5a141ffd59eb7495 /scripts
parent22f2d289b82e2e246281464bbd74e71376d99a81 (diff)
downloadriscv-gnu-toolchain-5da0026b1bff81d6de1dcf21636a970094b61c20.zip
riscv-gnu-toolchain-5da0026b1bff81d6de1dcf21636a970094b61c20.tar.gz
riscv-gnu-toolchain-5da0026b1bff81d6de1dcf21636a970094b61c20.tar.bz2
Add --get-elf-class for march-to-cpu-opt
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/march-to-cpu-opt19
-rwxr-xr-xscripts/wrapper/qemu/riscv64-unknown-linux-gnu-run2
2 files changed, 17 insertions, 4 deletions
diff --git a/scripts/march-to-cpu-opt b/scripts/march-to-cpu-opt
index d6a1a0d..752cf03 100755
--- a/scripts/march-to-cpu-opt
+++ b/scripts/march-to-cpu-opt
@@ -30,6 +30,7 @@ def parse_opt(argv):
parser.add_argument('-march', '--with-arch', type=str, dest='march')
parser.add_argument('-selftest', action='store_true')
parser.add_argument('--get-riscv-tag', type=str)
+ parser.add_argument('--get-elf-class', type=str)
opt = parser.parse_args()
return opt
@@ -160,11 +161,19 @@ class TestArchStringParse(unittest.TestCase):
def selftest():
unittest.main(argv=sys.argv[1:])
-def read_arch_attr (path):
+def open_elf(path):
try:
elffile = elftools.elf.elffile.ELFFile(open(path, 'rb'))
except elftools.common.exceptions.ELFError:
raise Exception("%s is not ELF file!" % path)
+ return elffile
+
+def read_elf_class(path):
+ elffile = open_elf(path)
+ return elffile.elfclass
+
+def read_arch_attr (path):
+ elffile = open_elf(path)
attr_sec = elffile.get_section_by_name(".riscv.attributes")
if attr_sec:
@@ -200,8 +209,12 @@ def main(argv):
if opt.selftest:
selftest()
return 0
- if (opt.with_elf):
- march = read_arch_attr (opt.with_elf)
+ if (opt.get_elf_class):
+ elf_class = read_elf_class (opt.get_elf_class)
+ print (elf_class)
+ return
+ if (opt.get_riscv_tag):
+ march = read_arch_attr (opt.get_riscv_tag)
else:
march = opt.march
cpu_opt = conver_arch_to_qemu_cpu_opt(march)
diff --git a/scripts/wrapper/qemu/riscv64-unknown-linux-gnu-run b/scripts/wrapper/qemu/riscv64-unknown-linux-gnu-run
index f0943f4..93dfccf 100755
--- a/scripts/wrapper/qemu/riscv64-unknown-linux-gnu-run
+++ b/scripts/wrapper/qemu/riscv64-unknown-linux-gnu-run
@@ -10,6 +10,6 @@ do
shift
done
-xlen="$(readelf -h $1 | grep 'Class' | cut -d: -f 2 | xargs echo | sed 's/^ELF//')"
+xlen="$(march-to-cpu-opt --get-elf-class $1)"
QEMU_CPU="$(march-to-cpu-opt --get-riscv-tag $1)" qemu-riscv$xlen -r 5.10 "${qemu_args[@]}" -L ${RISC_V_SYSROOT} "$@"