#!/usr/bin/env python3
"""Page out executable mappings of a stopped, driver-owned zygote (Linux x64)."""
import ctypes,os,sys,json
pid=int(sys.argv[1]); lib=ctypes.CDLL(None,use_errno=True)
class Iovec(ctypes.Structure):_fields_=[('base',ctypes.c_void_p),('length',ctypes.c_size_t)]
fd=os.pidfd_open(pid);results=[]
for line in open(f'/proc/{pid}/maps'):
    fields=line.split(None,5)
    if len(fields)<6 or not fields[-1].strip().removesuffix(' (deleted)').endswith('/t3code'):continue
    lo,hi=[int(x,16) for x in fields[0].split('-')];iov=Iovec(lo,hi-lo)
    n=lib.syscall(ctypes.c_long(440),ctypes.c_int(fd),ctypes.byref(iov),ctypes.c_size_t(1),ctypes.c_int(21),ctypes.c_uint(0))
    results.append(dict(bytes=hi-lo,result=n,errno=ctypes.get_errno() if n<0 else 0))
os.close(fd);print(json.dumps(results))
