]> The Tcpdump Group git mirrors - libpcap/commitdiff
Lose a "txa" just before "ldb [x + 0]". 1505/head
authorDenis Ovsienko <[email protected]>
Mon, 14 Apr 2025 10:39:52 +0000 (11:39 +0100)
committerDenis Ovsienko <[email protected]>
Mon, 14 Apr 2025 11:12:48 +0000 (12:12 +0100)
There is no point in copying X to A if the next instruction overwrites A
with some other value.  This generates a slightly shorter filter program
with the same effect (the apply filter tests hold).

gencode.c
testprogs/TESTrun

index 0fcd070fab41c7e7814bbfd17e45fc5b0e832f74..ec2bf86e285ab3c593dd8e0555138d7b4724d98d 100644 (file)
--- a/gencode.c
+++ b/gencode.c
@@ -6207,12 +6207,10 @@ gen_protochain(compiler_state_t *cstate, bpf_u_int32 v, int proto)
         * A = P[X];
         * X = X + (P[X + 1] + 2) * 4;
         */
-       /* A = X */
-       s[i - 1]->s.jt = s[i] = new_stmt(cstate, BPF_MISC|BPF_TXA);
-       i++;
        /* A = P[X + packet head]; */
        s[i] = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
        s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
+       s[i - 1]->s.jt = s[i];
        i++;
        /* MEM[reg2] = A */
        s[i] = new_stmt(cstate, BPF_ST);
