 584c5e2ad3
			
		
	
	
	584c5e2ad3
	
	
	
		
			
			Fix mixed space and tabs. Put bpf_jit_load_*[] externs into bpf_jit.h "while(0)" --> "while (0)" "COND (X)" --> "COND(X)" Document branch offset calculations, and bpf_error's return sequence. Document the reason we need to emit three nops between the %y register write and the divide instruction. Remove erroneous trailing semicolons from emit_read_y() and emit_write_y(). Based upon feedback from Sam Ravnborg. Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			68 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			1.7 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _BPF_JIT_H
 | |
| #define _BPF_JIT_H
 | |
| 
 | |
| /* Conventions:
 | |
|  *  %g1 : temporary
 | |
|  *  %g2 : Secondary temporary used by SKB data helper stubs.
 | |
|  *  %g3 : packet offset passed into SKB data helper stubs.
 | |
|  *  %o0 : pointer to skb (first argument given to JIT function)
 | |
|  *  %o1 : BPF A accumulator
 | |
|  *  %o2 : BPF X accumulator
 | |
|  *  %o3 : Holds saved %o7 so we can call helper functions without needing
 | |
|  *        to allocate a register window.
 | |
|  *  %o4 : skb->len - skb->data_len
 | |
|  *  %o5 : skb->data
 | |
|  */
 | |
| 
 | |
| #ifndef __ASSEMBLER__
 | |
| #define G0		0x00
 | |
| #define G1		0x01
 | |
| #define G3		0x03
 | |
| #define G6		0x06
 | |
| #define O0		0x08
 | |
| #define O1		0x09
 | |
| #define O2		0x0a
 | |
| #define O3		0x0b
 | |
| #define O4		0x0c
 | |
| #define O5		0x0d
 | |
| #define SP		0x0e
 | |
| #define O7		0x0f
 | |
| #define FP		0x1e
 | |
| 
 | |
| #define r_SKB		O0
 | |
| #define r_A		O1
 | |
| #define r_X		O2
 | |
| #define r_saved_O7	O3
 | |
| #define r_HEADLEN	O4
 | |
| #define r_SKB_DATA	O5
 | |
| #define r_TMP		G1
 | |
| #define r_TMP2		G2
 | |
| #define r_OFF		G3
 | |
| 
 | |
| /* assembly code in arch/sparc/net/bpf_jit_asm.S */
 | |
| extern u32 bpf_jit_load_word[];
 | |
| extern u32 bpf_jit_load_half[];
 | |
| extern u32 bpf_jit_load_byte[];
 | |
| extern u32 bpf_jit_load_byte_msh[];
 | |
| extern u32 bpf_jit_load_word_positive_offset[];
 | |
| extern u32 bpf_jit_load_half_positive_offset[];
 | |
| extern u32 bpf_jit_load_byte_positive_offset[];
 | |
| extern u32 bpf_jit_load_byte_msh_positive_offset[];
 | |
| extern u32 bpf_jit_load_word_negative_offset[];
 | |
| extern u32 bpf_jit_load_half_negative_offset[];
 | |
| extern u32 bpf_jit_load_byte_negative_offset[];
 | |
| extern u32 bpf_jit_load_byte_msh_negative_offset[];
 | |
| 
 | |
| #else
 | |
| #define r_SKB		%o0
 | |
| #define r_A		%o1
 | |
| #define r_X		%o2
 | |
| #define r_saved_O7	%o3
 | |
| #define r_HEADLEN	%o4
 | |
| #define r_SKB_DATA	%o5
 | |
| #define r_TMP		%g1
 | |
| #define r_TMP2		%g2
 | |
| #define r_OFF		%g3
 | |
| #endif
 | |
| 
 | |
| #endif /* _BPF_JIT_H */
 |