dataSegPad.c
上传用户:dqzhongke1
上传日期:2022-06-26
资源大小:667k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* dataSegPad.c - padding for beginning of data segment */
  2. /* Copyright 1984-2004 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01g,27sep04,tam  replaced INCLUDE_EDR_KH by INCLUDE_KERNEL_HARDENING
  8. 01f,02sep04,pes  Conditionalize the alignment of dataSegPad
  9. 01e,08jun04,tam  added EDR_KH handling
  10. 01d,03may04,tam  updated data segment alignment code
  11. 01c,19oct92,jcf  change to include when INCLUDE_MMU_FULL defined.
  12. 01b,28jul92,rdc  changed PAGE_SIZE to VM_PAGE_SIZE.
  13. 01a,21jul92,rdc  written.
  14. */
  15. /*
  16. DESCRIPTION
  17. This module conditionally defined the variable dataSegPad which is aligned
  18. on a MMU page size biundary by default; it is explicility listed as the first
  19. module on the load line when VxWorks is linked to insure that this data
  20. structure is the first item in the data segment. This mechanism is needed
  21. to insure that the data segment does not overlap a page that is occupied
  22. by the text segment;  when text segment protection is turned on, all pages
  23. that contain text are write protected. This insures that the data segment
  24. does not lie in a page that has been write protected. If text segment
  25. protection has not been included, this module compiles into a null object
  26. module. Note that if the data segment needs to be aligned on a boundary
  27. larger than an MMU page size, then KERNEL_DATA_SEG_ALIGN should be defined
  28. to that alignment, otherwise it defaults to a MMU page size (VM_PAGE_SIZE).
  29. In an embedded system, this mechanism may not be needed if the loader
  30. explicitly places the data segment in a section of memory seperate from
  31. the text segment.
  32. */
  33. #include "vxWorks.h"
  34. #include "config.h"
  35. #if !defined (_WRS_LINKER_DATA_SEG_ALIGN)
  36. /*
  37.  * TODO: When SPR96639, filed against the DIAB toolchain, is fixed, the code in
  38.  * between #ifndef SPR96639_FIXED ...  #endif should be removed.
  39.  */
  40. #ifndef SPR96639_FIXED
  41. typedef struct kernelDataSeg{
  42.     char data1;
  43.     char data2;
  44. } KERNEL_DATA_SEG;
  45. #endif /* SPR96639_FIXED */
  46. #ifndef KERNEL_DATA_SEG_ALIGN
  47. #define KERNEL_DATA_SEG_ALIGN VM_PAGE_SIZE
  48. #endif /* KERNEL_DATA_SEG_ALIGN */
  49. #if (defined(INCLUDE_PROTECT_TEXT) || defined(INCLUDE_KERNEL_HARDENING))
  50. /* bootroms will not ref dataSegPad.o */
  51. #ifndef SPR96639_FIXED /* code to use when SPR #96639 is fixed */
  52. KERNEL_DATA_SEG _WRS_DATA_ALIGN_BYTES(KERNEL_DATA_SEG_ALIGN) dataSegPad[1] = {{1}};
  53. #else
  54. char   _WRS_DATA_ALIGN_BYTES(KERNEL_DATA_SEG_ALIGN) dataSegPad = 1;
  55. #endif /* SPR96639_FIXED */
  56. #endif /* INCLUDE_PROTECT_TEXT */
  57. #else /* _WRS_LINKER_DATA_SEG_ALIGN */
  58. /*
  59.  * declaration for architectures that use the linker to ensure proper data
  60.  * segment alignment.
  61.  */
  62. char   dataSegPad = 1;
  63. #endif /* _WRS_LINKER_DATA_SEG_ALIGN */