Skip to content

Commit 88aa312

Browse files
authored
[cDAC] implement GetMethodDescTransparencyData and GetMethodTableTransparencyData (#118963)
* implement GetMethodDescTransparencyData * implement GetMethodTableTransparencyData
1 parent a33a89c commit 88aa312

File tree

2 files changed

+61
-6
lines changed

2 files changed

+61
-6
lines changed

src/native/managed/cdac/mscordaccore_universal/Legacy/ISOSDacInterface.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,20 @@ internal struct DacpMethodDescData
243243

244244
}
245245

246+
internal struct DacpMethodDescTransparencyData
247+
{
248+
public int bHasCriticalTransparentInfo;
249+
public int bIsCritical;
250+
public int bIsTreatAsSafe;
251+
}
252+
253+
internal struct DacpMethodTableTransparencyData
254+
{
255+
public int bHasCriticalTransparentInfo;
256+
public int bIsCritical;
257+
public int bIsTreatAsSafe;
258+
}
259+
246260
[GeneratedComInterface]
247261
[Guid("436f00f2-b42a-4b9f-870c-e73db66ae930")]
248262
internal unsafe partial interface ISOSDacInterface
@@ -306,7 +320,7 @@ internal unsafe partial interface ISOSDacInterface
306320
[PreserveSig]
307321
int GetMethodDescFromToken(ClrDataAddress moduleAddr, /*mdToken*/ uint token, ClrDataAddress* methodDesc);
308322
[PreserveSig]
309-
int GetMethodDescTransparencyData(ClrDataAddress methodDesc, /*struct DacpMethodDescTransparencyData*/ void* data);
323+
int GetMethodDescTransparencyData(ClrDataAddress methodDesc, DacpMethodDescTransparencyData* data);
310324

311325
// JIT Data
312326
[PreserveSig]
@@ -344,7 +358,7 @@ internal unsafe partial interface ISOSDacInterface
344358
[PreserveSig]
345359
int GetMethodTableFieldData(ClrDataAddress mt, DacpMethodTableFieldData* data);
346360
[PreserveSig]
347-
int GetMethodTableTransparencyData(ClrDataAddress mt, /*struct DacpMethodTableTransparencyData*/ void* data);
361+
int GetMethodTableTransparencyData(ClrDataAddress mt, DacpMethodTableTransparencyData* data);
348362

349363
// EEClass
350364
[PreserveSig]

src/native/managed/cdac/mscordaccore_universal/Legacy/SOSDacImpl.cs

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,8 +1308,28 @@ int ISOSDacInterface.GetMethodDescPtrFromIP(ClrDataAddress ip, ClrDataAddress* p
13081308
return hr;
13091309
}
13101310

1311-
int ISOSDacInterface.GetMethodDescTransparencyData(ClrDataAddress methodDesc, void* data)
1312-
=> _legacyImpl is not null ? _legacyImpl.GetMethodDescTransparencyData(methodDesc, data) : HResults.E_NOTIMPL;
1311+
int ISOSDacInterface.GetMethodDescTransparencyData(ClrDataAddress methodDesc, DacpMethodDescTransparencyData* data)
1312+
{
1313+
int hr = HResults.S_OK;
1314+
try
1315+
{
1316+
if (methodDesc == 0 || data is null)
1317+
throw new ArgumentException();
1318+
1319+
// Called for validation
1320+
_target.Contracts.RuntimeTypeSystem.GetMethodDescHandle(methodDesc.ToTargetPointer(_target));
1321+
1322+
// Zero memory
1323+
*data = default;
1324+
}
1325+
catch (System.Exception ex)
1326+
{
1327+
hr = ex.HResult;
1328+
}
1329+
1330+
return hr;
1331+
}
1332+
13131333
int ISOSDacInterface.GetMethodTableData(ClrDataAddress mt, DacpMethodTableData* data)
13141334
{
13151335
if (mt == 0 || data == null)
@@ -1522,8 +1542,29 @@ int ISOSDacInterface.GetMethodTableName(ClrDataAddress mt, uint count, char* mtN
15221542

15231543
int ISOSDacInterface.GetMethodTableSlot(ClrDataAddress mt, uint slot, ClrDataAddress* value)
15241544
=> _legacyImpl is not null ? _legacyImpl.GetMethodTableSlot(mt, slot, value) : HResults.E_NOTIMPL;
1525-
int ISOSDacInterface.GetMethodTableTransparencyData(ClrDataAddress mt, void* data)
1526-
=> _legacyImpl is not null ? _legacyImpl.GetMethodTableTransparencyData(mt, data) : HResults.E_NOTIMPL;
1545+
1546+
int ISOSDacInterface.GetMethodTableTransparencyData(ClrDataAddress mt, DacpMethodTableTransparencyData* data)
1547+
{
1548+
int hr = HResults.S_OK;
1549+
try
1550+
{
1551+
if (mt == 0 || data is null)
1552+
throw new ArgumentException();
1553+
1554+
// Called for validation
1555+
_target.Contracts.RuntimeTypeSystem.GetTypeHandle(mt.ToTargetPointer(_target));
1556+
1557+
// Zero memory
1558+
*data = default;
1559+
}
1560+
catch (System.Exception ex)
1561+
{
1562+
hr = ex.HResult;
1563+
}
1564+
1565+
return hr;
1566+
}
1567+
15271568
int ISOSDacInterface.GetModule(ClrDataAddress addr, out IXCLRDataModule? mod)
15281569
{
15291570
mod = default;

0 commit comments

Comments
 (0)