mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-09-28 17:11:11 -09:00
Merge remote-tracking branch 'origin/GP-4187_dev747368_fix_golang_slice_packing'
This commit is contained in:
@@ -52,9 +52,17 @@ public class GoSliceType extends GoType {
|
||||
|
||||
@Override
|
||||
public DataType recoverDataType() throws IOException {
|
||||
Structure genericSliceDT = programContext.getGenericSliceDT();
|
||||
|
||||
StructureDataType sliceDT =
|
||||
new StructureDataType(programContext.getRecoveredTypesCp(getPackagePathString()),
|
||||
getUniqueTypename(), 0, programContext.getDTM());
|
||||
getUniqueTypename(), genericSliceDT.getLength(), programContext.getDTM());
|
||||
|
||||
// ensure the sliceDT is filled out before getting the element's data type to ensure
|
||||
// any other data types pulled in that ref this slice don't change size when trying to
|
||||
// enable packing
|
||||
sliceDT.replaceWith(genericSliceDT);
|
||||
|
||||
programContext.cacheRecoveredDataType(this, sliceDT);
|
||||
|
||||
// fixup the generic void* field with the specific element* type
|
||||
@@ -62,9 +70,6 @@ public class GoSliceType extends GoType {
|
||||
DataType elementDT = programContext.getRecoveredType(elementType);
|
||||
Pointer elementPtrDT = programContext.getDTM().getPointer(elementDT);
|
||||
|
||||
Structure genericSliceDT = programContext.getGenericSliceDT();
|
||||
sliceDT.replaceWith(genericSliceDT);
|
||||
|
||||
int arrayPtrComponentIndex = 0; /* HACK, field ordinal of void* data field in slice type */
|
||||
DataTypeComponent arrayDTC = genericSliceDT.getComponent(arrayPtrComponentIndex);
|
||||
sliceDT.replace(arrayPtrComponentIndex, elementPtrDT, -1, arrayDTC.getFieldName(),
|
||||
|
||||
Reference in New Issue
Block a user