home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / scripts / mod / mk_elfconfig.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-21  |  1.4 KB  |  66 lines

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