import struct,sys
sys.path.insert(0,'/tmp/claude-0/-root-ants/f0a0d69c-fbe4-4887-8c0d-a5302a0da398/scratchpad')
from bridge import *

def const_refs(addr,size):
    """recover 32-bit constants materialised via Thumb-2 MOVW/MOVT pairs + literal pool words"""
    o=va2off(addr)
    if o is None or size<=0: return []
    out=[]
    lo={}   # Rd -> low half
    k=0
    while k+3 < size:
        hw1,hw2=struct.unpack_from('<HH',B,o+k)
        if (hw1&0xFBF0)==0xF240 and (hw2&0x8000)==0:      # MOVW
            i=(hw1>>10)&1; imm4=hw1&0xF; imm3=(hw2>>12)&7; Rd=(hw2>>8)&0xF; imm8=hw2&0xFF
            lo[Rd]=(imm4<<12)|(i<<11)|(imm3<<8)|imm8
            k+=4; continue
        if (hw1&0xFBF0)==0xF2C0 and (hw2&0x8000)==0:      # MOVT
            i=(hw1>>10)&1; imm4=hw1&0xF; imm3=(hw2>>12)&7; Rd=(hw2>>8)&0xF; imm8=hw2&0xFF
            hi=(imm4<<12)|(i<<11)|(imm3<<8)|imm8
            if Rd in lo: out.append((hi<<16)|lo[Rd])
            k+=4; continue
        k+=2
    # literal-pool style
    for k in range(0,size-3,4):
        w,=struct.unpack_from('<I',B,o+k)
        out.append(w)
    return out

def method_lits(addr,size):
    seen=set(); r=[]
    for w in const_refs(addr,size):
        if w in slot2lit:
            s=literal(slot2lit[w])
            if s not in seen: seen.add(s); r.append(s)
    return r
