cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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);