summaryrefslogtreecommitdiff
path: root/tools/detect_function_csv_overlaps.py
blob: e80fd1346897448e9239adb019379f2d2bd1ab0e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python3
import csv
import io
from common.util import utils

new_rows = []
prev = None

for info in utils.get_functions(all=True):
    if prev is not None:
        if (prev.addr <= info.addr < prev.addr + prev.size) or \
                (prev.addr <= info.addr + info.size < prev.addr + prev.size):
            print(
                f"overlap between {prev.addr:x} and {info.addr:x} (expected size: {info.addr - prev.addr:06})")

        if prev.addr + prev.size != info.addr:
            print(f"gap between {prev.addr:x} and {info.addr:x}")
            new_rows.append([
                f"0x{(prev.addr + prev.size) | 0x7100000000:016x}",
                "U",
                f"{info.addr - (prev.addr + prev.size):06}",
                "",
            ])

    prev = info
    new_rows.append(info.raw_row)

buffer = io.StringIO()
writer = csv.writer(buffer, lineterminator="\n")
writer.writerow("Address,Quality,Size,Name".split(","))
for row in new_rows:
    writer.writerow(row)
utils.get_functions_csv_path().write_text(buffer.getvalue())