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.

Using EABI E0200 Unable to resolve this relocatable expression

Hi,

I am using CCS v 5.1.0.04001 with the Code Generation tools 7.2.2 and DSP BIOS 5.41.10.36.

I wanted to make use of C++ exceptions, and reading that there was a considerable penalty associated with their use under COFF, and that EABI added a number of features that would be useful to me (zero init statics and better small class handling), I decided to switch my project over.

The linking phase fails with this error:

"DM6437_configcfg.s62" , ERROR!   at line 2329: [E0200] Unable to resolve this relocatable expression; relocation support for arbitrary expressions is not available in the C6000 EABI

This is derived from my .tcf file, DM6437_config.tcf AFAIK, so I looked through there, and didn't find anything obviously amiss.  I tried deleting all the temp files generated from it (DM6437_config* from my target configuration directory) but to no avail.

Does anyone have any suggestions for avoiding this error?

My command line options being passed to the compiler are attached.

Best,

Rob Anderson

Compiler:
-mv64+ -g --relaxed_ansi --exceptions --cpp_default --define=_PROTO --define=_UART_ENABLED --define=_DEBUG --include_path="C:/Program Files (x86)/Texas Instruments/ccsv5/tools/compiler/c6000/C6000 Code Generation Tools 7.2.2/include" --include_path="C:\Users\randerson\ccs_workspaces\workspace\Interphase\dm6437_edma3_driver\src" -include_path="C:\Users\randerson\ccs_workspaces\workspace\Interphase-VEU\dm6437_uart_driver\src" --include_path="C:/Program Files (x86)/Texas Instruments/bios_5_41_10_36/packages/ti/bios/include" --include_path="C:/Program Files (x86)/Texas Instruments/bios_5_41_10_36/packages/ti/rtdx/include/c6000" --diag_warning=225 --abi=eabi
Linker:
-mv64+ -g --relaxed_ansi --exceptions --cpp_default --define=_PROTO --define=_UART_ENABLED --define=_DEBUG --diag_warning=225 --abi=eabi -z -m"Interphase.map" --stack_size=16384 --heap_size=16384 --warn_sections -i"C:/Program Files (x86)/Texas Instruments/ccsv5/tools/compiler/c6000/C6000 Code Generation Tools 7.2.2/lib" -i"C:/Program Files (x86)/Texas Instruments/ccsv5/tools/compiler/c6000/C6000 Code Generation Tools 7.2.2/include" -i"C:/Program Files (x86)/Texas Instruments/bios_5_41_10_36/packages/ti/rtdx/lib/c6000" -i"C:/Program Files (x86)/Texas Instruments/bios_5_41_10_36/packages/ti/bios/lib" --reread_libs --absolute_exe --rom_model
Tconf Script Compiler:
-Dconfig.importPath="C:/Program Files (x86)/Texas Instruments/bios_5_41_10_36/packages;" -Dconfig.compilerOpts="--memory_model=huge"

  • Most likely, there's nothing that can be done but upgrade to an EABI-friendly version of BIOS.  I don't know whether BIOS 5.41.10.36 is or not.  EABI just doesn't support some expressions that are possible in COFF.  In particular, if there are two symbols in an expression whose final address is not known at assembly time, EABI can't support it, and the source assembly code has to be re-written to use a simpler form.

  • Thanks.  BIOS 6 isn't an option at the current time, so I will work around the need for exceptions and go back to COFF.

     

    Rob