Skip to content

Conversation

@bdash
Copy link
Contributor

@bdash bdash commented Aug 22, 2025

This is functionally equivalent to the previous workflow_objc, with the following changes:

  1. It mutates the core.function.metaAnalysis workflow rather than registering a new named workflow. The activities now all check for the presence of the Objective-C metadata added by ObjCProcessor to determine whether they should do work, rather than relying on MachoView to override the function workflow when Objective-C metadata is present. This fixes It should be easier to add additional activities to Objective-C and shared cache workflows #6779.
  2. The auto-inlining of objc_msgSend selector stub functions is performed in a separate activity from the processing of objc_msgSend call sites. The selector stub inlining activity is configured so that it does not run in DSCView as the shared cache needs different behavior for stub functions more generally that SharedCacheWorkflow already provides.
  3. The way that types like id and SEL are referenced is fixed so that they show up as id rather than objc_struct*.

This also replaces the Objective-C portion of the shared cache's workflow, and incorporates several bug fixes that had been applied to it but not the standalone Objective-C workflow.

@bdash
Copy link
Contributor Author

bdash commented Aug 22, 2025

Having multiple different types of analysis of objc_msgSend call sites be in a single activity doesn't feel great, but the process of determining finding the individual call sites is complex enough that it'd be kinda gross to have to do it in multiple activities.

Perhaps there's some way I'm missing to communicate data between different activities that would allow me to have an "identify call sites" activity that call type adjustment and direct call rewriting activities could depend on so they could reuse data that it computes.

bdash added 3 commits August 27, 2025 15:59
…value}

These are available on `LowLevelILFunction<M, SSA>`.
1. Some SSA-specific functions are now implemented on
   `LowLevelILFunction<M, SSA>` rather than `Ref<LowLevelILFunction<M, SSA>>`.
2. A lifting helper for `LLIL_TAILCALL` is added to `LowLevelILFunction`.
3. `PossibleValueSet::ImportedAddressValue` now holds the value.
This is functionally equivalent to the previous workflow_objc, with the
following changes:
1. It mutates the `core.function.metaAnalysis` workflow rather than
   registering a new named workflow. The activities now all check for
   the presence of the Objective-C metadata added by `ObjCProcessor` to
   determine whether they should do work, rather than relying on
   `MachoView` to override the function workflow when Objective-C
   metadata is present. This fixes
   #6779.
2. The auto-inlining of `objc_msgSend` selector stub functions is
   performed in a separate activity from the processing of
   `objc_msgSend` call sites. The selector stub inlining activity is
   configured so that it does not run in `DSCView` as the shared cache
   needs different behavior for stub functions more generally that
   `SharedCacheWorkflow` already provides.
3. The way that types like `id` and `SEL` are referenced is fixed so
   that they show up as `id` rather than `objc_struct*`.

This also replaces the Objective-C portion of the shared cache's
workflow, and incorporates several bug fixes that had been applied to it
but not the standalone Objective-C workflow.
@bdash bdash force-pushed the objc-workflow-rust branch from 46f325d to 2303f75 Compare August 28, 2025 02:18
@bdash bdash merged commit 2303f75 into dev Aug 28, 2025
8 of 10 checks passed
@bdash bdash deleted the objc-workflow-rust branch August 28, 2025 02:25
@emesare emesare added this to the Io milestone Sep 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

It should be easier to add additional activities to Objective-C and shared cache workflows

3 participants