Created
August 15, 2016 07:18
-
-
Save jpluimers/bc35a0448ba63d76de4ba2b61e8be0e4 to your computer and use it in GitHub Desktop.
Find out which units actually make it into your Delphi EXE file (i.e. not eliminated by the linker)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
if ["%*"]==[] goto :help | |
:logic | |
if not exist %1 goto :notExist | |
setlocal | |
:: do not use periods (.) in delims as unit names may contain them! | |
:: it might be that the segment (%%a) for C=CODE/S=.text/G=(none)/M=*/ACBP=A9 is always 0001 | |
:: it might be that the segment (%%a) for C=ICODE/S=.itext/G=(none)/M=*/ACBP=A9 is always 0002 | |
:: it might be that the segment (%%a) for C=DATA/S=.data/G=DGROUP/M=*/ACBP=A9 is always 0003 | |
:: it might be that the segment (%%a) for C=BSS/S=.bss/G=DGROUP/M=*/ACBP=A9 is always 0004 | |
:: it might be that the segment (%%a) for C=TLS/S=.tls/G=(none)/M=*/ACBP=A9 is always 0005 | |
:: the `if ["%%h"]==["(none)"] ` trick is to prevent this error: | |
:: ) was unexpected at this time. | |
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,* delims=()= " %%a IN (%1) do ( | |
if [%%c]==[C] if [%%e]==[S] if [%%g]==[G] if [%%i]==[M] if [%%k]==[ACBP] if [%%l]==[A9] if [%%m]==[] ( | |
if [%%d]==[CODE] if [%%f]==[.text] if ["%%h"]==["(none)"] echo %%j | |
if [%%d]==[ICODE] if [%%f]==[.itext] if ["%%h"]==["(none)"] echo %%j | |
if [%%d]==[DATA] if [%%f]==[.data] if ["%%h"]==["DGROUP"] echo %%j | |
if [%%d]==[BSS] if [%%f]==[.bss] if ["%%h"]==["DGROUP"] echo %%j | |
if [%%d]==[TLS] if [%%f]==[.tls] if ["%%h"]==["(none)"] echo %%j | |
) | |
if [%%a]==[line] if [%%b]==[numbers] if [%%c]==[for] if [%%f]==[segment] if [%%g]==[.text] if [%%h]==[] ( | |
echo %%d | |
) | |
) | |
endlocal | |
goto :eof | |
echo a=%%a;b=%%b;b=%%b;c=%%c;d=%%d;e=%%e;f=%%f;g=%%g;h=%%h;i=%%i;j=%%j;k=%%k;l=%%l;m=%%m;n=%%n | |
if [%%c]==[C] if [%%d]==[CODE] if [%%e]==[S] if [%%f]==[.text] if [%%g]==[G] if ["%%h"]==["(none)"] if [%%i]==[M] if [%%k]==[ACBP] if [%%l]==[A9] if [%%m]==[] echo %%j | |
:notExist | |
echo %* does not exist. | |
:help | |
echo syntax: %0 MAP-file | |
echo will list all the Delphi units that got compiled into your EXE in a non-sorted non-unique way | |
goto :eof |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment