)]}'
{
  "commit": "554302a04e07f4ce8c23d1c2ecdac0cc6467725f",
  "tree": "d3724ecef33312e9faeefbdeec9b324b8eae9b93",
  "parents": [
    "a6c8282bab6c2f88923ae3c671b5280975a5af6e"
  ],
  "author": {
    "name": "Matt Gilbride",
    "email": "mattgilbride@google.com",
    "time": "Fri Nov 07 07:45:34 2025 -0800"
  },
  "committer": {
    "name": "Matt Gilbride",
    "email": "mattgilbride@google.com",
    "time": "Fri Nov 07 07:45:34 2025 -0800"
  },
  "message": "jit: support for uprobe-based dynamic instrumentation\n\nIntroduce a `dynamic_instrumentation` flag to the JIT compilation\npipeline to support instrumentation of JIT-compiled methods with\nuprobes. Introduce a dedicated entrypoint (a no-op) for the same.\n\nA new flag is plumbed from `JitCompiler::CompileMethod` down to\n`CodeGeneratorARM64`. The instruction builder will now insert a call to\nthe dedicated entrypoint if the `dynamic_instrumentation` flag is\ntrue. This allows for on-demand instrumentation of JIT code without\nrequiring the process to be fully debuggable.\n\nThis functionality is exposed through\n`VMDebug.getExecutableMethodFileOffsets()`. If a method is not\nAOT-compiled, this function will now trigger a JIT compilation with\ndynamic instrumentation enabled. This allows tools like uprobes to\ninstrument methods on-demand by calling the VMDebug method.\n\nWith the method was successfully jitted with the hook inserted,\n`VMDebug_getExecutableMethodFileOffsets` will return the path to the\nentrypoint (libart.so) and the offset of the entrypoint in the .so\n\nDesign: go/hummingbird-art-jit\n\nTest: TH\nTest: atest uprobestats-art-test\nBug: 410630539\nFlag: com.android.art.rw.flags.dynamic_instrumentation_method_entry_hook\n\nChange-Id: Ifb0649d2c00fbf81650a05b429a73ccb4ec11ef3",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5a008eced0804631f219ccecbecc9d5cd6f2ef80",
      "old_mode": 33188,
      "old_path": "build/flags/Android.bp",
      "new_id": "8372ffc79ef49b3b7bdc5a6bd69fc718e341c317",
      "new_mode": 33188,
      "new_path": "build/flags/Android.bp"
    },
    {
      "type": "modify",
      "old_id": "3cb9d14a9182885806065a589167fb25e3c8d5f6",
      "old_mode": 33188,
      "old_path": "build/flags/art-rw-flags.aconfig",
      "new_id": "fc0f20403219b5dc65f191c72d426eda6f5456a9",
      "new_mode": 33188,
      "new_path": "build/flags/art-rw-flags.aconfig"
    },
    {
      "type": "modify",
      "old_id": "196b729b91ff54f1a8d9ea1e8d0f4856b6d9daca",
      "old_mode": 33188,
      "old_path": "compiler/compiler.h",
      "new_id": "1c6fe1f195fb6bf95dbf20416331466d15531b75",
      "new_mode": 33188,
      "new_path": "compiler/compiler.h"
    },
    {
      "type": "modify",
      "old_id": "6b72727641e3542dfd529ee0cba8618b57b6fef4",
      "old_mode": 33188,
      "old_path": "compiler/jit/jit_compiler.cc",
      "new_id": "9bb3367be42c87ecf35fcd8297b8461ea594b385",
      "new_mode": 33188,
      "new_path": "compiler/jit/jit_compiler.cc"
    },
    {
      "type": "modify",
      "old_id": "66aa545dd7ceb7ba6abf40fc35e426ede0c180ec",
      "old_mode": 33188,
      "old_path": "compiler/jit/jit_compiler.h",
      "new_id": "b061fe90f56f313d386e35533dbfa7d13577158b",
      "new_mode": 33188,
      "new_path": "compiler/jit/jit_compiler.h"
    },
    {
      "type": "modify",
      "old_id": "8ecd1cb230d5789b6ace57e0d40419481256402c",
      "old_mode": 33188,
      "old_path": "compiler/optimizing/code_generator_arm64.cc",
      "new_id": "326039eb52be3499af9d9b4e22dc87c30949f0bd",
      "new_mode": 33188,
      "new_path": "compiler/optimizing/code_generator_arm64.cc"
    },
    {
      "type": "modify",
      "old_id": "05e1fc842b30dd07fbbaf6452161d167314ef65f",
      "old_mode": 33188,
      "old_path": "compiler/optimizing/code_generator_arm64.h",
      "new_id": "f7e8b25a92b4b7769401a705dd5e9a1d1871f381",
      "new_mode": 33188,
      "new_path": "compiler/optimizing/code_generator_arm64.h"
    },
    {
      "type": "modify",
      "old_id": "5b1d5b1fb4e05dd8d650c21ff7a4eb17c25739c7",
      "old_mode": 33188,
      "old_path": "compiler/optimizing/graph.h",
      "new_id": "d784f7d6b1beea50677684be14f714bcb01db2f8",
      "new_mode": 33188,
      "new_path": "compiler/optimizing/graph.h"
    },
    {
      "type": "modify",
      "old_id": "08273250531285733bb562c0f41d34e78ce07945",
      "old_mode": 33188,
      "old_path": "compiler/optimizing/optimizing_compiler.cc",
      "new_id": "86e5a2f2c2ecfa0a4bbec6fa2155a7df87d76bd6",
      "new_mode": 33188,
      "new_path": "compiler/optimizing/optimizing_compiler.cc"
    },
    {
      "type": "modify",
      "old_id": "26664cd94b573d259b0b88e576600ed522728617",
      "old_mode": 33188,
      "old_path": "runtime/arch/arm/entrypoints_init_arm.cc",
      "new_id": "ff8d47ed44e3957474696dc71679a84e6acd1dbc",
      "new_mode": 33188,
      "new_path": "runtime/arch/arm/entrypoints_init_arm.cc"
    },
    {
      "type": "modify",
      "old_id": "43ebfeda1a1fc6d290e57d858a70763d5f85e932",
      "old_mode": 33188,
      "old_path": "runtime/arch/arm64/entrypoints_init_arm64.cc",
      "new_id": "902cd2dea4e0448d703909ac90f33e63f6afd172",
      "new_mode": 33188,
      "new_path": "runtime/arch/arm64/entrypoints_init_arm64.cc"
    },
    {
      "type": "modify",
      "old_id": "91bf48853374a2263695664d3c1762e02c878064",
      "old_mode": 33188,
      "old_path": "runtime/arch/riscv64/entrypoints_init_riscv64.cc",
      "new_id": "ebdad63a2f0ec18e97072001a764f82628802bb0",
      "new_mode": 33188,
      "new_path": "runtime/arch/riscv64/entrypoints_init_riscv64.cc"
    },
    {
      "type": "modify",
      "old_id": "c38accb5fe1c14321e11a9a7be376f589ffbb0c7",
      "old_mode": 33188,
      "old_path": "runtime/arch/x86/entrypoints_init_x86.cc",
      "new_id": "5ce4056ae6a5e1c5c9a740faf119d99ab490539e",
      "new_mode": 33188,
      "new_path": "runtime/arch/x86/entrypoints_init_x86.cc"
    },
    {
      "type": "modify",
      "old_id": "75021748211c714f34386a263b2faeeae07ca474",
      "old_mode": 33188,
      "old_path": "runtime/arch/x86_64/entrypoints_init_x86_64.cc",
      "new_id": "dd41005f194852e8f2aa9c3808cf4519e578ab0c",
      "new_mode": 33188,
      "new_path": "runtime/arch/x86_64/entrypoints_init_x86_64.cc"
    },
    {
      "type": "modify",
      "old_id": "3801934d0d55cef285b4af951fa0be7bace2bf7c",
      "old_mode": 33188,
      "old_path": "runtime/jit/jit.cc",
      "new_id": "d05a33b4b589dbd2d0785eb3d25f491d47fba293",
      "new_mode": 33188,
      "new_path": "runtime/jit/jit.cc"
    },
    {
      "type": "modify",
      "old_id": "9dff1d70d53c48abe3ef98d3c02fa37c8883fca6",
      "old_mode": 33188,
      "old_path": "runtime/jit/jit.h",
      "new_id": "8d960f78ddd622b0a6eadda1aca644979d2844b5",
      "new_mode": 33188,
      "new_path": "runtime/jit/jit.h"
    },
    {
      "type": "modify",
      "old_id": "c3be52106c81bd7ae93280811aa0b7de360b1bb0",
      "old_mode": 33188,
      "old_path": "runtime/native/dalvik_system_VMDebug.cc",
      "new_id": "f82b0606a32b5fbdbcc3a4bf3753ddffab5a527b",
      "new_mode": 33188,
      "new_path": "runtime/native/dalvik_system_VMDebug.cc"
    }
  ]
}
