mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
GP-3449 - Fix Win32 8-byte type alignment and update test utils
This commit is contained in:
parent
3cbd416d6d
commit
9cb6a7a12e
4 changed files with 63 additions and 29 deletions
|
@ -105,7 +105,8 @@ public class DataTypePreviewPluginTest extends AbstractGhidraHeadedIntegrationTe
|
||||||
|
|
||||||
int id = program.startTransaction("add");
|
int id = program.startTransaction("add");
|
||||||
try {
|
try {
|
||||||
struct = (Structure) program.getDataTypeManager().addDataType(struct,
|
struct = (Structure) program.getDataTypeManager()
|
||||||
|
.addDataType(struct,
|
||||||
DataTypeConflictHandler.REPLACE_HANDLER);
|
DataTypeConflictHandler.REPLACE_HANDLER);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
@ -206,8 +207,8 @@ public class DataTypePreviewPluginTest extends AbstractGhidraHeadedIntegrationTe
|
||||||
assertEquals("54h", model.getValueAt(2, DTPPTableModel.PREVIEW_COL));// 2-byte short
|
assertEquals("54h", model.getValueAt(2, DTPPTableModel.PREVIEW_COL));// 2-byte short
|
||||||
|
|
||||||
assertEquals("680054h", model.getValueAt(3, DTPPTableModel.PREVIEW_COL));// 4-byte int at offset 0
|
assertEquals("680054h", model.getValueAt(3, DTPPTableModel.PREVIEW_COL));// 4-byte int at offset 0
|
||||||
assertEquals("61004D00200065h", model.getValueAt(4, DTPPTableModel.PREVIEW_COL));// 8-byte long at offset 4
|
assertEquals("6700720061004Dh", model.getValueAt(4, DTPPTableModel.PREVIEW_COL));// 8-byte long at offset 8
|
||||||
assertEquals("72h", model.getValueAt(5, DTPPTableModel.PREVIEW_COL));// 2-byte short at offset 12
|
assertEquals("69h", model.getValueAt(5, DTPPTableModel.PREVIEW_COL));// 2-byte short at offset 16
|
||||||
|
|
||||||
env.close(program);
|
env.close(program);
|
||||||
|
|
||||||
|
|
|
@ -99,7 +99,8 @@ public class DataOrganizationImpl implements DataOrganization {
|
||||||
* Creates a new default DataOrganization. This has a mapping which defines the alignment
|
* Creates a new default DataOrganization. This has a mapping which defines the alignment
|
||||||
* of a data type based on its size. The map defines pairs for data types that are
|
* of a data type based on its size. The map defines pairs for data types that are
|
||||||
* 1, 2, 4, and 8 bytes in length.
|
* 1, 2, 4, and 8 bytes in length.
|
||||||
* @param language optional language used to initialize defaults (pointer size, endianess, etc.) (may be null)
|
* @param language optional language used to initialize defaults (pointer size, endianess, etc.)
|
||||||
|
* (may be null)
|
||||||
* @return a new default DataOrganization.
|
* @return a new default DataOrganization.
|
||||||
*/
|
*/
|
||||||
public static DataOrganizationImpl getDefaultOrganization(Language language) {
|
public static DataOrganizationImpl getDefaultOrganization(Language language) {
|
||||||
|
@ -107,7 +108,7 @@ public class DataOrganizationImpl implements DataOrganization {
|
||||||
dataOrganization.setSizeAlignment(1, 1);
|
dataOrganization.setSizeAlignment(1, 1);
|
||||||
dataOrganization.setSizeAlignment(2, 2);
|
dataOrganization.setSizeAlignment(2, 2);
|
||||||
dataOrganization.setSizeAlignment(4, 4);
|
dataOrganization.setSizeAlignment(4, 4);
|
||||||
dataOrganization.setSizeAlignment(8, 4);
|
dataOrganization.setSizeAlignment(8, 8);
|
||||||
if (language != null) {
|
if (language != null) {
|
||||||
// NOTE: Ensure that saveXml always saves pointer size
|
// NOTE: Ensure that saveXml always saves pointer size
|
||||||
dataOrganization.setPointerSize(language.getDefaultSpace().getPointerSize());
|
dataOrganization.setPointerSize(language.getDefaultSpace().getPointerSize());
|
||||||
|
|
|
@ -57,6 +57,37 @@ public class DataOrganizationTestUtils {
|
||||||
dataOrg.setBitFieldPacking(bitFieldPacking);
|
dataOrg.setBitFieldPacking(bitFieldPacking);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize data organization to reflect x86gcc.cspec specification
|
||||||
|
* @param dataOrg data organization
|
||||||
|
*/
|
||||||
|
public static void initDataOrganizationGcc32BitX86(DataOrganizationImpl dataOrg) {
|
||||||
|
|
||||||
|
dataOrg.setBigEndian(false);
|
||||||
|
|
||||||
|
dataOrg.setAbsoluteMaxAlignment(0);
|
||||||
|
dataOrg.setMachineAlignment(2);
|
||||||
|
dataOrg.setDefaultAlignment(1);
|
||||||
|
dataOrg.setDefaultPointerAlignment(4);
|
||||||
|
dataOrg.setPointerSize(4);
|
||||||
|
dataOrg.setWideCharSize(4);
|
||||||
|
dataOrg.setShortSize(2);
|
||||||
|
dataOrg.setIntegerSize(4);
|
||||||
|
dataOrg.setLongSize(4);
|
||||||
|
dataOrg.setLongLongSize(8);
|
||||||
|
dataOrg.setFloatSize(4);
|
||||||
|
dataOrg.setDoubleSize(8);
|
||||||
|
dataOrg.setLongDoubleSize(16);
|
||||||
|
dataOrg.setSizeAlignment(1, 1);
|
||||||
|
dataOrg.setSizeAlignment(2, 2);
|
||||||
|
dataOrg.setSizeAlignment(4, 4);
|
||||||
|
dataOrg.setSizeAlignment(8, 4);
|
||||||
|
dataOrg.setSizeAlignment(16, 16);
|
||||||
|
|
||||||
|
BitFieldPackingImpl bitFieldPacking = new BitFieldPackingImpl(); // use defaults
|
||||||
|
dataOrg.setBitFieldPacking(bitFieldPacking);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize data organization to reflect x86-64-gcc.cspec specification
|
* Initialize data organization to reflect x86-64-gcc.cspec specification
|
||||||
* @param dataOrg data organization
|
* @param dataOrg data organization
|
||||||
|
@ -82,6 +113,7 @@ public class DataOrganizationTestUtils {
|
||||||
dataOrg.setSizeAlignment(2, 2);
|
dataOrg.setSizeAlignment(2, 2);
|
||||||
dataOrg.setSizeAlignment(4, 4);
|
dataOrg.setSizeAlignment(4, 4);
|
||||||
dataOrg.setSizeAlignment(8, 8);
|
dataOrg.setSizeAlignment(8, 8);
|
||||||
|
dataOrg.setSizeAlignment(16, 16);
|
||||||
|
|
||||||
BitFieldPackingImpl bitFieldPacking = new BitFieldPackingImpl(); // use defaults
|
BitFieldPackingImpl bitFieldPacking = new BitFieldPackingImpl(); // use defaults
|
||||||
dataOrg.setBitFieldPacking(bitFieldPacking);
|
dataOrg.setBitFieldPacking(bitFieldPacking);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
<entry size="1" alignment="1" />
|
<entry size="1" alignment="1" />
|
||||||
<entry size="2" alignment="2" />
|
<entry size="2" alignment="2" />
|
||||||
<entry size="4" alignment="4" />
|
<entry size="4" alignment="4" />
|
||||||
<entry size="8" alignment="4" />
|
<entry size="8" alignment="8" />
|
||||||
</size_alignment_map>
|
</size_alignment_map>
|
||||||
<bitfield_packing>
|
<bitfield_packing>
|
||||||
<use_MS_convention value="true"/>
|
<use_MS_convention value="true"/>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue