5.4 How to find where a symbol is placed when linking

To find where a symbol is placed when linking you must find the section that defines the symbol, and ensure that the linker has not removed the section.

You can do this with the --keep="section_id" and --symbols options. For example, if object(section) is the section containing the symbol, enter:

armlink --keep="object(section)" --symbols s.o --output=s.axf      

Note:

You can also run fromelf -s on the resultant image.

As an example, do the following:

Procedure

  1. Create the file s.c containing the following source code:
    long long altstack[10] __attribute__ ((section ("STACK"), zero_init));
    
    int main(void)
    {
        return sizeof(altstack);
    }
  2. Compile the source:

    armcc -c s.c -o s.o

  3. Link the object s.o, keeping the STACK symbol and displaying the symbols:

    armlink --keep="s.o(STACK)" --map --symbols s.o --output=s.axf

  4. Locate the STACK symbol in the output, for example:
    ======================================================================
    
    Image Symbol Table
    
        Local Symbols
    
        Symbol Name                        Value     Ov Type        Size  Object(Section)
    …
        STACK                              0x00008200   Section       80  s.o(STACK)
    
        Global Symbols
    
        Symbol Name                        Value     Ov Type        Size  Object(Section)
    …
        altstack                           0x00008200   Data          80  s.o(STACK)
        Image$$ZI$$Limit                   0x00008250   Number         0  s.o(STACK)

    This shows that the stack is placed in the ZI execution region.

Non-ConfidentialPDF file icon PDF versionARM DUI0474M
Copyright © 2010-2016 ARM Limited or its affiliates. All rights reserved.