mirror of
https://github.com/morluto/rea.git
synced 2026-11-13 18:22:42 +00:00
fix(managed): report InternalCall methods as runtime-provided boundaries (#9547)
* fix(managed): report InternalCall methods as runtime-provided boundaries inspect_managed_native_boundaries listed P/Invoke, native, runtime and unmanaged methods, but not methods with MethodImplOptions.InternalCall (0x1000). The runtime implements those bodies; mscorlib and System.Private.CoreLib declare hundreds of them as FCalls. They now appear in native_implementations with boundary_kind runtime-provided. * fix(managed): keep InternalCall bodies out of CIL decoding The native-boundary view reports InternalCall methods as runtime-provided. Body admission still decoded CIL from a nonzero RVA when the row kept IL and managed flags. CoreCLR rejects such a row (BFA_INTERNAL_METHOD_WITH_RVA). Body admission now treats InternalCall like the Runtime code type. The method gets a partial body with no instructions. The InternalCall test covers both a zero and a nonzero RVA. * test(javascript): distinguish package scope in route fixtures * test(apple): separate identity and refusal fixture groups * fix(managed): honor InternalCall during body admission --------- Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
This commit is contained in:
1 parent
ec7d09176b
commit
da3bb5aa7b
5 files changed
+58
-7
No files matched your search
@@ -6,6 +6,8 @@ export interface ManagedMethodImplementationFlags {
|
||||
readonly codeType: "il" | "native" | "optil" | "runtime";
|
||||
readonly managedKind: "managed" | "unmanaged";
|
||||
readonly pinvokeFlag: boolean;
|
||||
/** MethodImplOptions.InternalCall (0x1000): the runtime implements the body. */
|
||||
readonly internalCall: boolean;
|
||||
}
|
||||
|
||||
const METHOD_CODE_TYPES = ["il", "native", "optil", "runtime"] as const;
|
||||
@@ -42,6 +44,7 @@ export const readMethodDefinitionRow = (
|
||||
codeType: METHOD_CODE_TYPES[(implFlags & 0x0003) as 0 | 1 | 2 | 3],
|
||||
managedKind: (implFlags & 0x0004) === 0 ? "managed" : "unmanaged",
|
||||
pinvokeFlag: (flags & 0x2000) !== 0,
|
||||
internalCall: (implFlags & 0x1000) !== 0,
|
||||
},
|
||||
};
|
||||
};
|
||||
Reference in new issue
Block a user