From 79875e0014327b8d6b52a70dbcbe3ed53dbabc95 Mon Sep 17 00:00:00 2001 From: dev747368 <48332326+dev747368@users.noreply.github.com> Date: Fri, 16 Dec 2022 16:59:47 +0000 Subject: [PATCH] GP-2931 remove UnsignedDataUtils --- .../program/util/SymbolicPropogator.java | 10 +- .../ghidra/util/UnsignedDataUtilsTest.java | 275 ----------------- .../DB/src/main/java/db/FixedField10.java | 23 +- .../java/generic/util/UnsignedDataUtils.java | 281 ------------------ .../pcodeCPort/slghsymbol/VarnodeSymbol.java | 8 +- 5 files changed, 18 insertions(+), 579 deletions(-) delete mode 100644 Ghidra/Features/Base/src/test.slow/java/ghidra/util/UnsignedDataUtilsTest.java delete mode 100644 Ghidra/Framework/Generic/src/main/java/generic/util/UnsignedDataUtils.java diff --git a/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java b/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java index 6c892ef9fb..bee638d260 100644 --- a/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java +++ b/Ghidra/Features/Base/src/main/java/ghidra/program/util/SymbolicPropogator.java @@ -15,12 +15,12 @@ */ package ghidra.program.util; -import java.math.BigInteger; import java.util.*; +import java.math.BigInteger; + import org.apache.commons.collections4.map.LRUMap; -import generic.util.UnsignedDataUtils; import ghidra.app.cmd.disassemble.DisassembleCommand; import ghidra.app.cmd.function.CallDepthChangeInfo; import ghidra.pcode.opbehavior.*; @@ -1319,7 +1319,7 @@ public class SymbolicPropogator { val2 = vContext.getValue(in[1], false, evaluator); lval1 = vContext.getConstant(val1, evaluator); lval2 = vContext.getConstant(val2, evaluator); - lresult = UnsignedDataUtils.unsignedLessThan(lval1, lval2) ? 1 : 0; + lresult = Long.compareUnsigned(lval1, lval2) < 0 ? 1 : 0; result = vContext.createConstantVarnode(lresult, val1.getSize()); vContext.putValue(out, result, mustClearAll); break; @@ -1340,7 +1340,7 @@ public class SymbolicPropogator { val2 = vContext.getValue(in[1], false, evaluator); lval1 = vContext.getConstant(val1, evaluator); lval2 = vContext.getConstant(val2, evaluator); - lresult = UnsignedDataUtils.unsignedLessThanOrEqual(lval1, lval2) ? 1 : 0; + lresult = Long.compareUnsigned(lval1, lval2) <= 0 ? 1 : 0; result = vContext.createConstantVarnode(lresult, val1.getSize()); vContext.putValue(out, result, mustClearAll); break; @@ -1693,7 +1693,7 @@ public class SymbolicPropogator { } private InjectPayload findPcodeInjection(Program prog, PcodeInjectLibrary snippetLibrary, long callOtherIndex) { - InjectPayload payload = (InjectPayload) injectPayloadCache.get(callOtherIndex); + InjectPayload payload = injectPayloadCache.get(callOtherIndex); // has a payload value for the pcode callother index if (payload != null) { diff --git a/Ghidra/Features/Base/src/test.slow/java/ghidra/util/UnsignedDataUtilsTest.java b/Ghidra/Features/Base/src/test.slow/java/ghidra/util/UnsignedDataUtilsTest.java deleted file mode 100644 index 3eeb9b3789..0000000000 --- a/Ghidra/Features/Base/src/test.slow/java/ghidra/util/UnsignedDataUtilsTest.java +++ /dev/null @@ -1,275 +0,0 @@ -/* ### - * IP: GHIDRA - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package ghidra.util; - -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -import generic.util.UnsignedDataUtils; -import ghidra.test.AbstractGhidraHeadedIntegrationTest; - -public class UnsignedDataUtilsTest extends AbstractGhidraHeadedIntegrationTest { - - @Test - public void testByteGreaterThan() { - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 0, (byte) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 1, (byte) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((byte) 0xff, (byte) 0xee)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 1, (byte) 0xbb)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((byte) 0xbb, (byte) 1)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 0, (byte) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((byte) 2, (byte) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 0, (byte) 0xaa)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((byte) 0xaa, (byte) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 25, (byte) 25)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((byte) 0xee, (byte) 0xee)); - } - - @Test - public void testByteGreaterThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0, (byte) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 1, (byte) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0xff, (byte) 0xee)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 1, (byte) 0xbb)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0xbb, (byte) 1)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0, (byte) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 2, (byte) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0, (byte) 0xaa)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0xaa, (byte) 0)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 25, (byte) 25)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((byte) 0xee, (byte) 0xee)); - } - - @Test - public void testByteLessThan() { - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 0, (byte) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThan((byte) 1, (byte) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 0xff, (byte) 0xee)); - assertTrue(UnsignedDataUtils.unsignedLessThan((byte) 1, (byte) 0xbb)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 0xbb, (byte) 1)); - assertTrue(UnsignedDataUtils.unsignedLessThan((byte) 0, (byte) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 2, (byte) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThan((byte) 0, (byte) 0xaa)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 0xaa, (byte) 0)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 25, (byte) 25)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((byte) 0xee, (byte) 0xee)); - } - - @Test - public void testByteLessThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0, (byte) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 1, (byte) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0xff, (byte) 0xee)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 1, (byte) 0xbb)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0xbb, (byte) 1)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0, (byte) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((byte) 2, (byte) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0, (byte) 0xaa)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0xaa, (byte) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 25, (byte) 25)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((byte) 0xee, (byte) 0xee)); - } - - @Test - public void testShortGreaterThan() { - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 0, (short) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 1, (short) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((short) 0xffff, (short) 0xeeee)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 1, (short) 0xbbbb)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((short) 0xbbbb, (short) 1)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 0, (short) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((short) 2, (short) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 0, (short) 0xaaaa)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan((short) 0xaaaa, (short) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 25, (short) 25)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan((short) 0xeeee, (short) 0xeeee)); - } - - @Test - public void testShortGreaterThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0, (short) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 1, (short) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0xffff, (short) 0xeeee)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 1, (short) 0xbbbb)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0xbbbb, (short) 1)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0, (short) 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 2, (short) 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0, (short) 0xaaaa)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0xaaaa, (short) 0)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 25, (short) 25)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual((short) 0xeeee, (short) 0xeeee)); - } - - @Test - public void testShortLessThan() { - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 0, (short) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThan((short) 1, (short) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 0xffff, (short) 0xeeee)); - assertTrue(UnsignedDataUtils.unsignedLessThan((short) 1, (short) 0xbbbb)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 0xbbbb, (short) 1)); - assertTrue(UnsignedDataUtils.unsignedLessThan((short) 0, (short) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 2, (short) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThan((short) 0, (short) 0xaaaa)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 0xaaaa, (short) 0)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 25, (short) 25)); - assertTrue(!UnsignedDataUtils.unsignedLessThan((short) 0xeeee, (short) 0xeeee)); - } - - @Test - public void testShortLessThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 0, (short) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 1, (short) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((short) 0xffff, (short) 0xeeee)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 1, (short) 0xbbbb)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((short) 0xbbbb, (short) 1)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 0, (short) 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((short) 2, (short) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 0, (short) 0xaaaa)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual((short) 0xaaaa, (short) 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 25, (short) 25)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual((short) 0xeeee, (short) 0xeeee)); - } - - /*********************************/ - - @Test - public void testIntGreaterThan() { - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0, 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(1, 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(0xffffffff, 0xeeeeeeee)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(1, 0xbbbbbbbb)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(0xbbbbbbbb, 1)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0, 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(2, 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0, 0xaaaaaaaa)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(0xaaaaaaaa, 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(25, 25)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0xeeeeeeee, 0xeeeeeeee)); - } - - @Test - public void testIntGreaterThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0, 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(1, 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0xffffffff, 0xeeeeeeee)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(1, 0xbbbbbbbb)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0xbbbbbbbb, 1)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(0, 2)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(2, 0)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(0, 0xaaaaaaaa)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0xaaaaaaaa, 0)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(25, 25)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0xeeeeeeee, 0xeeeeeeee)); - } - - @Test - public void testIntLessThan() { - assertTrue(!UnsignedDataUtils.unsignedLessThan(0, 0)); - assertTrue(UnsignedDataUtils.unsignedLessThan(1, 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xffffffff, 0xeeeeeeee)); - assertTrue(UnsignedDataUtils.unsignedLessThan(1, 0xbbbbbbbb)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xbbbbbbbb, 1)); - assertTrue(UnsignedDataUtils.unsignedLessThan(0, 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(2, 0)); - assertTrue(UnsignedDataUtils.unsignedLessThan(0, 0xaaaaaaaa)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xaaaaaaaa, 0)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(25, 25)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xeeeeeeee, 0xeeeeeeee)); - } - - @Test - public void testIntLessThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0, 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(1, 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(0xffffffff, 0xeeeeeeee)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(1, 0xbbbbbbbb)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(0xbbbbbbbb, 1)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0, 2)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(2, 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0, 0xaaaaaaaa)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(0xaaaaaaaa, 0)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(25, 25)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0xeeeeeeee, 0xeeeeeeee)); - } - - /*********************************/ - - @Test - public void testLongGreaterThan() { - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0L, 0L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(1L, 2L)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(0xffffffffffffffffL, 0xeeeeeeeeeeeeeeeeL)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(1L, 0xbbbbbbbbbbbbbbbbL)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(0xbbbbbbbbbbbbbbbbL, 1L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0L, 2L)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(2L, 0L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(0L, 0xaaaaaaaaaaaaaaaaL)); - assertTrue(UnsignedDataUtils.unsignedGreaterThan(0xaaaaaaaaaaaaaaaaL, 0L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThan(25L, 25L)); - assertTrue( - !UnsignedDataUtils.unsignedGreaterThan(0xeeeeeeeeeeeeeeeeL, 0xeeeeeeeeeeeeeeeeL)); - } - - @Test - public void testLongGreaterThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0L, 0L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(1L, 2L)); - assertTrue( - UnsignedDataUtils.unsignedGreaterThanOrEqual(0xffffffffffffffffL, 0xeeeeeeeeeeeeeeeeL)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(1L, 0xbbbbbbbbbbbbbbbbL)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0xbbbbbbbbbbbbbbbbL, 1L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(0L, 2L)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(2L, 0L)); - assertTrue(!UnsignedDataUtils.unsignedGreaterThanOrEqual(0L, 0xaaaaaaaaaaaaaaaaL)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(0xaaaaaaaaaaaaaaaaL, 0L)); - assertTrue(UnsignedDataUtils.unsignedGreaterThanOrEqual(25L, 25L)); - assertTrue( - UnsignedDataUtils.unsignedGreaterThanOrEqual(0xeeeeeeeeeeeeeeeeL, 0xeeeeeeeeeeeeeeeeL)); - } - - @Test - public void testLongLessThan() { - assertTrue(!UnsignedDataUtils.unsignedLessThan(0L, 0L)); - assertTrue(UnsignedDataUtils.unsignedLessThan(1L, 2L)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xffffffffffffffffL, 0xeeeeeeeeeeeeeeeeL)); - assertTrue(UnsignedDataUtils.unsignedLessThan(1L, 0xbbbbbbbbbbbbbbbbL)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xbbbbbbbbbbbbbbbbL, 1L)); - assertTrue(UnsignedDataUtils.unsignedLessThan(0L, 2L)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(2L, 0L)); - assertTrue(UnsignedDataUtils.unsignedLessThan(0L, 0xaaaaaaaaaaaaaaaaL)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xaaaaaaaaaaaaaaaaL, 0L)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(25L, 25L)); - assertTrue(!UnsignedDataUtils.unsignedLessThan(0xeeeeeeeeeeeeeeeeL, 0xeeeeeeeeeeeeeeeeL)); - } - - @Test - public void testLongLessThanOrEqual() { - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0L, 0L)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(1L, 2L)); - assertTrue( - !UnsignedDataUtils.unsignedLessThanOrEqual(0xffffffffffffffffL, 0xeeeeeeeeeeeeeeeeL)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(1L, 0xbbbbbbbbbbbbbbbbL)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(0xbbbbbbbbbbbbbbbbL, 1L)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0L, 2L)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(2L, 0L)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(0L, 0xaaaaaaaaaaaaaaaaL)); - assertTrue(!UnsignedDataUtils.unsignedLessThanOrEqual(0xaaaaaaaaaaaaaaaaL, 0L)); - assertTrue(UnsignedDataUtils.unsignedLessThanOrEqual(25L, 25L)); - assertTrue( - UnsignedDataUtils.unsignedLessThanOrEqual(0xeeeeeeeeeeeeeeeeL, 0xeeeeeeeeeeeeeeeeL)); - } -} diff --git a/Ghidra/Framework/DB/src/main/java/db/FixedField10.java b/Ghidra/Framework/DB/src/main/java/db/FixedField10.java index bdabe719e9..df11afccc3 100644 --- a/Ghidra/Framework/DB/src/main/java/db/FixedField10.java +++ b/Ghidra/Framework/DB/src/main/java/db/FixedField10.java @@ -18,7 +18,6 @@ package db; import java.io.IOException; import db.buffers.DataBuffer; -import generic.util.UnsignedDataUtils; import ghidra.util.BigEndianDataConverter; /** @@ -102,26 +101,22 @@ public class FixedField10 extends FixedField { throw new UnsupportedOperationException("may only compare similar Field types"); } FixedField10 f = (FixedField10) o; - if (hi8 != f.hi8) { - return UnsignedDataUtils.unsignedLessThan(hi8, f.hi8) ? -1 : 1; + int result = Long.compareUnsigned(hi8, f.hi8); + if (result == 0) { + result = Short.compareUnsigned(lo2, f.lo2); } - if (lo2 != f.lo2) { - return UnsignedDataUtils.unsignedLessThan(lo2, f.lo2) ? -1 : 1; - } - return 0; + return result; } @Override int compareTo(DataBuffer buffer, int offset) { long otherHi8 = buffer.getLong(offset); - if (hi8 != otherHi8) { - return UnsignedDataUtils.unsignedLessThan(hi8, otherHi8) ? -1 : 1; + int result = Long.compareUnsigned(hi8, otherHi8); + if (result == 0) { + short otherLo2 = buffer.getShort(offset + 8); + result = Short.compareUnsigned(lo2, otherLo2); } - short otherLo2 = buffer.getShort(offset + 8); - if (lo2 != otherLo2) { - return UnsignedDataUtils.unsignedLessThan(lo2, otherLo2) ? -1 : 1; - } - return 0; + return result; } @Override diff --git a/Ghidra/Framework/Generic/src/main/java/generic/util/UnsignedDataUtils.java b/Ghidra/Framework/Generic/src/main/java/generic/util/UnsignedDataUtils.java deleted file mode 100644 index 2cb7795bbb..0000000000 --- a/Ghidra/Framework/Generic/src/main/java/generic/util/UnsignedDataUtils.java +++ /dev/null @@ -1,281 +0,0 @@ -/* ### - * IP: GHIDRA - * REVIEWED: YES - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package generic.util; - -import ghidra.util.Conv; - -/** - * A class for performing unsigned comparisons - * of java primitives. - * - * - */ -public class UnsignedDataUtils { - - private UnsignedDataUtils() { - } - - /** - * Simple test for the Comp class. - * @param args not used - */ - public static void main(String [] args) { - System.out.println((byte)5<(byte)250); - System.out.println(unsignedLessThan((byte)5,(byte)250)); - System.out.println(0x5<0x87654321); - System.out.println(unsignedLessThan(0x5,0x87654321)); - } - - private final static int LESS_THAN = 0; - private final static int LESS_THAN_OR_EQUAL = 1; - private final static int GREATER_THAN = 2; - private final static int GREATER_THAN_OR_EQUAL = 3; - - private static boolean comp(int type, byte i, byte j) { - return comp(type, - Conv.byteToLong(i), - Conv.byteToLong(j)); - } - private static boolean comp(int type, short i, short j) { - return comp(type, - Conv.shortToLong(i), - Conv.shortToLong(j)); - } - private static boolean comp(int type, int i, int j) { - return comp(type, - Conv.intToLong(i), - Conv.intToLong(j)); - } - private static boolean comp(int type, long i, long j) { - boolean isHiBitSetI = i < 0; - boolean isHiBitSetJ = j < 0; - - if (isHiBitSetI == isHiBitSetJ) {//same sign... - switch (type) { - case LESS_THAN: - return (i < j); - case LESS_THAN_OR_EQUAL: - return (i <= j); - case GREATER_THAN: - return (i > j); - case GREATER_THAN_OR_EQUAL: - return (i >= j); - } - } - else if (isHiBitSetI) { - switch (type) { - case LESS_THAN: - case LESS_THAN_OR_EQUAL: - return false; - case GREATER_THAN: - case GREATER_THAN_OR_EQUAL: - return true; - } - } - else { - switch (type) { - case LESS_THAN: - case LESS_THAN_OR_EQUAL: - return true; - case GREATER_THAN: - case GREATER_THAN_OR_EQUAL: - return false; - } - } - throw new RuntimeException("BAD COMP TYPE!"); - } - - /** - * Returns true if i is LESS THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than j - */ - public static boolean unsignedLessThan(byte i, byte j) { - return comp(LESS_THAN, i, j); - } - /** - * Returns true if i is LESS THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than or equal to j - */ - public static boolean unsignedLessThanOrEqual(byte i, byte j) { - return comp(LESS_THAN_OR_EQUAL, i, j); - } - /** - * Returns true if i is GREATER THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is greater than j - */ - public static boolean unsignedGreaterThan(byte i, byte j) { - return comp(GREATER_THAN, i, j); - } - /** - * Returns true if i is GREATER THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is greater than or equal to j - */ - public static boolean unsignedGreaterThanOrEqual(byte i, byte j) { - return comp(GREATER_THAN_OR_EQUAL, i, j); - } - - /** - * Returns true if i is LESS THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than j - */ - public static boolean unsignedLessThan(short i, short j) { - return comp(LESS_THAN, i, j); - } - /** - * Returns true if i is LESS THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than or equal to j - */ - public static boolean unsignedLessThanOrEqual(short i, short j) { - return comp(LESS_THAN_OR_EQUAL, i, j); - } - /** - * Returns true if i is GREATER THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is greater than j - */ - public static boolean unsignedGreaterThan(short i, short j) { - return comp(GREATER_THAN, i, j); - } - /** - * Returns true if i is GREATER THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is greater than or equal to j - */ - public static boolean unsignedGreaterThanOrEqual(short i, short j) { - return comp(GREATER_THAN_OR_EQUAL, i, j); - } - - /** - * Returns true if i is LESS THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than j - */ - public static boolean unsignedLessThan(int i, int j) { - return comp(LESS_THAN, i, j); - } - /** - * Returns true if i is LESS THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than or equal to j - */ - public static boolean unsignedLessThanOrEqual(int i, int j) { - return comp(LESS_THAN_OR_EQUAL, i, j); - } - /** - * Returns true if i is GREATER THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is greater than j - */ - public static boolean unsignedGreaterThan(int i, int j) { - return comp(GREATER_THAN, i, j); - } - /** - * Returns true if i is GREATER THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is greater than or equal to j - */ - public static boolean unsignedGreaterThanOrEqual(int i, int j) { - return comp(GREATER_THAN_OR_EQUAL, i, j); - } - - /** - * Returns true if i is LESS THAN j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than j - */ - public static boolean unsignedLessThan(long i, long j) { - return comp(LESS_THAN, i, j); - } - /** - * Returns true if i is LESS THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return true if i is less than or equal to j - */ - public static boolean unsignedLessThanOrEqual(long i, long j) { - return comp(LESS_THAN_OR_EQUAL, i, j); - } - /** - * Returns true if i is GREATER THAN j. - * - * @param i an argument - * @param j another argument - * - * @return return true if i is greater than j - */ - public static boolean unsignedGreaterThan(long i, long j) { - return comp(GREATER_THAN, i, j); - } - /** - * Returns true if i is GREATER THAN or EQUAL TO j. - * - * @param i an argument - * @param j another argument - * - * @return return true if i is greater than or equal to j - */ - public static boolean unsignedGreaterThanOrEqual(long i, long j) { - return comp(GREATER_THAN_OR_EQUAL, i, j); - } -} diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeSymbol.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeSymbol.java index 3e6676d51a..39fc7df72c 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeSymbol.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/pcodeCPort/slghsymbol/VarnodeSymbol.java @@ -15,12 +15,12 @@ */ package ghidra.pcodeCPort.slghsymbol; -import java.io.PrintStream; import java.util.ArrayList; +import java.io.PrintStream; + import org.jdom.Element; -import generic.util.UnsignedDataUtils; // A global varnode import ghidra.pcodeCPort.context.SleighError; import ghidra.pcodeCPort.pcoderaw.VarnodeData; @@ -71,9 +71,9 @@ public class VarnodeSymbol extends PatternlessSymbol { int addrSize = base.getAddrSize(); long maxByteOffset = ((long) base.getWordSize() << (8 * addrSize)) - 1; long endOffset = offset + size - 1; - boolean sizeError = size != 0 && UnsignedDataUtils.unsignedGreaterThan(offset, endOffset); + boolean sizeError = size != 0 && Long.compareUnsigned(offset, endOffset) > 0; if (!sizeError && addrSize < 8) { - sizeError = UnsignedDataUtils.unsignedGreaterThan(endOffset, maxByteOffset); + sizeError = Long.compareUnsigned(endOffset, maxByteOffset) > 0; } if (sizeError) { throw new SleighError(nm + ":" + size + " @ " + base.getName() + ":" +