This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Missing symbols from map file

Hi,

As part of one project, I have a library name Common.lib built for 6455. And it links to an executable called 6455.out.  

They are DSP BIOS projects and use legacy COFF format. Effective compiler version is TI v7.3.9

Some function names are not present in the map file. E.g. runPriority1Objects of a class CpuManager_Cl. I understand that characters are added for C++ name mangling. I tried searching not only whole words.

 

For a second project, I built the Common.lib with different project setting for 6678. And it links to executable called 6678.out.

They are RTSC SYS BIOS projects in ELF format. Effective compiler version is the same TI v7.3.9.

Here, no symbols are missing in the map file that I know if. The symbol for function name above is present as : _ZN13CpuManager_Cl19runPriority1ObjectsEv

Note that this function is not inlined explicitly.

All projects are built in release mode with o3 optimization.

 

Wonder what am I missing.

  • I presume CpuManager_CI is defined in Common.lib.  Is it possible the first project never calls CpuManager_CI?

    Thanks and regards,

    -George

  • Yes, the function is in Common.lib and it is called from other function in the Common.lib. So, it is invoked when compiled for both platforms.

     

    New observation: I have found some other symbols are missing from the 6678 map file as well. So, it is not different between the two platforms. Although it is interesting that it is not the same set of symbols that are missing. Maybe one of the CCS project setting is different.

    I have checked that the ms flag - optimize for space, set to 0. And as I mentioned, the optimize for speed, flag O, is set to 3.  This is same for Common.lib project setting for both platforms.

    The compiler seems to be one doing some kind of optimization. Is there a way to turn this off? It is required to have all the symbols in the map file. In its absense, the profiling information collected by different approaches is not accurate.

    Thanks

     

  • SThakkar said:
    Yes, the function is in Common.lib and it is called from other function in the Common.lib. So, it is invoked when compiled for both platforms.

    That alone does not guarantee that the object module in Common.lib which defines CpuManager_Cl is used as part of the build.  There must be a chain of references from the main object code to CpuManager_Cl, or that module is ignored by the linker.  You need to track down the chain of references to understand what is going on.

    Thanks and regards,

    -George

  • Hi  George,

    I think I understand what you mean. These functions are executed at runtime. So, they are called from the main.

    Also, it is not that one or two symbols are missing. quite a few of them are missing - all of which I know are executed at runtime.

    Thanks,

    Shivang

     

  • I found some answers in the compiler user guide.  In fact there is a note about how to profile given certain optimizations.

    thanks,

    Shivang