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-686 / scripts / mod / modpost.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.3 KB  |  142 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5. #include <sys/types.h>
  6. #include <sys/stat.h>
  7. #include <sys/mman.h>
  8. #include <fcntl.h>
  9. #include <unistd.h>
  10. #include <elf.h>
  11.  
  12. #include "elfconfig.h"
  13.  
  14. #if KERNEL_ELFCLASS == ELFCLASS32
  15.  
  16. #define Elf_Ehdr    Elf32_Ehdr
  17. #define Elf_Shdr    Elf32_Shdr
  18. #define Elf_Sym     Elf32_Sym
  19. #define Elf_Addr    Elf32_Addr
  20. #define Elf_Section Elf32_Section
  21. #define ELF_ST_BIND ELF32_ST_BIND
  22. #define ELF_ST_TYPE ELF32_ST_TYPE
  23.  
  24. #define Elf_Rel     Elf32_Rel
  25. #define Elf_Rela    Elf32_Rela
  26. #define ELF_R_SYM   ELF32_R_SYM
  27. #define ELF_R_TYPE  ELF32_R_TYPE
  28. #else
  29.  
  30. #define Elf_Ehdr    Elf64_Ehdr
  31. #define Elf_Shdr    Elf64_Shdr
  32. #define Elf_Sym     Elf64_Sym
  33. #define Elf_Addr    Elf64_Addr
  34. #define Elf_Section Elf64_Section
  35. #define ELF_ST_BIND ELF64_ST_BIND
  36. #define ELF_ST_TYPE ELF64_ST_TYPE
  37.  
  38. #define Elf_Rel     Elf64_Rel
  39. #define Elf_Rela    Elf64_Rela
  40. #define ELF_R_SYM   ELF64_R_SYM
  41. #define ELF_R_TYPE  ELF64_R_TYPE
  42. #endif
  43.  
  44. /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
  45. typedef struct
  46. {
  47.     Elf32_Word    r_sym;    /* Symbol index */
  48.     unsigned char r_ssym;    /* Special symbol for 2nd relocation */
  49.     unsigned char r_type3;    /* 3rd relocation type */
  50.     unsigned char r_type2;    /* 2nd relocation type */
  51.     unsigned char r_type1;    /* 1st relocation type */
  52. } _Elf64_Mips_R_Info;
  53.  
  54. typedef union
  55. {
  56.     Elf64_Xword        r_info_number;
  57.     _Elf64_Mips_R_Info    r_info_fields;
  58. } _Elf64_Mips_R_Info_union;
  59.  
  60. #define ELF64_MIPS_R_SYM(i) \
  61.   ((__extension__ (_Elf64_Mips_R_Info_union)(i)).r_info_fields.r_sym)
  62.  
  63. #if KERNEL_ELFDATA != HOST_ELFDATA
  64.  
  65. static inline void __endian(const void *src, void *dest, unsigned int size)
  66. {
  67.     unsigned int i;
  68.     for (i = 0; i < size; i++)
  69.         ((unsigned char*)dest)[i] = ((unsigned char*)src)[size - i-1];
  70. }
  71.  
  72. #define TO_NATIVE(x)                        \
  73. ({                                \
  74.     typeof(x) __x;                        \
  75.     __endian(&(x), &(__x), sizeof(__x));            \
  76.     __x;                            \
  77. })
  78.  
  79. #else /* endianness matches */
  80.  
  81. #define TO_NATIVE(x) (x)
  82.  
  83. #endif
  84.  
  85. #define NOFAIL(ptr)   do_nofail((ptr), #ptr)
  86. void *do_nofail(void *ptr, const char *expr);
  87.  
  88. struct buffer {
  89.     char *p;
  90.     int pos;
  91.     int size;
  92. };
  93.  
  94. void __attribute__((format(printf, 2, 3)))
  95. buf_printf(struct buffer *buf, const char *fmt, ...);
  96.  
  97. void
  98. buf_write(struct buffer *buf, const char *s, int len);
  99.  
  100. struct module {
  101.     struct module *next;
  102.     const char *name;
  103.     struct symbol *unres;
  104.     int seen;
  105.     int skip;
  106.     int has_init;
  107.     int has_cleanup;
  108.     struct buffer dev_table_buf;
  109.     char         srcversion[25];
  110. };
  111.  
  112. struct elf_info {
  113.     unsigned long size;
  114.     Elf_Ehdr     *hdr;
  115.     Elf_Shdr     *sechdrs;
  116.     Elf_Sym      *symtab_start;
  117.     Elf_Sym      *symtab_stop;
  118.     const char   *strtab;
  119.     char         *modinfo;
  120.     unsigned int modinfo_len;
  121. };
  122.  
  123. /* file2alias.c */
  124. void handle_moddevtable(struct module *mod, struct elf_info *info,
  125.             Elf_Sym *sym, const char *symname);
  126. void add_moddevtable(struct buffer *buf, struct module *mod);
  127.  
  128. /* sumversion.c */
  129. void maybe_frob_rcs_version(const char *modfilename,
  130.                 char *version,
  131.                 void *modinfo,
  132.                 unsigned long modinfo_offset);
  133. void get_src_version(const char *modname, char sum[], unsigned sumlen);
  134.  
  135. /* from modpost.c */
  136. void *grab_file(const char *filename, unsigned long *size);
  137. char* get_next_line(unsigned long *pos, void *file, unsigned long size);
  138. void release_file(void *file, unsigned long size);
  139.  
  140. void fatal(const char *fmt, ...);
  141. void warn(const char *fmt, ...);
  142.