Detailed-Segments Map File
Go Up to Map Debug File
A detailed-segments map file is a map file the most comprehensive map file, which includes a detailed map of segments.
Generating a Detailed-Segments Map File
On Delphi, to enable the generation of a detailed-segments map file by DCC32 (32-bit Windows), DCC64 (64-bit Windows), macOS ARM 64-bit, macOS 64-bit or iOS Device 64-bit select Project > Options > Delphi Compiler > Linking and change the value of "Map file" to "Detailed".
On C++, to enable the generation of a detailed-segments map file by ILINK32 (32-bit Windows), ILINK64 (64-bit Windows), select Project > Options > C++ Linker > Output and change the value of "Map file type" to "Detailed segments map". On the command line, you can use the -s
switch.
Format of Detailed-Segments Map Files
The content of a regular map file may look as follows:
Start Length Name Class 0001:00401000 0000214D4H _TEXT CODE 0002:00423000 0000059B8H _DATA DATA 0003:004289B8 000002F24H _BSS BSS 0004:00000000 00000009CH _TLS TLS Detailed map of segments 0001:000000E4 00001038 C=CODE S=_TEXT G=(none) M=C:\TEMP\HELLO\HELLO.OBJ ACBP=A9 0001:0000111C 0000014F C=CODE S=_TEXT G=(none) M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9 . . . 0001:0001F484 00001F24 C=CODE S=_TEXT G=(none) M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9 0002:00000000 000001E8 C=DATA S=_DATA G=DGROUP M=C:\TEMP\HELLO\HELLO.OBJ ACBP=A9 0002:000001E8 000000C8 C=DATA S=_DATA G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\C0X32.OBJ ACBP=A9 . . . 0002:00004FD8 000009E0 C=DATA S=_DATA G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9 0003:00000000 00000244 C=BSS S=_BSS G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\CW32.LIB|iostream ACBP=A9 . . . 0003:00002F04 00000020 C=BSS S=_BSS G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\CW32.LIB|xx ACBP=A9 0004:00000000 0000009C C=TLS S=_TLS G=DGROUP M=C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\23.0\LIB\WIN32\RELEASE\CW32.LIB|xxv ACBP=A9 Address Publics by Name 0002:000024C4 @std@%basic_filebuf$b19std@%char_traits$b%%@3 0002:000010E8 @std@%basic_filebuf$c19std@%char_traits$c%%@3 0002:00002450 @std@%basic_ios$b19std@%char_traits$b%%@3 . . . Address Publics by Value 0001:000000E4 _main 0001:00000730 std::allocator<char>::allocator<char>() . . .
A detailed-segments map file inserts a new section into the map file, called Detailed map of segments. The detailed list of segments contains (for every line):
- The start address (segment:offset) of the segment module
- The length of the segment module
- The segment class (C=)
- The segment name (S=)
- The segment group (G=)
- The segment module (M=)
- The segment ACBP information (ACBP=)
If the same segment appears in more than one module, each module appears as a separate line.
The ACBP field encodes the A (alignment), C (combination), and B (big) attributes into a set of four-bit fields, as defined by Intel. The C++ linkers use only three of the fields: A, C, and B. The ACBP value in the map is printed in hexadecimal. The following field values must be ORed together to arrive at the ACBP value printed.
Field | Value | Description |
---|---|---|
A (alignment) |
00 |
An absolute segment |
20 |
A byte-aligned segment | |
40 |
A word-aligned segment | |
60 |
A paragraph-aligned segment | |
80 |
A page-aligned segment | |
A0 |
An unnamed absolute portion of storage | |
C (combination) |
00 |
Cannot be combined |
08 |
A public combining segment | |
B (big, for 16 bit) |
00 |
Segment less than 64 K |
02 |
Segment exactly 64K |