home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / threads / src / get_offsets.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  6KB  |  155 lines

  1. /* Copyright (C) 1992, the Florida State University
  2.    Distributed by the Florida State University under the terms of the
  3.    GNU Library General Public License.
  4.  
  5. This file is part of Pthreads.
  6.  
  7. Pthreads is free software; you can redistribute it and/or
  8. modify it under the terms of the GNU Library General Public
  9. License as published by the Free Software Foundation (version 2).
  10.  
  11. Pthreads is distributed "AS IS" in the hope that it will be
  12. useful, but WITHOUT ANY WARRANTY; without even the implied
  13. warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14. See the GNU Library General Public License for more details.
  15.  
  16. You should have received a copy of the GNU Library General Public
  17. License along with Pthreads; see the file COPYING.  If not, write
  18. to the Free Software Foundation, 675 Mass Ave, Cambridge,
  19. MA 02139, USA.
  20.  
  21. Report problems and direct all questions to:
  22.  
  23.   pthreads-bugs@ada.cs.fsu.edu
  24.  
  25.   @(#)get_offsets.c    2.5 4/12/95
  26.  
  27. */
  28.  
  29. /* Writes the offsets (to be used in assembly code) to the file
  30.  * "pthread_offsets.h".
  31.  */
  32.  
  33. #define PTHREAD_KERNEL
  34. #include "pthread_internals.h"
  35. #include "pthread_setjmp.h"
  36.  
  37. main()
  38. {
  39.   pthread_t p = NULL;
  40.   jmp_buf env;
  41.   sigjmp_buf sigenv;
  42.   pthread_mutex_t mutex;
  43.   cleanup_t cleanup;
  44. #ifndef C_CONTEXT_SWITCH
  45.   struct context_t *scp = NULL;
  46. #endif
  47.   
  48.   printf("/* Copyright (C) 1992, the Florida State University\n");
  49.   printf("   Distributed by the Florida State University under the terms of the\n");
  50.   printf("   GNU Library General Public License.\n");
  51.   printf("\n");
  52.   printf("This file is part of Pthreads.\n");
  53.   printf("\n");
  54.   printf("Pthreads is free software; you can redistribute it and/or\n");
  55.   printf("modify it under the terms of the GNU Library General Public\n");
  56.   printf("License as published by the Free Software Foundation (version 2).\n");
  57.   printf("\n");
  58.   printf("Pthreads is distributed \"AS IS\" in the hope that it will be\n");
  59.   printf("useful, but WITHOUT ANY WARRANTY; without even the implied\n");
  60.   printf("warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
  61.   printf("See the GNU Library General Public License for more details.\n");
  62.   printf("\n");
  63.   printf("You should have received a copy of the GNU Library General Public\n");
  64.   printf("License along with Pthreads; see the file COPYING.  If not, write\n");
  65.   printf("to the Free Software Foundation, 675 Mass Ave, Cambridge,\n");
  66.   printf("MA 02139, USA.\n");
  67.   printf("\n");
  68.   printf("Report problems and direct all questions to:\n");
  69.   printf("\n");
  70.   printf("  pthreads-bugs@ada.cs.fsu.edu\n");
  71.   printf("\n");
  72.   printf("  %@(#)get_offsets.c    2.5% %4/12/95%\n");
  73.   printf("*/\n");
  74.   printf("\n");
  75.  
  76.   printf("#if defined(LOCORE) || defined(_ASM)\n");
  77.   
  78.   /* Offsets in the TCB */
  79. #ifndef C_CONTEXT_SWITCH  
  80.   /* Offsets in the context structure */
  81.   printf("#define sp_offset %d\n", (int) &(p->context[JB_SP]) - (int) p);
  82.   printf("#define pc_offset %d\n", (int) &(p->context[JB_PC]) - (int) p);
  83.  
  84.   printf("#define thread_errno %d\n", (int) &p->errno - (int) p);
  85.   printf("#define stack_base %d\n", (int) &p->stack_base - (int) p);
  86.   printf("#define state %d\n", ((int) (&(p->state))) - ((int) p));
  87.   printf("#define nscp %d\n", (int) &p->nscp - (int) p);
  88. #endif
  89.   printf("#define mask %d\n", (int) &p->mask - (int) p);
  90. #ifndef C_CONTEXT_SWITCH  
  91.   printf("#define pending %d\n", (int) &p->pending - (int) p);
  92. #endif
  93. #ifdef STAND_ALONE
  94.   printf("#define queue %d\n", (int) &p->queue - (int) p);
  95.   printf("#define tp_sec %d\n", (int) &p->tp.tv_sec - (int) p);
  96.   printf("#define tp_nsec %d\n", (int) &p->tp.tv_nsec - (int) p);
  97. #endif
  98.   
  99.   /* Offsets in kernel structure */
  100.   printf("#define pthread_self %d\n", (int) &(mac_pthread_self()) - 
  101.                         (int) &pthread_kern);
  102. #ifndef C_CONTEXT_SWITCH  
  103.   printf("#define is_in_kernel %d\n", (int) &(is_in_kernel) - 
  104.                         (int) &pthread_kern);
  105.   printf("#define is_updating_timer %d\n", (int) &(is_updating_timer) - 
  106.                         (int) &pthread_kern);
  107.   printf("#define state_change %d\n", (int) &(state_change) - 
  108.                         (int) &pthread_kern);
  109.   printf("#define new_signals %d\n", (int) &(new_signals) - (int)&pthread_kern);
  110.   printf("#define pending_signals %d\n",(int) &(pending_signals) - 
  111.                         (int) &pthread_kern);
  112.   printf("#define all_signals %d\n",(int) &(all_signals) - (int) &pthread_kern);
  113.   printf("#define no_signals %d\n",(int) &(no_signals) - (int) &pthread_kern);
  114. #endif
  115.   printf("#define cantmask %d\n",(int) &(cantmask) - (int) &pthread_kern);
  116. #ifndef C_CONTEXT_SWITCH
  117.   printf("#define process_stack_base %d\n",
  118.      (int) &(process_stack_base) - (int) &pthread_kern);
  119.   printf("#define ready %d\n", (int) &(ready) - (int) &pthread_kern);
  120.   printf("#define ready_head %d\n", (int) &(ready.head) - (int) &pthread_kern);
  121.   printf("#define sched %d\n",(int) &ready.head->attr.sched);
  122.   printf("#define TV_SEC %d\n", (int)&(timeofday.tv_sec) - (int) &pthread_kern);
  123.   printf("#define TV_NSEC %d\n",(int)&(timeofday.tv_nsec) - (int)&pthread_kern);
  124.  
  125.   /* Offsets in context_t structure */
  126.   printf("#define sc_mask %d\n", (int) &scp->sc_mask - (int) scp);
  127.   printf("#define sc_sp %d\n", (int) &scp->sc_sp - (int) scp);
  128.   printf("#define sc_pc %d\n", (int) &scp->sc_pc - (int) scp);
  129. #endif
  130.  
  131.   /* Offsets in jmp_buf structure */
  132.   printf("#define jmp_svmask %d\n", (int) &env[JB_SVMASK] - (int) env);
  133.   printf("#define jmp_pc %d\n", (int) &env[JB_PC] - (int) env);
  134.   printf("#define jmp_sp %d\n", (int) &env[JB_SP] - (int) env);
  135.   printf("#define jmp_mask %d\n", (int) &env[JB_MASK] - (int) env);
  136.  
  137.   /* Offsets in sigjmp_buf structure */
  138.   printf("#define mutex_queue %d\n", (int) &mutex.queue - (int) &mutex);
  139.   printf("#define mutex_lock  %d\n", (int) &mutex.lock  - (int) &mutex);
  140.   printf("#define mutex_owner %d\n", (int) &mutex.owner - (int) &mutex);
  141. #ifdef _POSIX_THREADS_PRIO_PROTECT
  142.   printf("#define mutex_protocol %d\n", (int) &mutex.protocol - (int) &mutex);
  143. #endif
  144.   
  145.   /* Size of cleanup structure */
  146.   printf("#define cleanup_size %d\n", sizeof(*cleanup));
  147.  
  148.   /* Size of sigset_t structure */
  149.   printf("#define sigset_t_size %d\n", sizeof(sigset_t));
  150.  
  151.   printf("#endif defined(LOCORE) || defined(_ASM)\n");
  152.  
  153.   return(0);
  154. }
  155.