GP-3088 Marshal pointer wordsize as unsigned

This commit is contained in:
caheckman 2023-02-07 18:14:50 -05:00
parent d9fb11af79
commit f9bc45cdf0
3 changed files with 18 additions and 16 deletions

View file

@ -820,7 +820,7 @@ void TypePointer::encode(Encoder &encoder) const
encoder.openElement(ELEM_TYPE); encoder.openElement(ELEM_TYPE);
encodeBasic(metatype,encoder); encodeBasic(metatype,encoder);
if (wordsize != 1) if (wordsize != 1)
encoder.writeSignedInteger(ATTRIB_WORDSIZE, wordsize); encoder.writeUnsignedInteger(ATTRIB_WORDSIZE, wordsize);
if (spaceid != (AddrSpace *)0) if (spaceid != (AddrSpace *)0)
encoder.writeSpace(ATTRIB_SPACE, spaceid); encoder.writeSpace(ATTRIB_SPACE, spaceid);
ptrto->encodeRef(encoder); ptrto->encodeRef(encoder);
@ -2129,7 +2129,7 @@ void TypePointerRel::encode(Encoder &encoder) const
encoder.openElement(ELEM_TYPE); encoder.openElement(ELEM_TYPE);
encodeBasic(TYPE_PTRREL,encoder); // Override the metatype for XML encodeBasic(TYPE_PTRREL,encoder); // Override the metatype for XML
if (wordsize != 1) if (wordsize != 1)
encoder.writeSignedInteger(ATTRIB_WORDSIZE, wordsize); encoder.writeUnsignedInteger(ATTRIB_WORDSIZE, wordsize);
ptrto->encode(encoder); ptrto->encode(encoder);
parent->encodeRef(encoder); parent->encodeRef(encoder);
encoder.openElement(ELEM_OFF); encoder.openElement(ELEM_OFF);

View file

@ -809,8 +809,8 @@ public class SleighLanguage implements Language {
boolean isEntry = SpecXmlUtils.decodeBoolean(symbol.getAttribute("entry")); boolean isEntry = SpecXmlUtils.decodeBoolean(symbol.getAttribute("entry"));
Address startAddress = addressFactory.getAddress(addressString); Address startAddress = addressFactory.getAddress(addressString);
int rangeSize = SpecXmlUtils.decodeInt(symbol.getAttribute("size")); int rangeSize = SpecXmlUtils.decodeInt(symbol.getAttribute("size"));
Boolean isVolatile = SpecXmlUtils.decodeNullableBoolean( Boolean isVolatile =
symbol.getAttribute("volatile")); SpecXmlUtils.decodeNullableBoolean(symbol.getAttribute("volatile"));
if (startAddress == null) { if (startAddress == null) {
Msg.error(this, "invalid symbol address \"" + addressString + "\": " + Msg.error(this, "invalid symbol address \"" + addressString + "\": " +
description.getSpecFile()); description.getSpecFile());
@ -819,9 +819,11 @@ public class SleighLanguage implements Language {
AddressLabelInfo info; AddressLabelInfo info;
try { try {
info = new AddressLabelInfo(startAddress, rangeSize, labelName, false, info = new AddressLabelInfo(startAddress, rangeSize, labelName, false,
isEntry, type, isVolatile); isEntry, type, isVolatile);
} catch (AddressOverflowException e) { }
throw new XmlParseException("invalid symbol definition: " + labelName, e); catch (AddressOverflowException e) {
throw new XmlParseException("invalid symbol definition: " + labelName,
e);
} }
defaultSymbols.add(info); defaultSymbols.add(info);
if (isVolatile != null) { if (isVolatile != null) {
@ -831,7 +833,8 @@ public class SleighLanguage implements Language {
volatileSymbolAddresses = new AddressSet(); volatileSymbolAddresses = new AddressSet();
} }
volatileSymbolAddresses.addRange(startAddress, endAddress); volatileSymbolAddresses.addRange(startAddress, endAddress);
} else { }
else {
if (nonVolatileSymbolAddresses == null) { if (nonVolatileSymbolAddresses == null) {
nonVolatileSymbolAddresses = new AddressSet(); nonVolatileSymbolAddresses = new AddressSet();
} }
@ -896,7 +899,8 @@ public class SleighLanguage implements Language {
read(parser); read(parser);
} }
catch (XmlParseException e) { catch (XmlParseException e) {
Msg.error(this, "Failed to parse Sleigh Specification ("+ specFile.getName() + "): " + e.getMessage()); Msg.error(this, "Failed to parse Sleigh Specification (" + specFile.getName() + "): " +
e.getMessage());
} }
finally { finally {
parser.dispose(); parser.dispose();
@ -1454,8 +1458,7 @@ public class SleighLanguage implements Language {
encoder.writeBool(ATTRIB_BIGENDIAN, isBigEndian()); encoder.writeBool(ATTRIB_BIGENDIAN, isBigEndian());
encoder.writeUnsignedInteger(ATTRIB_UNIQBASE, uniqueOffset); encoder.writeUnsignedInteger(ATTRIB_UNIQBASE, uniqueOffset);
encoder.openElement(ELEM_SPACES); encoder.openElement(ELEM_SPACES);
encoder.writeString(ATTRIB_DEFAULTSPACE, encoder.writeString(ATTRIB_DEFAULTSPACE, factory.getDefaultAddressSpace().getName());
factory.getDefaultAddressSpace().getName());
ElementId tag; ElementId tag;
int delay; int delay;
@ -1511,8 +1514,7 @@ public class SleighLanguage implements Language {
encoder.writeSignedInteger(ATTRIB_SIZE, bytesize); encoder.writeSignedInteger(ATTRIB_SIZE, bytesize);
if (element.getAddressableUnitSize() > 1) { if (element.getAddressableUnitSize() > 1) {
encoder.writeSignedInteger(ATTRIB_WORDSIZE, encoder.writeUnsignedInteger(ATTRIB_WORDSIZE, element.getAddressableUnitSize());
element.getAddressableUnitSize());
} }
encoder.writeBool(ATTRIB_BIGENDIAN, isBigEndian()); encoder.writeBool(ATTRIB_BIGENDIAN, isBigEndian());

View file

@ -333,7 +333,7 @@ public class PcodeDataTypeManager {
} }
encoder.writeSignedInteger(ATTRIB_SIZE, ptrLen); encoder.writeSignedInteger(ATTRIB_SIZE, ptrLen);
if (pointerWordSize != 1) { if (pointerWordSize != 1) {
encoder.writeSignedInteger(ATTRIB_WORDSIZE, pointerWordSize); encoder.writeUnsignedInteger(ATTRIB_WORDSIZE, pointerWordSize);
} }
if (spc != null) { if (spc != null) {
encoder.writeSpace(ATTRIB_SPACE, spc); encoder.writeSpace(ATTRIB_SPACE, spc);
@ -398,7 +398,7 @@ public class PcodeDataTypeManager {
encodeNameIdAttributes(encoder, type); encodeNameIdAttributes(encoder, type);
encoder.writeSignedInteger(ATTRIB_SIZE, pointer.getLength()); encoder.writeSignedInteger(ATTRIB_SIZE, pointer.getLength());
if (pointerWordSize != 1) { if (pointerWordSize != 1) {
encoder.writeSignedInteger(ATTRIB_WORDSIZE, pointerWordSize); encoder.writeUnsignedInteger(ATTRIB_WORDSIZE, pointerWordSize);
} }
if (space != null) { if (space != null) {
encoder.writeSpace(ATTRIB_SPACE, space); encoder.writeSpace(ATTRIB_SPACE, space);