root/scripts/mod/mk_elfconfig.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. main

   1 // SPDX-License-Identifier: GPL-2.0
   2 #include <stdio.h>
   3 #include <stdlib.h>
   4 #include <string.h>
   5 #include <elf.h>
   6 
   7 int
   8 main(int argc, char **argv)
   9 {
  10         unsigned char ei[EI_NIDENT];
  11         union { short s; char c[2]; } endian_test;
  12 
  13         if (fread(ei, 1, EI_NIDENT, stdin) != EI_NIDENT) {
  14                 fprintf(stderr, "Error: input truncated\n");
  15                 return 1;
  16         }
  17         if (memcmp(ei, ELFMAG, SELFMAG) != 0) {
  18                 fprintf(stderr, "Error: not ELF\n");
  19                 return 1;
  20         }
  21         switch (ei[EI_CLASS]) {
  22         case ELFCLASS32:
  23                 printf("#define KERNEL_ELFCLASS ELFCLASS32\n");
  24                 break;
  25         case ELFCLASS64:
  26                 printf("#define KERNEL_ELFCLASS ELFCLASS64\n");
  27                 break;
  28         default:
  29                 exit(1);
  30         }
  31         switch (ei[EI_DATA]) {
  32         case ELFDATA2LSB:
  33                 printf("#define KERNEL_ELFDATA ELFDATA2LSB\n");
  34                 break;
  35         case ELFDATA2MSB:
  36                 printf("#define KERNEL_ELFDATA ELFDATA2MSB\n");
  37                 break;
  38         default:
  39                 exit(1);
  40         }
  41 
  42         if (sizeof(unsigned long) == 4) {
  43                 printf("#define HOST_ELFCLASS ELFCLASS32\n");
  44         } else if (sizeof(unsigned long) == 8) {
  45                 printf("#define HOST_ELFCLASS ELFCLASS64\n");
  46         }
  47 
  48         endian_test.s = 0x0102;
  49         if (memcmp(endian_test.c, "\x01\x02", 2) == 0)
  50                 printf("#define HOST_ELFDATA ELFDATA2MSB\n");
  51         else if (memcmp(endian_test.c, "\x02\x01", 2) == 0)
  52                 printf("#define HOST_ELFDATA ELFDATA2LSB\n");
  53         else
  54                 exit(1);
  55 
  56         return 0;
  57 }

/* [<][>][^][v][top][bottom][index][help] */