Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
9.4 KiB

  1. @REM -----------------------------------------------------------------
  2. @REM
  3. @REM ntrebase.cmd - BryanT
  4. @REM rebase NT binaries
  5. @REM
  6. @REM Copyright (c) Microsoft Corporation. All rights reserved.
  7. @REM
  8. @REM -----------------------------------------------------------------
  9. @if defined _CPCMAGIC goto CPCBegin
  10. @perl -x "%~f0" %*
  11. @goto :EOF
  12. #!perl
  13. use strict;
  14. use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts";
  15. use lib $ENV{RAZZLETOOLPATH};
  16. use PbuildEnv;
  17. use ParseArgs;
  18. sub Usage { print<<USAGE; exit(1) }
  19. ntrebase [-l <language>]
  20. Rebase NT binaries
  21. USAGE
  22. parseargs('?' => \&Usage
  23. );
  24. # *** TEMPLATE CODE ***
  25. $ENV{"_CPCMAGIC"}++;exit(system($0)>>8);
  26. __END__
  27. @:CPCBegin
  28. @set _CPCMAGIC=
  29. @setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
  30. @if not defined DEBUG echo off
  31. @REM *** CMD SCRIPT BELOW ***
  32. set DO_WOW6432=FALSE
  33. set REBASE_OS_HIGH=FALSE
  34. set _REBASE_FLAGS=%_NTREBASE_FLAGS%
  35. if not "%_REBASE_FLAGS%" == "" echo Using flags from _NTREBASE_FLAGS == "%_NTREBASE_FLAGS%"
  36. if "%_REBASE_FLAGS%" == "" set _REBASE_FLAGS=-v
  37. if not "%1" == "" set _REBASE_FLAGS=%1 %2 %3 %4 %5 %6 %7 %8 %9
  38. if "%_NTPostBld%" == "" echo _NTPostBld not defined && goto :EOF
  39. set _TREE=%_NTPostBld%
  40. if /i "%_buildarch%" == "x86" goto X86
  41. if /i "%_buildarch%" == "ia64" goto IA64
  42. if /i "%_buildarch%" == "amd64" goto AMD64
  43. echo Unknown Build Architecture
  44. goto :EOF
  45. :X86
  46. set _SESSION_REBASE_ADDRESS=0xBFFF0000
  47. set _OS_DLL_REBASE_ADDRESS=0x78000000
  48. set DO_WOW6432=TRUE
  49. if defined _COVERAGE_BUILD (
  50. rem KenMa was using 0x28000000
  51. set _OS_DLL_REBASE_ADDRESS=0x28000000
  52. )
  53. goto :OK
  54. :IA64
  55. set _SESSION_REBASE_ADDRESS=0x20000001FFFF0000
  56. set _OS_DLL_REBASE_ADDRESS=0x000006fb7FFF0000
  57. set _WOW64_DLL_REBASE_ADDRESS=0x0000000078000000
  58. set REBASE_OS_HIGH=TRUE
  59. goto :OK
  60. :AMD64
  61. set _SESSION_REBASE_ADDRESS=0x00000001FFFF0000
  62. set _OS_DLL_REBASE_ADDRESS=0x000007FFFFFF0000
  63. set _WOW64_DLL_REBASE_ADDRESS=0x0000000078000000
  64. set REBASE_OS_HIGH=TRUE
  65. goto :OK
  66. :OK
  67. set QFE_BADDR=%RazzleToolPath%\PostBuildScripts\baseaddress.%_BuildArch%.%_BuildType%.%Lang%
  68. if defined _COVERAGE_BUILD (
  69. REM Set QFE_BADDR to some bogus value for coverage scripts
  70. set QFE_BADDR=%temp%\rebasefoobarbaz.txt
  71. if exist %QFE_BADDR% del %QFE_BADDR%
  72. )
  73. set REBASE_ADDR_FILE=%_TREE%\build_logs\rebase.addresses.txt
  74. if exist %QFE_BADDR% (
  75. set NO_REBASE_FUDGE=1
  76. @if exist %REBASE_ADDR_FILE% del %REBASE_ADDR_FILE%
  77. @for /f "tokens=1,2,3" %%i in (%QFE_BADDR%) do @(
  78. if /I NOT "%%k" == "OPEN" (
  79. echo %%i %%j %_TREE%\%%k>>%REBASE_ADDR_FILE%
  80. )
  81. )
  82. )
  83. if defined NtRebase_SkipImageCfg goto ImageCfgFinished
  84. REM ------------------------------------------------
  85. REM Mark Winnt32 binaries as net run from swapfile and cd run from swapfile
  86. REM ------------------------------------------------
  87. for /f %%i in ('dir /s /b %_TREE%\winnt32\*.dll %_TREE%\winnt32\*.exe') do imagecfg /q -x -y %%i
  88. for /f %%i in ('dir /s /b %_TREE%\winnt32\winntupg\*.dll %_TREE%\winnt32\winntupg\*.exe') do imagecfg /q -x -y %%i
  89. REM ------------------------------------------------
  90. REM Set Terminal Server compatible bit on all exes
  91. REM ------------------------------------------------
  92. set _TSCOMPAT_PATHS=
  93. set _TSCOMPAT_SYMBOL_TREES=%_TREE%\Symbols\retail;%_TREE%\Symbols\system32;%_TREE%\Symbols\mstools;%_TREE%\Symbols\idw;%_TREE%\Symbols\winnt32
  94. set _TSCOMPAT_PATHS=%_TSCOMPAT_PATHS% %_TREE%\*.exe %_TREE%\system32\*.exe %_TREE%\mstools\*.exe %_TREE%\idw\*.exe %_TREE%\winnt32\*.exe
  95. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 1 %_TSCOMPAT_PATHS%
  96. REM Do not set bit on the following exes
  97. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 0 %_TREE%\ntvdm.exe
  98. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 0 %_TREE%\regini.exe
  99. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 0 %_TREE%\idw\regini.exe
  100. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 0 %_TREE%\winhlp32.exe
  101. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 0 %_TREE%\winhstb.exe
  102. imagecfg /q /S %_TSCOMPAT_SYMBOL_TREES% /h 0 %_TREE%\acregl.exe
  103. :ImageCfgFinished
  104. echo Rebasing images in %_TREE%
  105. set _REBASE_SYMS=
  106. set _REBASE_LOG=%_TREE%\build_logs\rebase.log
  107. mkdir %_TREE%\build_logs >nul 2>&1
  108. set _REBDIR=%RazzleToolPath%\PostBuildScripts
  109. set _REBASE_SYMBOL_TREES=%_TREE%\Symbols\retail;%_TREE%\Symbols\winnt32
  110. REM
  111. REM only rebase usa asms (they are all actually world wide)
  112. REM
  113. if /i "%LANG%" neq "usa" set FilterOutAsmsIfNotUsa=asms\
  114. :CalculateRebaseTargets
  115. set RebaseList=%_TREE%\build_logs\rebase.targets.txt
  116. if exist %RebaseList% del %RebaseList%
  117. for %%i in (dll drv cpl ocx acm ax tsp) do @(
  118. for /f %%x in ('findstr /v "netfx win9xupg win9xmig %FilterOutAsmsIfNotUsa% " %_TREE%\congeal_scripts\exts\%%i_files.lst ^| sort') do @(
  119. echo %_TREE%\%%x>>%RebaseList%
  120. )
  121. )
  122. set _REBPATHS=@%RebaseList%
  123. REM -------------------------------------------------------
  124. REM There are duplications between binaries and the tools directories.
  125. REM So, rebase the tools separately.
  126. REM -------------------------------------------------------
  127. set _REBPATHS_SYS32=%_TREE%\system32\*.dll
  128. set _REBPATHS_MSTOOLS=%_TREE%\mstools\*.dll
  129. set _REBPATHS_IDW=%_TREE%\idw\*.dll
  130. set _REBASE_SYMS_SYS32=-u %_TREE%\symbols\system32
  131. set _REBASE_SYMS_MSTOOLS=-u %_TREE%\symbols\mstools
  132. set _REBASE_SYMS_IDW=-u %_TREE%\symbols\idw
  133. REM set _REBPATHS=%_REBPATHS% %_TREE%\dump\*.dll
  134. REM set _REBASE_SYMBOL_TREES=%_REBASE_SYMBOL_TREES%;%_TREE%\Symbols\dump
  135. if NOT EXIST %_TREE%\Symbols\nul goto nodbgfiles
  136. set _REBASE_SYMS=-u %_REBASE_SYMBOL_TREES%
  137. REM
  138. REM Added by wadela to help debug incremental postbuild
  139. REM
  140. set _REBASE_LOG_BAK=%_TREE%\build_logs\"rebase.bak-%DATE:/=.% %TIME::=.%"
  141. set _REBASE_LOG_BAK=%_REBASE_LOG_BAK: =_%
  142. if exist %_REBASE_LOG% copy %_REBASE_LOG% %_REBASE_LOG_BAK%
  143. echo ... updating .DBG files in %_REBASE_SYMBOL_TREES%
  144. :nodbgfiles
  145. erase %_REBASE_LOG%
  146. set _REBASE_FLAGS=%_REBASE_FLAGS% -l %_REBASE_LOG%
  147. REM
  148. REM Allow at least 8k of growth in the image size
  149. REM
  150. if "%NO_REBASE_FUDGE%" == "" (
  151. set _REBASE_FLAGS=%_REBASE_FLAGS% -e 0x2000
  152. )
  153. REM ------------------------------------------------
  154. REM rebase the dlls.
  155. REM ------------------------------------------------
  156. REM do not rebase the csr, wow, or mail dlls.
  157. set _REBASE_EXCLUDES=
  158. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\kbd.reb
  159. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\ntvdm.reb
  160. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\never.reb
  161. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\ts.reb
  162. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\csp.reb
  163. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\frozen_asms.reb
  164. if "%REBASE_OS_HIGH%" == "TRUE" (
  165. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\wow64.reb
  166. )
  167. REM Weed out known files that don't exist on this architecture.
  168. set KnownFiles=%_TREE%\build_logs\rebase.known.reb
  169. del %KnownFiles% >nul 2>&1
  170. for /f %%i in (%_REBDIR%\known.reb) do (
  171. if exist %_TREE%\%%i echo %%i>> %KnownFiles%
  172. )
  173. set _REBASE_GROUPS=-G %KnownFiles%
  174. REM asms are only rebased for usa (since they are all actually "world wide")
  175. REM -G is for grouping together "popular" .dlls, like comctl v6, to conserve address space.
  176. if /i "%LANG%" equ "usa" set _REBASE_GROUPS=%_REBASE_GROUPS% -G %_REBDIR%\known_asms.reb
  177. if exist %QFE_BADDR% (
  178. rebase %_REBASE_SYMS% %_REBASE_FLAGS% @@%REBASE_ADDR_FILE%
  179. ) else (
  180. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b %_OS_DLL_REBASE_ADDRESS% -R %_TREE% %_REBASE_EXCLUDES% %_REBASE_GROUPS% %_REBPATHS%
  181. if "%REBASE_OS_HIGH%" == "TRUE" (
  182. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b %_WOW64_DLL_REBASE_ADDRESS% -R %_TREE% -G %_REBDIR%\wow64.reb
  183. )
  184. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b 0x60000000 -R %_TREE% -O %_REBDIR%\kbd.reb
  185. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b 0x10000000 -R %_TREE% -G %_REBDIR%\ntvdm.reb
  186. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b 0x10000000 -R %_TREE% -G %_REBDIR%\csp.reb
  187. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -z -d -b %_SESSION_REBASE_ADDRESS% -R %_TREE% %_TREE%\atmfd.dll %_TREE%\dxg.sys %_TREE%\rdpdd.dll %_TREE%\tsddd.dll -O %_REBDIR%\ts.reb
  188. )
  189. rebase %_REBASE_SYMS_SYS32% %_REBASE_FLAGS% -d -b 0x50000000 -R %_TREE% %_REBPATHS_SYS32%
  190. rebase %_REBASE_SYMS_MSTOOLS% %_REBASE_FLAGS% -d -b 0x4c000000 -R %_TREE% %_REBPATHS_MSTOOLS%
  191. rebase %_REBASE_SYMS_IDW% %_REBASE_FLAGS% -d -b 0x48000000 -R %_TREE% %_REBPATHS_IDW%
  192. REM
  193. REM --------------------------------------------------------------------
  194. REM Rebase Wow6432 binaries higher to avoid overlap with native X86 binaries
  195. REM --------------------------------------------------------------------
  196. if "%DO_WOW6432%" == "FALSE" goto SkipWow6432
  197. REM Sleep to keep timestamps of wow6432 binaries different than native binaries
  198. REM so that binding doesn't get confused.
  199. sleep 2
  200. if exist %QFE_BADDR% goto SkipWOW6432
  201. set _REBASE_EXCLUDES=
  202. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\kbd.reb
  203. set _REBASE_EXCLUDES=%_REBASE_EXCLUDES% -N %_REBDIR%\frozen_asms.reb
  204. set _REBPATHS=%_TREE%\wow6432\*.dll
  205. if /i "%LANG%" equ "usa" for /f %%i in ('dir /s/b/ad %_TREE%\wow6432\asms') do set _REBPATHS=!_REBPATHS! %%i\*.dll
  206. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b 0x7E000000 -R %_TREE%\wow6432 %_REBASE_EXCLUDES% %_REBPATHS%
  207. rebase %_REBASE_SYMS% %_REBASE_FLAGS% -d -b 0x60000000 -R %_TREE%\wow6432 -O %_REBDIR%\kbd.reb
  208. :SkipWow6432
  209. :end
  210. seterror.exe "%errors%"& goto :EOF