diff --git a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java index f5436d210d..f731f37cc0 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/compositeeditor/StructureEditorModel.java @@ -1216,11 +1216,13 @@ class StructureEditorModel extends CompEditorModel { final StructureDataType structureDataType = new StructureDataType(originalCategoryPath, uniqueName, length, originalDTM); -// if (isPackingEnabled()) { -// structureDataType.setPackingValue(getPackingValue()); -// } + // adopt pack setting from current structure + structureDataType.setPackingEnabled(isPackingEnabled()); + if (getPackingType() == PackingType.EXPLICIT) { + structureDataType.setExplicitPackingValue(getExplicitPackingValue()); + } -// Get data type components to make into structure. + // Get data type components to make into structure. DataTypeComponent firstDtc = null; DataTypeComponent lastDtc = null; for (int rowIndex = minRow; rowIndex < maxRow; rowIndex++) { diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureFactory.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureFactory.java index 7d3355ffd0..8769663e0b 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureFactory.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StructureFactory.java @@ -238,9 +238,19 @@ public class StructureFactory { throw new IllegalArgumentException("No data type components found"); } - for (int i = 0; i < dataComps.length; i++) { - structure.add(dataComps[i].getDataType(), dataComps[i].getLength(), - dataComps[i].getFieldName(), dataComps[i].getComment()); + // adopt pack settings from parent - things could move as a result + DataType parent = dataComps[0].getParent(); + if (parent instanceof Composite) { + Composite c = (Composite) parent; + structure.setPackingEnabled(c.isPackingEnabled()); + if (c.getPackingType() == PackingType.EXPLICIT) { + structure.setExplicitPackingValue(c.getExplicitPackingValue()); + } + } + + for (DataTypeComponent dataComp : dataComps) { + structure.add(dataComp.getDataType(), dataComp.getLength(), + dataComp.getFieldName(), dataComp.getComment()); } } }