diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-09 03:15:04 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-09 03:15:04 +0000 |
commit | 7ceee8eeadda4281966b019d9f9150c238fde4bf (patch) | |
tree | 9b32b549a48a4a3ebe2cfe4caa46294eefd20679 | |
parent | ec9d69aebb0e4a420aa02b17f2f8cde08ae59146 (diff) | |
parent | ec19399b82c1a13a8811700c3ba064cc3f0b6a89 (diff) | |
download | apf-aml_per_341614000.tar.gz |
Snap for 11426876 from ec19399b82c1a13a8811700c3ba064cc3f0b6a89 to mainline-permission-releaseaml_per_341614000
Change-Id: I21e9d418c345b59e13189ec871cccde802728853
-rw-r--r-- | apf2java/apf2java.in | 2 | ||||
-rw-r--r-- | apf2java/apf2java.out | 215 | ||||
-rwxr-xr-x | apf2java/apf2java.sh | 1 | ||||
-rw-r--r-- | apf2java/apf2java.txt | 243 | ||||
-rw-r--r-- | disassembler.c | 32 | ||||
-rwxr-xr-x | v5/apf_interpreter_assemble.sh | 2 |
6 files changed, 288 insertions, 207 deletions
diff --git a/apf2java/apf2java.in b/apf2java/apf2java.in index e0b0733..e0fada2 100644 --- a/apf2java/apf2java.in +++ b/apf2java/apf2java.in @@ -1 +1 @@ -6bfcb03a01b8120c6b9494014a06006b907c014388a27c013e88a47c013988b87c013488cd7c012f88e17c012a88e384003f08066a0e6bdca40110000600010800060412147a1c016bd884010400021a1c6b8c7c01010000686bd4a2ef06ffffffffffff6a266bbca2ea04c0a801be6bf872e0120c84008d08000a17821e1112149c00171fffab0d2a108210446a3239a20406ea42226789c06bf472b60a1e52f06bac7ab3e06bb41a1e7e000000a6ffffffff6bb07e0000009bc0a801ff0a178230116a1aa223086b7a1f1fc0a801beaa0d3a08aa221210ab2139821501aa0d3a0ea20a041194ceca3a08a20401ff6b8072666be868a25406ffffffffffff6bb872566bf0724c7c001086dd686bd0a23b06ffffffffffff6bc8723d0a147a32007a0b3a6b980a267a2eff6be072240a366ba87a23858218886a26a2040fff02000000000000000000000000006ba472086be4b03a01b87206b03a01b87201 +6bf8b03a01b8120c6b8894023706006b847c023088a27c022b88a47c022688b87c022188cd7c021c88e17c021788e384004608066a0e6dff68a40202000600010800060412147a1f016dff648401f500021a1c6b807c01ec0000686bc8a401d80006ffffffffffff6a266bb0a401d10004c0a801ec6bec7401c6120c84007808000a17821f1112149c00181fffab0d2a108211446a3239a205067e9046bc70086be874019b0a1e52f06ba07c019600e06ba81a1e7e00000189ffffffff6ba47e0000017ec0a801ff0a1782140612149c000d1fffab0d2a108206076dff6c7401656bdc68a401510006ffffffffffff6bac7401526be47401477c001386dd686bc4a401340006ffffffffffff6bbc7401350a147c012800007a0e3a6b8c0a267c012200ff6bd47401170a366b9c7c011400858218886a26a2040fff02000000000000000000000000006b9872f9aa0e82ec96aa0f8c00e5048e68a2d20f7e9046bc700828c68e23672c86dd606a12a2b91400603afffe800000000000002ac68efffe23672c6a36a2b20286006a3aa2ab0240c0123c7aa600920ab494009e091e8c00991b586a3ea2781c0000000000000000010128c68e23672c05010000000005dc030440c01a5a7a73009212b49600000067555555558e0000005effffffff1a5e9600000053555555558e0000004affffffff6a62a22d18000000002401fa000480f0000000000000000000190300001a7a7a2800920a78940020091e8c001b1b586a7ea204122401fa000480f000000000000000000107016bb872086bd8b03a01b87206b03a01b87201 diff --git a/apf2java/apf2java.out b/apf2java/apf2java.out index ff7ba96..a79146e 100644 --- a/apf2java/apf2java.out +++ b/apf2java/apf2java.out @@ -1,134 +1,171 @@ @Test public void testFullApfV4ProgramGeneration() throws IllegalInstructionException { ApfV4Generator gen = new ApfV4Generator(APF_VERSION_4); - gen.addLoadImmediate(R1, -4); + gen.addLoadImmediate(R1, -8); gen.addLoadData(R0, 0); gen.addAdd(1); gen.addStoreData(R0, 0); gen.addLoad16(R0, 12); - gen.addLoadImmediate(R1, -108); - gen.addJumpIfR0LessThan(0x600, "LABEL_345"); - gen.addLoadImmediate(R1, -112); - gen.addJumpIfR0Equals(0x88a2, "LABEL_345"); - gen.addJumpIfR0Equals(0x88a4, "LABEL_345"); - gen.addJumpIfR0Equals(0x88b8, "LABEL_345"); - gen.addJumpIfR0Equals(0x88cd, "LABEL_345"); - gen.addJumpIfR0Equals(0x88e1, "LABEL_345"); - gen.addJumpIfR0Equals(0x88e3, "LABEL_345"); - gen.addJumpIfR0NotEquals(0x806, "LABEL_115"); + gen.addLoadImmediate(R1, -120); + gen.addJumpIfR0LessThan(0x600, "LABEL_582"); + gen.addLoadImmediate(R1, -124); + gen.addJumpIfR0Equals(0x88a2, "LABEL_582"); + gen.addJumpIfR0Equals(0x88a4, "LABEL_582"); + gen.addJumpIfR0Equals(0x88b8, "LABEL_582"); + gen.addJumpIfR0Equals(0x88cd, "LABEL_582"); + gen.addJumpIfR0Equals(0x88e1, "LABEL_582"); + gen.addJumpIfR0Equals(0x88e3, "LABEL_582"); + gen.addJumpIfR0NotEquals(0x806, "LABEL_122"); gen.addLoadImmediate(R0, 14); - gen.addLoadImmediate(R1, -36); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("000108000604"), "LABEL_339"); + gen.addLoadImmediate(R1, -152); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("000108000604"), "LABEL_582"); gen.addLoad16(R0, 20); - gen.addJumpIfR0Equals(0x1, "LABEL_100"); - gen.addLoadImmediate(R1, -40); - gen.addJumpIfR0NotEquals(0x2, "LABEL_339"); + gen.addJumpIfR0Equals(0x1, "LABEL_104"); + gen.addLoadImmediate(R1, -156); + gen.addJumpIfR0NotEquals(0x2, "LABEL_582"); gen.addLoad32(R0, 28); - gen.addLoadImmediate(R1, -116); - gen.addJumpIfR0Equals(0x0, "LABEL_345"); + gen.addLoadImmediate(R1, -128); + gen.addJumpIfR0Equals(0x0, "LABEL_582"); gen.addLoadImmediate(R0, 0); - gen.addLoadImmediate(R1, -44); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_339"); + gen.addLoadImmediate(R1, -56); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_576"); - gen.defineLabel("LABEL_100"); + gen.defineLabel("LABEL_104"); gen.addLoadImmediate(R0, 38); - gen.addLoadImmediate(R1, -68); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("c0a801be"), "LABEL_345"); - gen.addLoadImmediate(R1, -8); - gen.addJump("LABEL_339"); + gen.addLoadImmediate(R1, -80); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("c0a801ec"), "LABEL_582"); + gen.addLoadImmediate(R1, -20); + gen.addJump("LABEL_576"); - gen.defineLabel("LABEL_115"); + gen.defineLabel("LABEL_122"); gen.addLoad16(R0, 12); - gen.addJumpIfR0NotEquals(0x800, "LABEL_263"); + gen.addJumpIfR0NotEquals(0x800, "LABEL_249"); gen.addLoad8(R0, 23); - gen.addJumpIfR0NotEquals(0x11, "LABEL_157"); + gen.addJumpIfR0NotEquals(0x11, "LABEL_165"); gen.addLoad16(R0, 20); - gen.addJumpIfR0AnyBitsSet(0x1fff, "LABEL_157"); + gen.addJumpIfR0AnyBitsSet(0x1fff, "LABEL_165"); gen.addLoadFromMemory(R1, 13); gen.addLoad16Indexed(R0, 16); - gen.addJumpIfR0NotEquals(0x44, "LABEL_157"); + gen.addJumpIfR0NotEquals(0x44, "LABEL_165"); gen.addLoadImmediate(R0, 50); gen.addAddR1(); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ea42226789c0"), "LABEL_157"); - gen.addLoadImmediate(R1, -12); - gen.addJump("LABEL_339"); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("7e9046bc7008"), "LABEL_165"); + gen.addLoadImmediate(R1, -24); + gen.addJump("LABEL_576"); - gen.defineLabel("LABEL_157"); + gen.defineLabel("LABEL_165"); gen.addLoad8(R0, 30); gen.addAnd(240); - gen.addLoadImmediate(R1, -84); - gen.addJumpIfR0Equals(0xe0, "LABEL_345"); - gen.addLoadImmediate(R1, -76); + gen.addLoadImmediate(R1, -96); + gen.addJumpIfR0Equals(0xe0, "LABEL_582"); + gen.addLoadImmediate(R1, -88); gen.addLoad32(R0, 30); - gen.addJumpIfR0Equals(0xffffffff, "LABEL_345"); - gen.addLoadImmediate(R1, -80); - gen.addJumpIfR0Equals(0xc0a801ff, "LABEL_345"); + gen.addJumpIfR0Equals(0xffffffff, "LABEL_582"); + gen.addLoadImmediate(R1, -92); + gen.addJumpIfR0Equals(0xc0a801ff, "LABEL_582"); gen.addLoad8(R0, 23); - gen.addJumpIfR0NotEquals(0x11, "LABEL_243"); - gen.addLoadImmediate(R0, 26); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("6b7a1f1fc0a801be"), "LABEL_243"); - gen.addLoadFromMemory(R0, 13); - gen.addAdd(8); - gen.addSwap(); - gen.addLoad16(R0, 16); - gen.addNeg(R1); - gen.addAddR1(); - gen.addJumpIfR0NotEquals(0x1, "LABEL_243"); - gen.addLoadFromMemory(R0, 13); - gen.addAdd(14); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("1194ceca"), "LABEL_243"); - gen.addAdd(8); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ff"), "LABEL_243"); - gen.addLoadImmediate(R1, -128); - gen.addJump("LABEL_345"); + gen.addJumpIfR0NotEquals(0x6, "LABEL_225"); + gen.addLoad16(R0, 20); + gen.addJumpIfR0AnyBitsSet(0x1fff, "LABEL_225"); + gen.addLoadFromMemory(R1, 13); + gen.addLoad16Indexed(R0, 16); + gen.addJumpIfR0NotEquals(0x7, "LABEL_225"); + gen.addLoadImmediate(R1, -148); + gen.addJump("LABEL_582"); - gen.defineLabel("LABEL_243"); - gen.addLoadImmediate(R1, -24); + gen.defineLabel("LABEL_225"); + gen.addLoadImmediate(R1, -36); gen.addLoadImmediate(R0, 0); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_339"); - gen.addLoadImmediate(R1, -72); - gen.addJump("LABEL_345"); - gen.addLoadImmediate(R1, -16); - gen.addJump("LABEL_339"); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_576"); + gen.addLoadImmediate(R1, -84); + gen.addJump("LABEL_582"); + gen.addLoadImmediate(R1, -28); + gen.addJump("LABEL_576"); - gen.defineLabel("LABEL_263"); - gen.addJumpIfR0Equals(0x86dd, "LABEL_284"); + gen.defineLabel("LABEL_249"); + gen.addJumpIfR0Equals(0x86dd, "LABEL_273"); gen.addLoadImmediate(R0, 0); - gen.addLoadImmediate(R1, -48); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_339"); - gen.addLoadImmediate(R1, -56); - gen.addJump("LABEL_345"); + gen.addLoadImmediate(R1, -60); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ffffffffffff"), "LABEL_576"); + gen.addLoadImmediate(R1, -68); + gen.addJump("LABEL_582"); - gen.defineLabel("LABEL_284"); + gen.defineLabel("LABEL_273"); gen.addLoad8(R0, 20); - gen.addJumpIfR0Equals(0x0, "LABEL_339"); - gen.addJumpIfR0Equals(0x3a, "LABEL_303"); - gen.addLoadImmediate(R1, -104); + gen.addJumpIfR0Equals(0x0, "LABEL_576"); + gen.addJumpIfR0Equals(0x3a, "LABEL_297"); + gen.addLoadImmediate(R1, -116); gen.addLoad8(R0, 38); - gen.addJumpIfR0Equals(0xff, "LABEL_345"); - gen.addLoadImmediate(R1, -32); - gen.addJump("LABEL_339"); + gen.addJumpIfR0Equals(0xff, "LABEL_582"); + gen.addLoadImmediate(R1, -44); + gen.addJump("LABEL_576"); - gen.defineLabel("LABEL_303"); + gen.defineLabel("LABEL_297"); gen.addLoad8(R0, 54); - gen.addLoadImmediate(R1, -88); - gen.addJumpIfR0Equals(0x85, "LABEL_345"); - gen.addJumpIfR0NotEquals(0x88, "LABEL_337"); + gen.addLoadImmediate(R1, -100); + gen.addJumpIfR0Equals(0x85, "LABEL_582"); + gen.addJumpIfR0NotEquals(0x88, "LABEL_333"); gen.addLoadImmediate(R0, 38); - gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ff0200000000000000000000000000"), "LABEL_337"); - gen.addLoadImmediate(R1, -92); - gen.addJump("LABEL_345"); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("ff0200000000000000000000000000"), "LABEL_333"); + gen.addLoadImmediate(R1, -104); + gen.addJump("LABEL_582"); - gen.defineLabel("LABEL_337"); - gen.addLoadImmediate(R1, -28); + gen.defineLabel("LABEL_333"); + gen.addLoadFromMemory(R0, 14); + gen.addJumpIfR0NotEquals(0x96, "LABEL_574"); + gen.addLoadFromMemory(R0, 15); + gen.addJumpIfR0GreaterThan(0x48e, "LABEL_574"); + gen.addLoadImmediate(R0, 0); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("7e9046bc700828c68e23672c86dd60"), "LABEL_574"); + gen.addLoadImmediate(R0, 18); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("00603afffe800000000000002ac68efffe23672c"), "LABEL_574"); + gen.addLoadImmediate(R0, 54); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("8600"), "LABEL_574"); + gen.addLoadImmediate(R0, 58); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("40c0"), "LABEL_574"); + gen.addLoad16(R0, 60); + gen.addJumpIfR0Equals(0x0, "LABEL_574"); + gen.addJumpIfR0LessThan(0xb4, "LABEL_421"); + gen.addJumpIfR0LessThan(0x91e, "LABEL_574"); + gen.addJumpIfR0GreaterThan(0x1b58, "LABEL_574"); + + gen.defineLabel("LABEL_421"); + gen.addLoadImmediate(R0, 62); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("0000000000000000010128c68e23672c05010000000005dc030440c0"), "LABEL_574"); + gen.addLoad32(R0, 90); + gen.addJumpIfR0Equals(0x0, "LABEL_574"); + gen.addJumpIfR0LessThan(0xb4, "LABEL_480"); + gen.addJumpIfR0LessThan(0x55555555, "LABEL_574"); + gen.addJumpIfR0GreaterThan(0xffffffffL, "LABEL_574"); + + gen.defineLabel("LABEL_480"); + gen.addLoad32(R0, 94); + gen.addJumpIfR0LessThan(0x55555555, "LABEL_574"); + gen.addJumpIfR0GreaterThan(0xffffffffL, "LABEL_574"); + gen.addLoadImmediate(R0, 98); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("000000002401fa000480f000000000000000000019030000"), "LABEL_574"); + gen.addLoad32(R0, 122); + gen.addJumpIfR0Equals(0x0, "LABEL_574"); + gen.addJumpIfR0LessThan(0x78, "LABEL_547"); + gen.addJumpIfR0LessThan(0x91e, "LABEL_574"); + gen.addJumpIfR0GreaterThan(0x1b58, "LABEL_574"); + + gen.defineLabel("LABEL_547"); + gen.addLoadImmediate(R0, 126); + gen.addJumpIfBytesAtR0NotEqual(hexStringToByteArray("2401fa000480f00000000000000000010701"), "LABEL_574"); + gen.addLoadImmediate(R1, -72); + gen.addJump("LABEL_582"); + + gen.defineLabel("LABEL_574"); + gen.addLoadImmediate(R1, -40); - gen.defineLabel("LABEL_339"); + gen.defineLabel("LABEL_576"); gen.addLoadData(R0, 0); gen.addAdd(1); gen.addStoreData(R0, 0); gen.addJump(PASS_LABEL); - gen.defineLabel("LABEL_345"); + gen.defineLabel("LABEL_582"); gen.addLoadData(R0, 0); gen.addAdd(1); gen.addStoreData(R0, 0); @@ -136,6 +173,6 @@ byte[] program = gen.generate(); final String programString = toHexString(program).toLowerCase(); - final String referenceProgramHexString = "6bfcb03a01b8120c6b9494014a06006b907c014388a27c013e88a47c013988b87c013488cd7c012f88e17c012a88e384003f08066a0e6bdca40110000600010800060412147a1c016bd884010400021a1c6b8c7c01010000686bd4a2ef06ffffffffffff6a266bbca2ea04c0a801be6bf872e0120c84008d08000a17821e1112149c00171fffab0d2a108210446a3239a20406ea42226789c06bf472b60a1e52f06bac7ab3e06bb41a1e7e000000a6ffffffff6bb07e0000009bc0a801ff0a178230116a1aa223086b7a1f1fc0a801beaa0d3a08aa221210ab2139821501aa0d3a0ea20a041194ceca3a08a20401ff6b8072666be868a25406ffffffffffff6bb872566bf0724c7c001086dd686bd0a23b06ffffffffffff6bc8723d0a147a32007a0b3a6b980a267a2eff6be072240a366ba87a23858218886a26a2040fff02000000000000000000000000006ba472086be4b03a01b87206b03a01b87201"; + final String referenceProgramHexString = "6bf8b03a01b8120c6b8894023706006b847c023088a27c022b88a47c022688b87c022188cd7c021c88e17c021788e384004608066a0e6dff68a40202000600010800060412147a1f016dff648401f500021a1c6b807c01ec0000686bc8a401d80006ffffffffffff6a266bb0a401d10004c0a801ec6bec7401c6120c84007808000a17821f1112149c00181fffab0d2a108211446a3239a205067e9046bc70086be874019b0a1e52f06ba07c019600e06ba81a1e7e00000189ffffffff6ba47e0000017ec0a801ff0a1782140612149c000d1fffab0d2a108206076dff6c7401656bdc68a401510006ffffffffffff6bac7401526be47401477c001386dd686bc4a401340006ffffffffffff6bbc7401350a147c012800007a0e3a6b8c0a267c012200ff6bd47401170a366b9c7c011400858218886a26a2040fff02000000000000000000000000006b9872f9aa0e82ec96aa0f8c00e5048e68a2d20f7e9046bc700828c68e23672c86dd606a12a2b91400603afffe800000000000002ac68efffe23672c6a36a2b20286006a3aa2ab0240c0123c7aa600920ab494009e091e8c00991b586a3ea2781c0000000000000000010128c68e23672c05010000000005dc030440c01a5a7a73009212b49600000067555555558e0000005effffffff1a5e9600000053555555558e0000004affffffff6a62a22d18000000002401fa000480f0000000000000000000190300001a7a7a2800920a78940020091e8c001b1b586a7ea204122401fa000480f000000000000000000107016bb872086bd8b03a01b87206b03a01b87201"; assertEquals(referenceProgramHexString, programString); } diff --git a/apf2java/apf2java.sh b/apf2java/apf2java.sh index 14e0c33..e5e716c 100755 --- a/apf2java/apf2java.sh +++ b/apf2java/apf2java.sh @@ -29,6 +29,7 @@ sed -r \ 's@: ldhx +r([01]), \[r1\+([0-9]+)\]@: gen.addLoad16Indexed(R\1, \2);@;'\ 's@: ldwx +r([01]), \[r1\+([0-9]+)\]@: gen.addLoad32Indexed(R\1, \2);@;'\ 's@: ldm +r([01]), m\[([0-9]+)\]@: gen.addLoadFromMemory(R\1, \2);@;'\ +'/addJumpIfR0(Greater|Less)Than/s@(0x[8-f][0-9a-f]{7})@\1L@;'\ < apf2java.txt > tmp declare -ar LABELS=($(sed -rn 's@.*LABEL_([0-9]+).*@\1@p' < tmp | sort -u)) for L in "${LABELS[@]}"; do diff --git a/apf2java/apf2java.txt b/apf2java/apf2java.txt index 8800e9e..9de4bd5 100644 --- a/apf2java/apf2java.txt +++ b/apf2java/apf2java.txt @@ -1,112 +1,141 @@ - 0: li r1, -4 + 0: li r1, -8 2: lddw r0, [r1] 3: add r0, 1 5: stdw r0, [r1] 6: ldh r0, [12] - 8: li r1, -108 - 10: jlt r0, 0x600, 345 - 15: li r1, -112 - 17: jeq r0, 0x88a2, 345 - 22: jeq r0, 0x88a4, 345 - 27: jeq r0, 0x88b8, 345 - 32: jeq r0, 0x88cd, 345 - 37: jeq r0, 0x88e1, 345 - 42: jeq r0, 0x88e3, 345 - 47: jne r0, 0x806, 115 + 8: li r1, -120 + 10: jlt r0, 0x600, 582 + 15: li r1, -124 + 17: jeq r0, 0x88a2, 582 + 22: jeq r0, 0x88a4, 582 + 27: jeq r0, 0x88b8, 582 + 32: jeq r0, 0x88cd, 582 + 37: jeq r0, 0x88e1, 582 + 42: jeq r0, 0x88e3, 582 + 47: jne r0, 0x806, 122 52: li r0, 14 - 54: li r1, -36 - 56: jnebs r0, 0x6, 339, 000108000604 - 67: ldh r0, [20] - 69: jeq r0, 0x1, 100 - 72: li r1, -40 - 74: jne r0, 0x2, 339 - 79: ldw r0, [28] - 81: li r1, -116 - 83: jeq r0, 0x0, 345 - 88: li r0, 0 - 89: li r1, -44 - 91: jnebs r0, 0x6, 339, ffffffffffff - 100: li r0, 38 - 102: li r1, -68 - 104: jnebs r0, 0x4, 345, c0a801be - 111: li r1, -8 - 113: jmp 339 - 115: ldh r0, [12] - 117: jne r0, 0x800, 263 - 122: ldb r0, [23] - 124: jne r0, 0x11, 157 - 127: ldh r0, [20] - 129: jset r0, 0x1fff, 157 - 134: ldm r1, m[13] - 136: ldhx r0, [r1+16] - 138: jne r0, 0x44, 157 - 141: li r0, 50 - 143: add r0, r1 - 144: jnebs r0, 0x6, 157, ea42226789c0 - 153: li r1, -12 - 155: jmp 339 - 157: ldb r0, [30] - 159: and r0, 240 - 161: li r1, -84 - 163: jeq r0, 0xe0, 345 - 166: li r1, -76 - 168: ldw r0, [30] - 170: jeq r0, 0xffffffff, 345 - 179: li r1, -80 - 181: jeq r0, 0xc0a801ff, 345 - 190: ldb r0, [23] - 192: jne r0, 0x11, 243 - 195: li r0, 26 - 197: jnebs r0, 0x8, 243, 6b7a1f1fc0a801be - 208: ldm r0, m[13] - 210: add r0, 8 - 212: swap - 214: ldh r0, [16] - 216: neg r1 - 218: add r0, r1 - 219: jne r0, 0x1, 243 - 222: ldm r0, m[13] - 224: add r0, 14 - 226: jnebs r0, 0x4, 243, 1194ceca - 233: add r0, 8 - 235: jnebs r0, 0x1, 243, ff - 239: li r1, -128 - 241: jmp 345 - 243: li r1, -24 - 245: li r0, 0 - 246: jnebs r0, 0x6, 339, ffffffffffff - 255: li r1, -72 - 257: jmp 345 - 259: li r1, -16 - 261: jmp 339 - 263: jeq r0, 0x86dd, 284 - 268: li r0, 0 - 269: li r1, -48 - 271: jnebs r0, 0x6, 339, ffffffffffff - 280: li r1, -56 - 282: jmp 345 - 284: ldb r0, [20] - 286: jeq r0, 0x0, 339 - 289: jeq r0, 0x3a, 303 - 292: li r1, -104 - 294: ldb r0, [38] - 296: jeq r0, 0xff, 345 - 299: li r1, -32 - 301: jmp 339 - 303: ldb r0, [54] - 305: li r1, -88 - 307: jeq r0, 0x85, 345 - 310: jne r0, 0x88, 337 - 313: li r0, 38 - 315: jnebs r0, 0xf, 337, ff0200000000000000000000000000 - 333: li r1, -92 - 335: jmp 345 - 337: li r1, -28 - 339: lddw r0, [r1] - 340: add r0, 1 - 342: stdw r0, [r1] - 343: jmp PASS - 345: lddw r0, [r1] - 346: add r0, 1 - 348: stdw r0, [r1] - 349: jmp DROP + 54: li r1, -152 + 57: jnebs r0, 0x6, 582, 000108000604 + 68: ldh r0, [20] + 70: jeq r0, 0x1, 104 + 73: li r1, -156 + 76: jne r0, 0x2, 582 + 81: ldw r0, [28] + 83: li r1, -128 + 85: jeq r0, 0x0, 582 + 90: li r0, 0 + 91: li r1, -56 + 93: jnebs r0, 0x6, 576, ffffffffffff + 104: li r0, 38 + 106: li r1, -80 + 108: jnebs r0, 0x4, 582, c0a801ec + 117: li r1, -20 + 119: jmp 576 + 122: ldh r0, [12] + 124: jne r0, 0x800, 249 + 129: ldb r0, [23] + 131: jne r0, 0x11, 165 + 134: ldh r0, [20] + 136: jset r0, 0x1fff, 165 + 141: ldm r1, m[13] + 143: ldhx r0, [r1+16] + 145: jne r0, 0x44, 165 + 148: li r0, 50 + 150: add r0, r1 + 151: jnebs r0, 0x6, 165, 7e9046bc7008 + 160: li r1, -24 + 162: jmp 576 + 165: ldb r0, [30] + 167: and r0, 240 + 169: li r1, -96 + 171: jeq r0, 0xe0, 582 + 176: li r1, -88 + 178: ldw r0, [30] + 180: jeq r0, 0xffffffff, 582 + 189: li r1, -92 + 191: jeq r0, 0xc0a801ff, 582 + 200: ldb r0, [23] + 202: jne r0, 0x6, 225 + 205: ldh r0, [20] + 207: jset r0, 0x1fff, 225 + 212: ldm r1, m[13] + 214: ldhx r0, [r1+16] + 216: jne r0, 0x7, 225 + 219: li r1, -148 + 222: jmp 582 + 225: li r1, -36 + 227: li r0, 0 + 228: jnebs r0, 0x6, 576, ffffffffffff + 239: li r1, -84 + 241: jmp 582 + 244: li r1, -28 + 246: jmp 576 + 249: jeq r0, 0x86dd, 273 + 254: li r0, 0 + 255: li r1, -60 + 257: jnebs r0, 0x6, 576, ffffffffffff + 268: li r1, -68 + 270: jmp 582 + 273: ldb r0, [20] + 275: jeq r0, 0x0, 576 + 280: jeq r0, 0x3a, 297 + 283: li r1, -116 + 285: ldb r0, [38] + 287: jeq r0, 0xff, 582 + 292: li r1, -44 + 294: jmp 576 + 297: ldb r0, [54] + 299: li r1, -100 + 301: jeq r0, 0x85, 582 + 306: jne r0, 0x88, 333 + 309: li r0, 38 + 311: jnebs r0, 0xf, 333, ff0200000000000000000000000000 + 329: li r1, -104 + 331: jmp 582 + 333: ldm r0, m[14] + 335: jne r0, 0x96, 574 + 338: ldm r0, m[15] + 340: jgt r0, 0x48e, 574 + 345: li r0, 0 + 346: jnebs r0, 0xf, 574, 7e9046bc700828c68e23672c86dd60 + 364: li r0, 18 + 366: jnebs r0, 0x14, 574, 00603afffe800000000000002ac68efffe23672c + 389: li r0, 54 + 391: jnebs r0, 0x2, 574, 8600 + 396: li r0, 58 + 398: jnebs r0, 0x2, 574, 40c0 + 403: ldh r0, [60] + 405: jeq r0, 0x0, 574 + 408: jlt r0, 0xb4, 421 + 411: jlt r0, 0x91e, 574 + 416: jgt r0, 0x1b58, 574 + 421: li r0, 62 + 423: jnebs r0, 0x1c, 574, 0000000000000000010128c68e23672c05010000000005dc030440c0 + 454: ldw r0, [90] + 456: jeq r0, 0x0, 574 + 459: jlt r0, 0xb4, 480 + 462: jlt r0, 0x55555555, 574 + 471: jgt r0, 0xffffffff, 574 + 480: ldw r0, [94] + 482: jlt r0, 0x55555555, 574 + 491: jgt r0, 0xffffffff, 574 + 500: li r0, 98 + 502: jnebs r0, 0x18, 574, 000000002401fa000480f000000000000000000019030000 + 529: ldw r0, [122] + 531: jeq r0, 0x0, 574 + 534: jlt r0, 0x78, 547 + 537: jlt r0, 0x91e, 574 + 542: jgt r0, 0x1b58, 574 + 547: li r0, 126 + 549: jnebs r0, 0x12, 574, 2401fa000480f00000000000000000010701 + 570: li r1, -72 + 572: jmp 582 + 574: li r1, -40 + 576: lddw r0, [r1] + 577: add r0, 1 + 579: stdw r0, [r1] + 580: jmp PASS + 582: lddw r0, [r1] + 583: add r0, 1 + 585: stdw r0, [r1] + 586: jmp DROP diff --git a/disassembler.c b/disassembler.c index 5d3799e..a89f213 100644 --- a/disassembler.c +++ b/disassembler.c @@ -296,25 +296,37 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32 break; } - case JDNSQMATCH_EXT_OPCODE: { - if (reg_num == 0) { - print_opcode("jdnsqne"); + case JDNSQMATCH_EXT_OPCODE: + case JDNSAMATCH_EXT_OPCODE: { + uint32_t offs = DECODE_IMM(1 << (len_field - 1)); + uint16_t qtype; + if (imm == JDNSQMATCH_EXT_OPCODE) { + print_opcode(reg_num ? "jdnsqeq" : "jdnsqne"); + qtype = DECODE_IMM(1); } else { - print_opcode("jdnsqeq"); + print_opcode(reg_num ? "jdnsaeq" : "jdnsane"); } bprintf("r0, "); - uint32_t offs = DECODE_IMM(1 << (len_field - 1)); - uint16_t qtype = DECODE_IMM(1); uint32_t end = *ptr2pc; while (end + 1 < program_len && !(program[end] == 0 && program[end + 1] == 0)) { end++; } end += 2; print_jump_target(end + offs, program_len); - bprintf(", %d, ", qtype); + bprintf(", "); + if (imm == JDNSQMATCH_EXT_OPCODE) { + bprintf("%d, ", qtype); + } while (*ptr2pc < end) { uint8_t byte = program[(*ptr2pc)++]; - bprintf("%02x", byte); + // values < 0x40 could be lengths, but - and 0..9 are in practice usually + // too long to be lengths so print them as characters. All other chars < 0x40 + // are not valid in dns character. + if (byte == '-' || (byte >= '0' && byte <= '9') || byte >= 0x40) { + bprintf("%c", byte); + } else { + bprintf("(%d)", byte); + } } break; } @@ -350,9 +362,9 @@ const char* apf_disassemble(const uint8_t* program, uint32_t program_len, uint32 } case PKTDATACOPY_OPCODE: { if (reg_num == 0) { - print_opcode("pcopy"); + print_opcode("pktcopy"); } else { - print_opcode("dcopy"); + print_opcode("datacopy"); } uint32_t src_offs = imm; uint32_t copy_len = DECODE_IMM(1); diff --git a/v5/apf_interpreter_assemble.sh b/v5/apf_interpreter_assemble.sh index 5e93456..7c4e8f0 100755 --- a/v5/apf_interpreter_assemble.sh +++ b/v5/apf_interpreter_assemble.sh @@ -32,6 +32,8 @@ do_test() { } main() { + cd "${0%/*}" + local -r me="${0##*/}" case "${me}" in apf_interpreter_assemble.sh) |