In effect, the pc-relative calls are pointers from one code object to another. We can use the machinecode maps to parse the compiled code objects and discover these references. We can also apply fixup (do pass through code, use machinecode maps to find calls, eagerly patch all calls to obsolete methods).
This combined with the current scheme of parsing thread stacks to ensure that obsolete but still active frames should be sufficient to enable us to GC compiled code in the presence of pc-relative calls.