summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-03-21 17:22:03 -0400
committerDavid S. Miller <davem@davemloft.net>2013-03-21 17:25:56 -0400
commit79617801ea0c0e6664cb497d4c1892c2ff407364 (patch)
tree5c1f4af6a7c3a6e13a33f054d7c58dee146f15e3 /arch
parentd5e07e69218fd9aa21d6c8c5ccc629d92bdb9b0f (diff)
filter: bpf_jit_comp: refactor and unify BPF JIT image dump output
If bpf_jit_enable > 1, then we dump the emitted JIT compiled image after creation. Currently, only SPARC and PowerPC has similar output as in the reference implementation on x86_64. Make a small helper function in order to reduce duplicated code and make the dump output uniform across architectures x86_64, SPARC, PPC, ARM (e.g. on ARM flen, pass and proglen are currently not shown, but would be interesting to know as well), also for future BPF JIT implementations on other archs. Cc: Mircea Gherzan <mgherzan@gmail.com> Cc: Matt Evans <matt@ozlabs.org> Cc: Eric Dumazet <eric.dumazet@google.com> Cc: David S. Miller <davem@davemloft.net> Signed-off-by: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/net/bpf_jit_32.c5
-rw-r--r--arch/powerpc/net/bpf_jit_comp.c12
-rw-r--r--arch/sparc/net/bpf_jit_comp.c6
-rw-r--r--arch/x86/net/bpf_jit_comp.c9
4 files changed, 9 insertions, 23 deletions
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
index a0bd8a755bdf..1a643ee8e082 100644
--- a/arch/arm/net/bpf_jit_32.c
+++ b/arch/arm/net/bpf_jit_32.c
@@ -918,9 +918,8 @@ void bpf_jit_compile(struct sk_filter *fp)
918#endif 918#endif
919 919
920 if (bpf_jit_enable > 1) 920 if (bpf_jit_enable > 1)
921 print_hex_dump(KERN_INFO, "BPF JIT code: ", 921 /* there are 2 passes here */
922 DUMP_PREFIX_ADDRESS, 16, 4, ctx.target, 922 bpf_jit_dump(fp->len, alloc_size, 2, ctx.target);
923 alloc_size, false);
924 923
925 fp->bpf_func = (void *)ctx.target; 924 fp->bpf_func = (void *)ctx.target;
926out: 925out:
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
index e834f1ec23c8..c427ae36374a 100644
--- a/arch/powerpc/net/bpf_jit_comp.c
+++ b/arch/powerpc/net/bpf_jit_comp.c
@@ -671,16 +671,12 @@ void bpf_jit_compile(struct sk_filter *fp)
671 } 671 }
672 672
673 if (bpf_jit_enable > 1) 673 if (bpf_jit_enable > 1)
674 pr_info("flen=%d proglen=%u pass=%d image=%p\n", 674 /* Note that we output the base address of the code_base
675 flen, proglen, pass, image); 675 * rather than image, since opcodes are in code_base.
676 */
677 bpf_jit_dump(flen, proglen, pass, code_base);
676 678
677 if (image) { 679 if (image) {
678 if (bpf_jit_enable > 1)
679 print_hex_dump(KERN_ERR, "JIT code: ",
680 DUMP_PREFIX_ADDRESS,
681 16, 1, code_base,
682 proglen, false);
683
684 bpf_flush_icache(code_base, code_base + (proglen/4)); 680 bpf_flush_icache(code_base, code_base + (proglen/4));
685 /* Function descriptor nastiness: Address + TOC */ 681 /* Function descriptor nastiness: Address + TOC */
686 ((u64 *)image)[0] = (u64)code_base; 682 ((u64 *)image)[0] = (u64)code_base;
diff --git a/arch/sparc/net/bpf_jit_comp.c b/arch/sparc/net/bpf_jit_comp.c
index 3109ca684a99..d36a85ebb5e0 100644
--- a/arch/sparc/net/bpf_jit_comp.c
+++ b/arch/sparc/net/bpf_jit_comp.c
@@ -795,13 +795,9 @@ cond_branch: f_offset = addrs[i + filter[i].jf];
795 } 795 }
796 796
797 if (bpf_jit_enable > 1) 797 if (bpf_jit_enable > 1)
798 pr_err("flen=%d proglen=%u pass=%d image=%p\n", 798 bpf_jit_dump(flen, proglen, pass, image);
799 flen, proglen, pass, image);
800 799
801 if (image) { 800 if (image) {
802 if (bpf_jit_enable > 1)
803 print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS,
804 16, 1, image, proglen, false);
805 bpf_flush_icache(image, image + proglen); 801 bpf_flush_icache(image, image + proglen);
806 fp->bpf_func = (void *)image; 802 fp->bpf_func = (void *)image;
807 } 803 }
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 3cbe45381bbb..f66b54086ce5 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -725,17 +725,12 @@ cond_branch: f_offset = addrs[i + filter[i].jf] - addrs[i];
725 } 725 }
726 oldproglen = proglen; 726 oldproglen = proglen;
727 } 727 }
728
728 if (bpf_jit_enable > 1) 729 if (bpf_jit_enable > 1)
729 pr_err("flen=%d proglen=%u pass=%d image=%p\n", 730 bpf_jit_dump(flen, proglen, pass, image);
730 flen, proglen, pass, image);
731 731
732 if (image) { 732 if (image) {
733 if (bpf_jit_enable > 1)
734 print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS,
735 16, 1, image, proglen, false);
736
737 bpf_flush_icache(image, image + proglen); 733 bpf_flush_icache(image, image + proglen);
738
739 fp->bpf_func = (void *)image; 734 fp->bpf_func = (void *)image;
740 } 735 }
741out: 736out: