root/mtcp/mtcp_header.h

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

INCLUDED FROM


   1 #ifndef MTCP_HEADER_H
   2 #define MTCP_HEADER_H
   3 
   4 #include "ldt.h"
   5 
   6 #ifdef __i386__
   7 typedef unsigned short segreg_t;
   8 #elif __x86_64__
   9 typedef unsigned short segreg_t;
  10 #elif __arm__
  11 typedef unsigned int segreg_t;
  12 #elif defined(__aarch64__)
  13 typedef unsigned long int segreg_t;
  14 #endif
  15 
  16 /* TLS segment registers used differently in i386 and x86_64. - Gene */
  17 #ifdef __i386__
  18 # define TLSSEGREG gs
  19 #elif __x86_64__
  20 # define TLSSEGREG fs
  21 #elif (__arm__ || __aarch64__)
  22 /* FIXME: fs IS NOT AN arm REGISTER.  BUT THIS IS USED ONLY AS A FIELD NAME.
  23  *   ARM uses a register in coprocessor 15 as the thread-pointer (TLS Register)
  24  */
  25 # define TLSSEGREG fs
  26 #endif
  27 
  28 #if defined(__x86_64__) || defined(__aarch64__)
  29 # define MYINFO_GS_T unsigned long int
  30 #else
  31 # define MYINFO_GS_T unsigned int
  32 #endif
  33 
  34 typedef struct _ThreadTLSInfo {
  35   segreg_t fs, gs;  // thread local storage pointers
  36   struct user_desc gdtentrytls[1];
  37 } ThreadTLSInfo;
  38 
  39 #define MTCP_SIGNATURE "MTCP_HEADER_v2.2\n"
  40 #define MTCP_SIGNATURE_LEN 32
  41 typedef union _MtcpHeader {
  42   struct {
  43     char signature[MTCP_SIGNATURE_LEN];
  44     void *saved_brk;
  45     void *restore_addr;
  46     size_t restore_size;
  47     void *vdsoStart;
  48     void *vdsoEnd;
  49     void *vvarStart;
  50     void *vvarEnd;
  51     void (*post_restart) ();
  52     ThreadTLSInfo motherofall_tls_info;
  53     int tls_pid_offset;
  54     int tls_tid_offset;
  55     MYINFO_GS_T myinfo_gs;
  56   };
  57 
  58   char _padding[4096];
  59 } MtcpHeader;
  60 
  61 #endif

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