1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | #include <limits.h> |
3 | #include <stdio.h> |
4 | #include <stdlib.h> |
5 | #include <string.h> |
6 | #include <unistd.h> |
7 | #include <linux/compiler.h> |
8 | |
9 | #include "debug.h" |
10 | #include "tests.h" |
11 | |
12 | #ifdef HAVE_JITDUMP |
13 | #include <libelf.h> |
14 | #include "../util/genelf.h" |
15 | #endif |
16 | |
17 | #define TEMPL "/tmp/perf-test-XXXXXX" |
18 | |
19 | static int test__jit_write_elf(struct test_suite *test __maybe_unused, |
20 | int subtest __maybe_unused) |
21 | { |
22 | #ifdef HAVE_JITDUMP |
23 | static unsigned char x86_code[] = { |
24 | 0xBB, 0x2A, 0x00, 0x00, 0x00, /* movl $42, %ebx */ |
25 | 0xB8, 0x01, 0x00, 0x00, 0x00, /* movl $1, %eax */ |
26 | 0xCD, 0x80 /* int $0x80 */ |
27 | }; |
28 | char path[PATH_MAX]; |
29 | int fd, ret; |
30 | |
31 | strcpy(path, TEMPL); |
32 | |
33 | fd = mkstemp(path); |
34 | if (fd < 0) { |
35 | perror("mkstemp failed" ); |
36 | return TEST_FAIL; |
37 | } |
38 | |
39 | pr_info("Writing jit code to: %s\n" , path); |
40 | |
41 | ret = jit_write_elf(fd, 0, "main" , x86_code, sizeof(x86_code), |
42 | NULL, 0, NULL, 0, 0); |
43 | close(fd); |
44 | |
45 | unlink(path); |
46 | |
47 | return ret ? TEST_FAIL : 0; |
48 | #else |
49 | return TEST_SKIP; |
50 | #endif |
51 | } |
52 | |
53 | DEFINE_SUITE("Test jit_write_elf" , jit_write_elf); |
54 | |