diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java index 271fbce6e1..d1a81e3d9f 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/pcode/LocalSymbolMap.java @@ -17,7 +17,8 @@ package ghidra.program.model.pcode; import java.util.*; -import ghidra.program.model.address.*; +import ghidra.program.model.address.Address; +import ghidra.program.model.address.AddressIterator; import ghidra.program.model.data.DataType; import ghidra.program.model.data.Undefined; import ghidra.program.model.listing.*; @@ -102,12 +103,7 @@ public class LocalSymbolMap { boolean lock = (dbFunction.getSignatureSource() != SourceType.DEFAULT); Address pcaddr = dbFunction.getEntryPoint(); - try { - pcaddr = pcaddr.subtract(1); - } - catch (AddressOutOfBoundsException e) { - // Should rarely happen - } + pcaddr = pcaddr.subtractWrap(1); List paramList = new ArrayList(); for (int i = 0; i < p.length; ++i) { diff --git a/Ghidra/Processors/PowerPC/data/languages/ppc_vle.sinc b/Ghidra/Processors/PowerPC/data/languages/ppc_vle.sinc index 587a4e4e61..f3d4a42f78 100644 --- a/Ghidra/Processors/PowerPC/data/languages/ppc_vle.sinc +++ b/Ghidra/Processors/PowerPC/data/languages/ppc_vle.sinc @@ -720,9 +720,8 @@ IMM16B: val is IMM_0_10_VLE & IMM_16_20_VLE [ val = (IMM_16_20_VLE << 11) | :se_bmaski RX_VLE,OIM5_VLE is $(ISVLE) & OP6_VLE=11 & BIT9_VLE=0 & RX_VLE & OIM5_VLE { RX_VLE = ~0; - tmp:1 = OIM5_VLE; - if (tmp == 0) goto inst_next; - RX_VLE = RX_VLE >> ($(REGISTER_SIZE) - tmp); + sa:4 = (8 * $(REGISTER_SIZE) - OIM5_VLE) * zext( OIM5_VLE != 0:1 ); + RX_VLE = RX_VLE >> sa; } :se_bseti RX_VLE,OIM5_VLE is $(ISVLE) & OP6_VLE=25 & BIT9_VLE=0 & RX_VLE & OIM5_VLE {