docs: def syscall_from_addr(self, addr, allow_unsupported=True):
          """
          Get a syscall SimProcedure from an address.
  
          :param addr: The address to convert to a syscall SimProcedure
          :param allow_unsupported: Whether to return a dummy procedure for an unsupported syscall instead of raising an
                                    exception.
          :return: The SimProcedure for the syscall, or None if the address is not a syscall address.
          """
          if not self.is_syscall_addr(addr):
              return None
  
          number = (addr - self.kernel_base) // self.syscall_addr_alignment
          for abi in self.syscall_abis:
              baseno, minno, maxno = self.syscall_abis[abi]
              if baseno <= number <= baseno + maxno - minno:
                  number += minno
                  number -= baseno
                  break
          else:
              abi = None
          return self.syscall_from_number(number, allow_unsupported=allow_unsupported, abi=abi)