This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Map file description of keil linker

Hello!

In keil map file, I don't know all the title name's meaning. For example, what does the 'Idx' mean in Memory Map of the image section of map file?

What's the letter "E" in this section before Section Name?

Thanks!

Parents Reply Children
  • ARM platform

    Memory Map of the image
    
      Image Entry point : 0x000000c1
    
      Load Region LR_IROM1 (Base: 0x00000000, Size: 0x00003b48, Max: 0x00040000, ABSOLUTE)
    
        Execution Region ER_IROM1 (Base: 0x00000000, Size: 0x00003aec, Max: 0x00040000, ABSOLUTE)
    
        Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    
        0x00000000   0x000000c0   Data   RO         7744    RESET               startup_fm33a0xx.o
        0x000000c0   0x00000008   Code   RO         7795  * !!!main             c_p.l(__main.o)
        0x000000c8   0x0000003c   Code   RO         8005    !!!scatter          c_p.l(__scatter.o)
        0x00000104   0x0000001a   Code   RO         8007    !!handler_copy      c_p.l(__scatter_copy.o)
        0x0000011e   0x00000002   PAD
        0x00000120   0x0000001c   Code   RO         8009    !!handler_zi        c_p.l(__scatter_zi.o)

    See the map file above, there is a star sign (*) under the name of E, before !!!main, you mean there is only one external?

    Can you explain each section meaning? What's the function of the 'Idx' field? to locate the code position in the image?

    Thanks very much!

  • Hmm, after a bit of searching in the manuals, Keil really don't seem to provide any documentation on this!

    :(

    Have you tried searching at http://infocenter.arm.com/ ?

    As , I would guess that Idx is short for "index" (it is a common abbreviation).

    Looking at your example, and where the '*' appears, I would guess that the '*' in the 'E' column marks the Entry point?

  • I suspect the index refers to the symbol number in the .ELF (AXF) object file, as the symbols are packed into their own array/section. One could perhaps use FromELF to dump the symbols to confirm, or cross check assumptions made via the .MAP file. It would also reflect the entry point in the ELF header.

    Generally when parsing these things with automated tools, you tend to extract the fields of interest (ie address, size, or whatever) and skip the less relevant fields.

    The content of the .MAP files tends to provide data for Keil's developers to understand the mechanics of failure conditions and bugs.

  • I agree with you. When I see those two column for first time, my comprehansion as same as yours. But I just want a offical specification about this. But I searched a lot, and nothing I got. So I come here for some advice.

  • Got a shelf full of manuals from the SDT / ADS days. The ARMLINK manual wasn't much help

    http://infocenter.arm.com/help/topic/com.arm.doc.dui0804b/ARMCT_armlink_reference_guide_v6_01_DUI0804B_en.pdf

    I try to pull information out of the ELF/AXF file, tends to be more strongly defined, for compatibility reasons. I think the .MAP file is considered a more transitory format, subject to change to suit the linker and architecture it is linking for. I build scripts to process them, and fix them when they break.

  • The linker manual describes the option --section_index_display, which  controls the information displayed in the Idx field. The 'E' field is the entry point, as you pointed out. You can set another entry point using --entry=symbol. But even if you do, you'll get a '*' next to !!!main. The other columns are fairly well explained in the linker manual.