|
|
|
@ -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) |
|
|
|
|