#!/usr/bin/env python3
#
# Copyright (c) 2024 STMicroelectronics
# SPDX-License-Identifier: Apache-2.0

"""
This file implements the Symbol Link Identifer (SLID)
generation code, for use by the LLEXT subsystem.
SLID-based linking is enabled by the Kconfig
option 'CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID'.

When executed as a script, this file can be used as
an interactive prompt to calculate the SLID of arbitrary
symbols, which can be useful for debugging purposes.

IMPLEMENTATION NOTES:
  Currently, SLIDs are generated by taking the first
  [pointer size] bytes of the symbol name's SHA-256
  hash, taken in big-endian order.

  This ordering provides one advantage: the 32-bit
  SLID for an export is present in the top 32 bits of
  the 64-bit SLID for the same export.
"""

from hashlib import sha256

def generate_slid(symbol_name: str, slid_size: int) -> int:
    """
    Generates the Symbol Link Identifier (SLID) for a symbol.

        symbol_name: Name of the symbol for which to generate a SLID
        slid_side: Size of the SLID in bytes (4/8)
    """
    if slid_size not in (4, 8):
        raise AssertionError(f"Invalid SLID size {slid_size}")

    m = sha256()
    m.update(symbol_name.encode("utf-8"))
    hash = m.digest()
    return int.from_bytes(hash[0:slid_size], byteorder='big', signed=False)

def format_slid(slid: int, slid_size: int) -> str:
    if slid_size == 4:
        fmt = f"0x{slid:08X}"
    elif slid_size == 8:
        fmt = f"0x{slid:016X}"
    return fmt

def repl():
    while True:
        sym_name = input("Symbol name? ")
        slid32 = generate_slid(sym_name, 4)
        slid64 = generate_slid(sym_name, 8)
        print(f"  32-bit SLID for '{sym_name}': {format_slid(slid32, 4)}")
        print(f"  64-bit SLID for '{sym_name}': {format_slid(slid64, 8)}")
        print()

if __name__ == "__main__":
    print("LLEXT SLID calculation REPL")
    print("Press ^C to exit.")
    try:
        repl()
    except KeyboardInterrupt:
        print()
