Files
banban/ql-bootloader/boot33/scatter_craneL_check.py

59 lines
2.1 KiB
Python

# -*- coding: gbk -*-
import argparse
from pathlib import Path
def find_mapfile(path):
path = Path(path)
map_file = None
if path.is_dir():
map_file = next(path.rglob("*.map"), None)
else :
pass
return map_file
def parse_mapfile_find_symbols(map_file, target_symbols):
with open(map_file, "r", encoding="utf-8", errors="ignore") as f:
for line in f:
parts = line.strip().split()
if len(parts) < 2:
continue
symbol, address = parts[0], parts[1]
if symbol in target_symbols and address.startswith("0x"):
target_symbols[symbol] = address
return target_symbols
if __name__ == "__main__":
import sys
path = sys.argv[1]
target_symbols = {
"Load$$DATA$$RW$$Base": None,
"Image$$DATA$$RW$$Base": None,
"Image$$DATA$$RW$$Length": None
}
mapfile = find_mapfile(path)
target_symbols = parse_mapfile_find_symbols(mapfile, target_symbols)
rw_data_load_addr = target_symbols["Load$$DATA$$RW$$Base"]
rw_date_exec_addr = target_symbols["Image$$DATA$$RW$$Base"]
rw_data_length = target_symbols["Image$$DATA$$RW$$Length"]
rw_data_load_addr = int(rw_data_load_addr, 16)
rw_date_exec_addr = int(rw_date_exec_addr, 16)
rw_data_length = int(rw_data_length, 16)
rw_data_load_end = rw_data_load_addr + rw_data_length
print(f"rw_data_load_addr = {rw_data_load_addr:x}")
print(f"rw_date_exec_addr = {rw_date_exec_addr:x}")
print(f"rw_data_length = {rw_data_length:x}")
if rw_date_exec_addr < rw_data_load_end :
print("****************************************************************")
print(f"error: rw_date执行地址与加载重叠,请往后移至少到 {rw_data_load_end:x}!!!")
print(f"error: rw_date执行地址与加载重叠,请往后移至少到 {rw_data_load_end:x}!!!")
print(f"error: rw_date执行地址与加载重叠,请往后移至少到 {rw_data_load_end:x}!!!")
print("****************************************************************")
exit(1)
exit(0)