Detailed-Segments Map File

From RAD Studio
Jump to: navigation, search

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

See Also