home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / e20313sr.zip / emacs / 20.3.1 / src / w32heap.h < prev    next >
C/C++ Source or Header  |  1999-07-31  |  4KB  |  117 lines

  1. /* Heap management routines (including unexec) for GNU Emacs on Windows NT.
  2.    Copyright (C) 1994 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU Emacs.
  5.  
  6. GNU Emacs is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU Emacs is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU Emacs; see the file COPYING.  If not, write to
  18. the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  19. Boston, MA 02111-1307, USA.
  20.  
  21.    Geoff Voelker (voelker@cs.washington.edu)                 7-29-94
  22. */
  23.  
  24. #ifndef NTHEAP_H_
  25. #define NTHEAP_H_
  26.  
  27. #include <windows.h>
  28.  
  29. /*
  30.  * Heap related stuff.
  31.  */
  32. #define get_reserved_heap_size()    reserved_heap_size
  33. #define get_committed_heap_size()    (get_data_end () - get_data_start ())
  34. #define get_heap_start()        get_data_start ()
  35. #define get_heap_end()            get_data_end ()
  36. #define get_page_size()            sysinfo_cache.dwPageSize
  37. #define get_allocation_unit()        sysinfo_cache.dwAllocationGranularity
  38. #define get_processor_type()        sysinfo_cache.dwProcessorType
  39. #define get_w32_major_version()      w32_major_version
  40. #define get_w32_minor_version()      w32_minor_version
  41.  
  42. extern unsigned char *get_data_start();
  43. extern unsigned char *get_data_end();
  44. extern unsigned long  data_region_size;
  45. extern unsigned long  reserved_heap_size;
  46. extern SYSTEM_INFO    sysinfo_cache;
  47. extern BOOL             need_to_recreate_heap;
  48. extern int              w32_major_version;
  49. extern int              w32_minor_version;
  50.  
  51. enum {
  52.   OS_WIN95 = 1,
  53.   OS_NT
  54. };
  55.  
  56. extern int os_subtype;
  57.  
  58. /* Emulation of Unix sbrk().  */
  59. extern void *sbrk (unsigned long size);
  60.  
  61. /* Recreate the heap created during dumping.  */
  62. extern void recreate_heap (char *executable_path);
  63.  
  64. /* Round the heap to this size.  */
  65. extern void round_heap (unsigned long size);
  66.  
  67. /* Load in the dumped .bss section.  */
  68. extern void read_in_bss (char *name);
  69.  
  70. /* Map in the dumped heap.  */
  71. extern void map_in_heap (char *name);
  72.  
  73. /* Cache system info, e.g., the NT page size.  */
  74. extern void cache_system_info (void);
  75.  
  76. /* Round ADDRESS up to be aligned with ALIGN.  */
  77. extern unsigned char *round_to_next (unsigned char *address, 
  78.                      unsigned long align);
  79.  
  80. /* Report a fatal error during dumped heap management.  */
  81. void w32_fatal_reload_error (char *step);
  82.  
  83. /* ----------------------------------------------------------------- */
  84. /* Useful routines for manipulating memory-mapped files. */
  85.  
  86. typedef struct file_data {
  87.     char          *name;
  88.     unsigned long  size;
  89.     HANDLE         file;
  90.     HANDLE         file_mapping;
  91.     unsigned char *file_base;
  92. } file_data;
  93.  
  94. #define OFFSET_TO_RVA(var,section) \
  95.       (section->VirtualAddress + ((DWORD)(var) - section->PointerToRawData))
  96.  
  97. #define RVA_TO_OFFSET(var,section) \
  98.       (section->PointerToRawData + ((DWORD)(var) - section->VirtualAddress))
  99.  
  100. #define RVA_TO_PTR(var,section,filedata) \
  101.       ((void *)(RVA_TO_OFFSET(var,section) + (filedata).file_base))
  102.  
  103. int open_input_file (file_data *p_file, char *name);
  104. int open_output_file (file_data *p_file, char *name, unsigned long size);
  105. void close_file_data (file_data *p_file);
  106.  
  107. unsigned long get_section_size (PIMAGE_SECTION_HEADER p_section);
  108.  
  109. /* Return pointer to section header for named section. */
  110. IMAGE_SECTION_HEADER * find_section (char * name, IMAGE_NT_HEADERS * nt_header);
  111.  
  112. /* Return pointer to section header for section containing the given
  113.    relative virtual address. */
  114. IMAGE_SECTION_HEADER * rva_to_section (DWORD rva, IMAGE_NT_HEADERS * nt_header);
  115.  
  116. #endif /* NTHEAP_H_ */
  117.