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

mkpiggy.c (1667B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/* ----------------------------------------------------------------------- *
      3 *
      4 *  Copyright (C) 2009 Intel Corporation. All rights reserved.
      5 *
      6 *  H. Peter Anvin <hpa@linux.intel.com>
      7 *
      8 * -----------------------------------------------------------------------
      9 *
     10 * Outputs a small assembly wrapper with the appropriate symbols defined.
     11 */
     12
     13#include <stdlib.h>
     14#include <stdio.h>
     15#include <string.h>
     16#include <inttypes.h>
     17#include <tools/le_byteshift.h>
     18
     19int main(int argc, char *argv[])
     20{
     21	uint32_t olen;
     22	long ilen;
     23	FILE *f = NULL;
     24	int retval = 1;
     25
     26	if (argc < 2) {
     27		fprintf(stderr, "Usage: %s compressed_file\n", argv[0]);
     28		goto bail;
     29	}
     30
     31	/* Get the information for the compressed kernel image first */
     32
     33	f = fopen(argv[1], "r");
     34	if (!f) {
     35		perror(argv[1]);
     36		goto bail;
     37	}
     38
     39
     40	if (fseek(f, -4L, SEEK_END)) {
     41		perror(argv[1]);
     42	}
     43
     44	if (fread(&olen, sizeof(olen), 1, f) != 1) {
     45		perror(argv[1]);
     46		goto bail;
     47	}
     48
     49	ilen = ftell(f);
     50	olen = get_unaligned_le32(&olen);
     51
     52	printf(".section \".rodata..compressed\",\"a\",@progbits\n");
     53	printf(".globl z_input_len\n");
     54	printf("z_input_len = %lu\n", ilen);
     55	printf(".globl z_output_len\n");
     56	printf("z_output_len = %lu\n", (unsigned long)olen);
     57
     58	printf(".globl input_data, input_data_end\n");
     59	printf("input_data:\n");
     60	printf(".incbin \"%s\"\n", argv[1]);
     61	printf("input_data_end:\n");
     62
     63	printf(".section \".rodata\",\"a\",@progbits\n");
     64	printf(".globl input_len\n");
     65	printf("input_len:\n\t.long %lu\n", ilen);
     66	printf(".globl output_len\n");
     67	printf("output_len:\n\t.long %lu\n", (unsigned long)olen);
     68
     69	retval = 0;
     70bail:
     71	if (f)
     72		fclose(f);
     73	return retval;
     74}