genelf.c (1067B)
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 19static 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 53DEFINE_SUITE("Test jit_write_elf", jit_write_elf);