Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test cases where we combine semi-random imm values, mainly for testing JITs when they have different encoding options for 64 bit immediates in order to reduce resulting image size. Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Signed-off-by: Alexei Starovoitov <ast@kernel.org>
- Loading branch information
Showing
2 changed files
with
142 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef __BPF_RAND__ | ||
#define __BPF_RAND__ | ||
|
||
#include <stdint.h> | ||
#include <stdlib.h> | ||
#include <time.h> | ||
|
||
static inline uint64_t bpf_rand_mask(uint64_t mask) | ||
{ | ||
return (((uint64_t)(uint32_t)rand()) | | ||
((uint64_t)(uint32_t)rand() << 32)) & mask; | ||
} | ||
|
||
#define bpf_rand_ux(x, m) \ | ||
static inline uint64_t bpf_rand_u##x(int shift) \ | ||
{ \ | ||
return bpf_rand_mask((m)) << shift; \ | ||
} | ||
|
||
bpf_rand_ux( 8, 0xffULL) | ||
bpf_rand_ux(16, 0xffffULL) | ||
bpf_rand_ux(24, 0xffffffULL) | ||
bpf_rand_ux(32, 0xffffffffULL) | ||
bpf_rand_ux(40, 0xffffffffffULL) | ||
bpf_rand_ux(48, 0xffffffffffffULL) | ||
bpf_rand_ux(56, 0xffffffffffffffULL) | ||
bpf_rand_ux(64, 0xffffffffffffffffULL) | ||
|
||
static inline void bpf_semi_rand_init(void) | ||
{ | ||
srand(time(NULL)); | ||
} | ||
|
||
static inline uint64_t bpf_semi_rand_get(void) | ||
{ | ||
switch (rand() % 39) { | ||
case 0: return 0x000000ff00000000ULL | bpf_rand_u8(0); | ||
case 1: return 0xffffffff00000000ULL | bpf_rand_u16(0); | ||
case 2: return 0x00000000ffff0000ULL | bpf_rand_u16(0); | ||
case 3: return 0x8000000000000000ULL | bpf_rand_u32(0); | ||
case 4: return 0x00000000f0000000ULL | bpf_rand_u32(0); | ||
case 5: return 0x0000000100000000ULL | bpf_rand_u24(0); | ||
case 6: return 0x800ff00000000000ULL | bpf_rand_u32(0); | ||
case 7: return 0x7fffffff00000000ULL | bpf_rand_u32(0); | ||
case 8: return 0xffffffffffffff00ULL ^ bpf_rand_u32(24); | ||
case 9: return 0xffffffffffffff00ULL | bpf_rand_u8(0); | ||
case 10: return 0x0000000010000000ULL | bpf_rand_u32(0); | ||
case 11: return 0xf000000000000000ULL | bpf_rand_u8(0); | ||
case 12: return 0x0000f00000000000ULL | bpf_rand_u8(8); | ||
case 13: return 0x000000000f000000ULL | bpf_rand_u8(16); | ||
case 14: return 0x0000000000000f00ULL | bpf_rand_u8(32); | ||
case 15: return 0x00fff00000000f00ULL | bpf_rand_u8(48); | ||
case 16: return 0x00007fffffffffffULL ^ bpf_rand_u32(1); | ||
case 17: return 0xffff800000000000ULL | bpf_rand_u8(4); | ||
case 18: return 0xffff800000000000ULL | bpf_rand_u8(20); | ||
case 19: return (0xffffffc000000000ULL + 0x80000ULL) | bpf_rand_u32(0); | ||
case 20: return (0xffffffc000000000ULL - 0x04000000ULL) | bpf_rand_u32(0); | ||
case 21: return 0x0000000000000000ULL | bpf_rand_u8(55) | bpf_rand_u32(20); | ||
case 22: return 0xffffffffffffffffULL ^ bpf_rand_u8(3) ^ bpf_rand_u32(40); | ||
case 23: return 0x0000000000000000ULL | bpf_rand_u8(bpf_rand_u8(0) % 64); | ||
case 24: return 0x0000000000000000ULL | bpf_rand_u16(bpf_rand_u8(0) % 64); | ||
case 25: return 0xffffffffffffffffULL ^ bpf_rand_u8(bpf_rand_u8(0) % 64); | ||
case 26: return 0xffffffffffffffffULL ^ bpf_rand_u40(bpf_rand_u8(0) % 64); | ||
case 27: return 0x0000800000000000ULL; | ||
case 28: return 0x8000000000000000ULL; | ||
case 29: return 0x0000000000000000ULL; | ||
case 30: return 0xffffffffffffffffULL; | ||
case 31: return bpf_rand_u16(bpf_rand_u8(0) % 64); | ||
case 32: return bpf_rand_u24(bpf_rand_u8(0) % 64); | ||
case 33: return bpf_rand_u32(bpf_rand_u8(0) % 64); | ||
case 34: return bpf_rand_u40(bpf_rand_u8(0) % 64); | ||
case 35: return bpf_rand_u48(bpf_rand_u8(0) % 64); | ||
case 36: return bpf_rand_u56(bpf_rand_u8(0) % 64); | ||
case 37: return bpf_rand_u64(bpf_rand_u8(0) % 64); | ||
default: return bpf_rand_u64(0); | ||
} | ||
} | ||
|
||
#endif /* __BPF_RAND__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters