[DTrace-devel] [PATCH 13/14] Clean up comments and remove unneeded code in strcmp.S

eugene.loh at oracle.com eugene.loh at oracle.com
Thu Nov 3 19:52:25 UTC 2022


From: Eugene Loh <eugene.loh at oracle.com>

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 bpf/strcmp.S | 40 +++++++++++++---------------------------
 1 file changed, 13 insertions(+), 27 deletions(-)

diff --git a/bpf/strcmp.S b/bpf/strcmp.S
index 2b8f196f..cf5e48e6 100644
--- a/bpf/strcmp.S
+++ b/bpf/strcmp.S
@@ -81,19 +81,19 @@ dt_strcmp_not :
  *     // (this gives us the first byte that differs in the two strings)
  *     dt_strcmp_xor(tmp1, tmp2, r8);
  *     dt_strcmp_not(tmp1, r8);
- *     r0 = bpf_probe_read_str(tmp2, r8, tmp1);
+ *     r0 = bpf_probe_read_str(tmp1, r8, tmp1);
  *     r0 -= 1;
  *
  *     // based on this location, judge if the strings are >, <, or ==
  *     if (r0 > r6) goto Lsame;
  *     if (r0 > r7) goto Lsame;
  *
- *     s += r0;
- *     t += r0;
+ *     r6 = &s[r0];
+ *     r7 = &tmp2[r0];
  *
- *     if (l_is_dptr) { } else { bpf_probe_read(tmp1, 1, s); s = tmp1; }
- *     if (s[0] > t[0]) return +1;
- *     return -1;
+ *     if (flags & 1) { } else { bpf_probe_read(tmp1, 1, r6); r6 = tmp1; }
+ *     r6 = *r6;
+ *     r7 = *r7;
  *
  *     // if all chars are the same, break tie on string length
  * Lsame:
@@ -166,38 +166,24 @@ dt_strcmp :
 	jgt	%r0, %r7, .Lsame	/* if (r0 > r7) goto Lsame */
 
 	ldxdw	%r6, [%fp+-8]
-	add	%r6, %r0		/* s += r0 */
-	ldxdw	%r7, [%fp+-16]
-	add	%r7, %r0		/* t += r0 */
+	add	%r6, %r0		/* r6 = &s[r0] */
+	ldxdw	%r7, [%fp+-32]
+	add	%r7, %r0		/* r7 = &tmp2[r0] */
 
 	jset	%r9, 1, .Ls_is_dptr
 	ldxdw	%r1, [%fp+-24]
 	mov	%r2, 1
 	mov	%r3, %r6
-	mov	%r6, %r1		/* s = tmp1 (after the helper call) */
-	call	BPF_FUNC_probe_read	/* bpf_probe_read(tmp1, 1, s) */
+	mov	%r6, %r1		/* r6 = tmp1 (after the helper call) */
+	call	BPF_FUNC_probe_read	/* bpf_probe_read(tmp1, 1, r6) */
 .Ls_is_dptr:
 
-	jset	%r9, 2, .Lt_is_dptr
-	ldxdw	%r1, [%fp+-32]
-	mov	%r2, 1
-	mov	%r3, %r7
-	mov	%r7, %r1		/* t = tmp2 (after the helper call) */
-	call	BPF_FUNC_probe_read	/* bpf_probe_read(tmp2, 1, t) */
-.Lt_is_dptr:
-
-	ldxb	%r6, [%r6+0]		/* s[0] */
+	ldxb	%r6, [%r6+0]		/* r6 = *r6 */
 	and	%r6, 0xff
 
-	ldxb	%r7, [%r7+0]		/* t[0] */
+	ldxb	%r7, [%r7+0]		/* r7 = *r7 */
 	and	%r7, 0xff
 
-	jle	%r6, %r7, 2		/* if (s[0] > t[0]) return +1 */
-	mov	%r0, 1
-	exit
-	mov	%r0, -1
-	exit
-
 .Lsame:
 	jle	%r6, %r7, 2		/* if (r6 > r7) return +1 */
 	mov	%r0, 1
-- 
2.18.4




More information about the DTrace-devel mailing list