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 int test__jit_write_elf(struct test *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