index d8cad509dd6762aeecd3df22d1f92e92eb832a0f..bdba62f789ea542e0ac2756a929434f247287e1a 100755 (executable)
@@ -8594,29 +8594,28 @@ my @accept_blocks = (
                unopt => '
                        (000) ldb      [0]
                        (001) and      #0xf0
-                       (002) jeq      #0x40            jt 3    jf 24
+                       (002) jeq      #0x40            jt 3    jf 23
                        (003) ldb      [9]
                        (004) ldxb     4*([0]&0xf)
-                       (005) jeq      #0x11            jt 21   jf 6
-                       (006) jeq      #0x3b            jt 21   jf 7
+                       (005) jeq      #0x11            jt 20   jf 6
+                       (006) jeq      #0x3b            jt 20   jf 7
                        (007) add      #0
-                       (008) jeq      #0x33            jt 9    jf 21
-                       (009) txa
-                       (010) ldb      [x + 0]
-                       (011) st       M[0]
-                       (012) txa
-                       (013) add      #1
-                       (014) tax
-                       (015) ldb      [x + 0]
-                       (016) add      #2
-                       (017) mul      #4
-                       (018) tax
-                       (019) ld       M[0]
-                       (020) ja       5
-                       (021) add      #0
-                       (022) jeq      #0x11            jt 23   jf 24
-                       (023) ret      #262144
-                       (024) ret      #0
+                       (008) jeq      #0x33            jt 9    jf 20
+                       (009) ldb      [x + 0]
+                       (010) st       M[0]
+                       (011) txa
+                       (012) add      #1
+                       (013) tax
+                       (014) ldb      [x + 0]
+                       (015) add      #2
+                       (016) mul      #4
+                       (017) tax
+                       (018) ld       M[0]
+                       (019) ja       5
+                       (020) add      #0
+                       (021) jeq      #0x11            jt 22   jf 23
+                       (022) ret      #262144
+                       (023) ret      #0
                        ',
        }, # ip_protochain
        {
@@ -8630,11 +8629,11 @@ my @accept_blocks = (
                unopt => '
                        (000) ldb      [0]
                        (001) and      #0xf0
-                       (002) jeq      #0x60            jt 3    jf 36
+                       (002) jeq      #0x60            jt 3    jf 35
                        (003) ldb      [6]
                        (004) ldx      #0x28
-                       (005) jeq      #0x11            jt 33   jf 6
-                       (006) jeq      #0x3b            jt 33   jf 7
+                       (005) jeq      #0x11            jt 32   jf 6
+                       (006) jeq      #0x3b            jt 32   jf 7
                        (007) jeq      #0x0             jt 11   jf 8
                        (008) jeq      #0x3c            jt 11   jf 9
                        (009) jeq      #0x2b            jt 11   jf 10
@@ -8648,23 +8647,22 @@ my @accept_blocks = (
                        (017) tax
                        (018) ld       M[0]
                        (019) ja       5
-                       (020) jeq      #0x33            jt 21   jf 33
-                       (021) txa
-                       (022) ldb      [x + 0]
-                       (023) st       M[0]
-                       (024) txa
-                       (025) add      #1
-                       (026) tax
-                       (027) ldb      [x + 0]
-                       (028) add      #2
-                       (029) mul      #4
-                       (030) tax
-                       (031) ld       M[0]
-                       (032) ja       5
-                       (033) add      #0
-                       (034) jeq      #0x11            jt 35   jf 36
-                       (035) ret      #262144
-                       (036) ret      #0
+                       (020) jeq      #0x33            jt 21   jf 32
+                       (021) ldb      [x + 0]
+                       (022) st       M[0]
+                       (023) txa
+                       (024) add      #1
+                       (025) tax
+                       (026) ldb      [x + 0]
+                       (027) add      #2
+                       (028) mul      #4
+                       (029) tax
+                       (030) ld       M[0]
+                       (031) ja       5
+                       (032) add      #0
+                       (033) jeq      #0x11            jt 34   jf 35
+                       (034) ret      #262144
+                       (035) ret      #0
                        ',
        }, # ip6_protochain
        {
@@ -8678,64 +8676,62 @@ my @accept_blocks = (
                unopt => '
                        (000) ldb      [0]
                        (001) and      #0xf0
-                       (002) jeq      #0x40            jt 3    jf 23
+                       (002) jeq      #0x40            jt 3    jf 22
                        (003) ldb      [9]
                        (004) ldxb     4*([0]&0xf)
-                       (005) jeq      #0x11            jt 21   jf 6
-                       (006) jeq      #0x3b            jt 21   jf 7
+                       (005) jeq      #0x11            jt 20   jf 6
+                       (006) jeq      #0x3b            jt 20   jf 7
                        (007) add      #0
-                       (008) jeq      #0x33            jt 9    jf 21
-                       (009) txa
-                       (010) ldb      [x + 0]
-                       (011) st       M[1]
-                       (012) txa
-                       (013) add      #1
-                       (014) tax
-                       (015) ldb      [x + 0]
-                       (016) add      #2
-                       (017) mul      #4
-                       (018) tax
-                       (019) ld       M[1]
-                       (020) ja       5
-                       (021) add      #0
-                       (022) jeq      #0x11            jt 58   jf 23
-                       (023) ldb      [0]
-                       (024) and      #0xf0
-                       (025) jeq      #0x60            jt 26   jf 59
-                       (026) ldb      [6]
-                       (027) ldx      #0x28
-                       (028) jeq      #0x11            jt 56   jf 29
-                       (029) jeq      #0x3b            jt 56   jf 30
-                       (030) jeq      #0x0             jt 34   jf 31
-                       (031) jeq      #0x3c            jt 34   jf 32
-                       (032) jeq      #0x2b            jt 34   jf 33
-                       (033) jeq      #0x2c            jt 34   jf 43
-                       (034) ldb      [x + 0]
-                       (035) st       M[1]
-                       (036) ldb      [x + 1]
-                       (037) add      #1
-                       (038) mul      #8
-                       (039) add      x
-                       (040) tax
-                       (041) ld       M[1]
-                       (042) ja       28
-                       (043) jeq      #0x33            jt 44   jf 56
-                       (044) txa
-                       (045) ldb      [x + 0]
-                       (046) st       M[1]
-                       (047) txa
-                       (048) add      #1
-                       (049) tax
-                       (050) ldb      [x + 0]
-                       (051) add      #2
-                       (052) mul      #4
-                       (053) tax
-                       (054) ld       M[1]
-                       (055) ja       28
-                       (056) add      #0
-                       (057) jeq      #0x11            jt 58   jf 59
-                       (058) ret      #262144
-                       (059) ret      #0
+                       (008) jeq      #0x33            jt 9    jf 20
+                       (009) ldb      [x + 0]
+                       (010) st       M[1]
+                       (011) txa
+                       (012) add      #1
+                       (013) tax
+                       (014) ldb      [x + 0]
+                       (015) add      #2
+                       (016) mul      #4
+                       (017) tax
+                       (018) ld       M[1]
+                       (019) ja       5
+                       (020) add      #0
+                       (021) jeq      #0x11            jt 56   jf 22
+                       (022) ldb      [0]
+                       (023) and      #0xf0
+                       (024) jeq      #0x60            jt 25   jf 57
+                       (025) ldb      [6]
+                       (026) ldx      #0x28
+                       (027) jeq      #0x11            jt 54   jf 28
+                       (028) jeq      #0x3b            jt 54   jf 29
+                       (029) jeq      #0x0             jt 33   jf 30
+                       (030) jeq      #0x3c            jt 33   jf 31
+                       (031) jeq      #0x2b            jt 33   jf 32
+                       (032) jeq      #0x2c            jt 33   jf 42
+                       (033) ldb      [x + 0]
+                       (034) st       M[1]
+                       (035) ldb      [x + 1]
+                       (036) add      #1
+                       (037) mul      #8
+                       (038) add      x
+                       (039) tax
+                       (040) ld       M[1]
+                       (041) ja       27
+                       (042) jeq      #0x33            jt 43   jf 54
+                       (043) ldb      [x + 0]
+                       (044) st       M[1]
+                       (045) txa
+                       (046) add      #1
+                       (047) tax
+                       (048) ldb      [x + 0]
+                       (049) add      #2
+                       (050) mul      #4
+                       (051) tax
+                       (052) ld       M[1]
+                       (053) ja       27
+                       (054) add      #0
+                       (055) jeq      #0x11            jt 56   jf 57
+                       (056) ret      #262144
+                       (057) ret      #0
                        ',
        }, # protochain
        {