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.

Compiler: compression "rle" ignored, during linking

Other Parts Discussed in Thread: SYSBIOS

Tool/software: TI C/C++ Compiler

Hello,

I'm getting the following error during linking:

    error #10229-D: output section ".fardata.2" refers to load symbol "name of one of my SWI functions" and hence cannot be compressed; compression "rle" is ignored

I've searched other threads, but don't really see anything that's applicable, or helps my scenario.

Please advise,

Robert

  • Actually, this thread was applicable:

    e2e.ti.com/.../306292

    There is some C linkage that causes problems, when using .cpp files ( I recently changed over to all .cpp files in my project). So after preceding all the swi functions by

    extern "C"

    the error went away for them.

    The problem is that now it is appearing for bios functions that I don't appear to have access to for making the same update

    error #10229-D: output section ".fardata" refers to load symbol "ti_sysbios_knl_Clock_workFunc__E" and hence cannot be compressed; compression "rle" is ignored

    Please advise,

    Robert
  • Are you sure this ...

    Robert56682 said:
    error #10229-D: output section ".fardata" refers to load symbol "ti_sysbios_knl_Clock_workFunc__E" and hence cannot be compressed; compression "rle" is ignored

    is an error?  I've only seen it categorized as a warning.  

    Do you also see diagnostics about how functions like ti_sysbios_knl_Clock_workFunc__E are undefined?

    Thanks and regards,

    -George

  • George Mock said:

    Are you sure this ...

    is an error?  I've only seen it categorized as a warning.  

    It is, per below

    error #10229-D: output section ".fardata" refers to load symbol "ti_sysbios_knl_Clock_workFunc__E" and hence cannot be compressed; compression "rle" is ignored

    George Mock said:

    Do you also see diagnostics about how functions like ti_sysbios_knl_Clock_workFunc__E are undefined?

    I do, this, and a ton more bios-related calls!

  • For now, ignore the diagnostics about the section cannot be compressed.  Focus on the diagnostics about undefined symbols.  I'm pretty sure clearing those up will fix everything else.

    I know that, generally speaking, any C function called from C++, even indirectly, must be declared extern "C".  I don't know the details of how you do that in the case of SYS/BIOS functions.  So, I will get help from those experts.

    Thanks and regards,

    -George

  • All SYS/BIOS header files use extern "C" when declaring the function prototypes for every API, including the referenced Clock_workFunc() API:

    #ifdef __cplusplus
    #define __extern extern "C"
    #else
    #define __extern extern
    #endif
    ...
    __extern xdc_Void ti_sysbios_knl_Clock_workFunc__E( xdc_UArg arg0, xdc_UArg arg1 );
    

    Alan

  • Can you share your project's .cfg file and linker command file? They may help reveal the problem.

    Also, can you show the compile line for the generated "big.c" file?

    My suspicion is that the compiler is being informed to compile the generated "big.c" file for your project as a C++ file rather than a straight C file. This would result in the kinds of errors your seeing.

    Ordinarily that shouldn't happen but with hand crafted makefiles or special .cfg file contents, it is achievable.

    Alan

  • Alan DeMars said:

    Can you share your project's .cfg file and linker command file? They may help reveal the problem.

    Also, can you show the compile line for the generated "big.c" file?

    My suspicion is that the compiler is being informed to compile the generated "big.c" file for your project as a C++ file rather than a straight C file. This would result in the kinds of errors your seeing.

    Ordinarily that shouldn't happen but with hand crafted makefiles or special .cfg file contents, it is achievable.

    Alan

    Alan, thanks for the reply. I can't publicly provide the .cfg and linker command, because of IP naming.  But I cut and paste the bios build, with names changed, which may be the big.c you're referring to.  These particular problems started when I change all files from C to CPP.

    "C:\\ti\\ccsv7\\utils\\bin\\gmake" -j 4 all -O
    gmake[1]: Entering directory 'C:/git/one/two/three/Code/Debug'
    'Building file: ../one.cfg'
    'Invoking: XDCtools'
    "C:/ti/xdctools_3_50_04_43_core/xs" --xdcpath="C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;" xdc.tools.configuro -o configPkg -t ti.targets.elf.C674 -p one -r debug -c "C:/ti" --compileOptions "-g --optimize_with_debug" -w -v "../one.cfg"
    #
    # making package.mak (because of package.bld) ...
    C:/ti/xdctools_3_50_04_43_core/xs -Dxdc.path="C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;C:/ti/xdctools_3_50_04_43_core/packages;.." -Dxdc.root=C:/ti/xdctools_3_50_04_43_core -Dxdc.hostOS=Windows -Dconfig.importPath=".;C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;C:/ti/xdctools_3_50_04_43_core/packages;..;C:/ti/xdctools_3_50_04_43_core;C:/ti/xdctools_3_50_04_43_core/etc" -Dxdc.bld.targets="" -DTOOLS= -f C:/ti/xdctools_3_50_04_43_core/packages/xdc/bld/bld.js ./config.bld package.bld package.mak
    #
    # generating interfaces for package configPkg (because package/package.xdc.inc is older than package.xdc) ...
    C:/ti/xdctools_3_50_04_43_core/xs -Dxdc.path="C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;C:/ti/xdctools_3_50_04_43_core/packages;.." -Dxdc.root=C:/ti/xdctools_3_50_04_43_core -Dxdc.hostOS=Windows -Dconfig.importPath=".;C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;C:/ti/xdctools_3_50_04_43_core/packages;..;C:/ti/xdctools_3_50_04_43_core;C:/ti/xdctools_3_50_04_43_core/etc" -Dxdc.bld.targets="" -DTOOLS= -f xdc/services/intern/cmd/build.xs -m package/package.xdc.dep -i package/package.xdc.inc package.xdc
    #
    # configuring one.xe674 from package/cfg/one_pe674.cfg ...
    C:/ti/xdctools_3_50_04_43_core/xs -Dxdc.path="C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;C:/ti/xdctools_3_50_04_43_core/packages;.." -Dxdc.root=C:/ti/xdctools_3_50_04_43_core -Dxdc.hostOS=Windows -Dconfig.importPath=".;C:/git/one/two/three/Misc/platform;C:/ti/ccsv7/ccs_base;C:/ti/bios_6_53_02_00/packages;C:/ti/xdctools_3_50_04_43_core/packages;..;C:/ti/xdctools_3_50_04_43_core;C:/ti/xdctools_3_50_04_43_core/etc" -Dxdc.bld.targets="" -DTOOLS= -Dxdc.cfg.check.fatal=false xdc.cfg one.xe674 package/cfg/one_pe674.cfg package/cfg/one_pe674
    generating custom ti.sysbios library makefile ...
    Starting build of library sources ...
    making C:/git/one/two/three/Code/src/sysbios/sysbios.ae674 ...
    gmake[1]: Entering directory `C:/git/one/two/three/Code/src/sysbios'
    cle674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/BIOS.c ...
    [BIOS.c]
    [Exception.c]
    [Hwi.c]
    [Hwi_startup.c]
    [TimestampProvider.c]
    [Cache.c]
    [Clock.c]
    [Idle.c]
    [Intrinsics.c]
    [Queue.c]
    [Semaphore.c]
    [Swi.c]
    [Task.c]
    [Hwi.c]
    [Hwi_stack.c]
    [Hwi_startup.c]
    [ThreadLocalStorage.c]
    [TaskSupport.c]
    [IntrinsicsSupport.c]
    [GateHwi.c]
    [GateMutex.c]
    [HeapMem.c]
    [Timer.c]
    [TimerSupport.c]
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/family/c64p/Exception_asm.s64P ...
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/family/c64p/Hwi_asm.s62 ...
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/family/c64p/Hwi_asm_switch.s62 ...
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/family/c64p/Hwi_disp_always.s64P ...
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/rts/ti/tls_get_tp.asm ...
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/family/c62/TaskSupport_asm.s62 ...
    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/timers/timer64/Timer_asm.s64P ...
    are674 BIOS.obj c64p_Exception_asm.obj c64p_Hwi_asm.obj c64p_Hwi_asm_switch.obj c64p_Hwi_disp_always.obj ti_tls_get_tp.obj c62_TaskSupport_asm.obj timer64_Timer_asm.obj ...
    gmake[1]: Leaving directory `C:/git/one/two/three/Code/src/sysbios'
    Build of libraries done.
    C:/ti/xdctools_3_50_04_43_core/bin/sed 's"^\"\(package/cfg/one_pe674cfg.cmd\)\""\"C:/git/one/two/three/Code/Debug/configPkg/\1\""' package/cfg/one_pe674.xdl > linker.cmd
    C:/ti/xdctools_3_50_04_43_core/bin/setdate -r:max package/cfg/one_pe674.h compiler.opt compiler.opt.defs
    C:/ti/xdctools_3_50_04_43_core/bin/rm -f package/cfg/one_pe674.oe674

    Here is the end of the build.

    <Linking>

    error #10229-D: output section ".fardata" refers to load symbol
    "ti_sysbios_knl_Clock_workFunc__E" and hence cannot be compressed;
    compression "rle" is ignored

    undefined first referenced
    symbol in file
    --------- ----------------
    ti_sysbios_family_c64p_Cache_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_family_c64p_Exception_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_family_c64p_Exception_handler__I C:\git\one\two\three\Code\src\sysbios\sysbios.ae674<c64p_Exception_asm.obj>
    ti_sysbios_family_c64p_Hwi_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_family_c64p_Hwi_dispatchC__I C:\git\one\two\three\Code\src\sysbios\sysbios.ae674<c64p_Hwi_disp_always.obj>
    ti_sysbios_family_c64p_TimestampProvider_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_family_c64p_TimestampProvider_get32__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_family_c64p_TimestampProvider_get64__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_family_c64p_TimestampProvider_getFreq__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateHwi_Instance_init__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateHwi_enter__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateHwi_leave__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateHwi_query__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateMutex_Instance_finalize__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateMutex_Instance_init__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateMutex_enter__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateMutex_leave__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_gates_GateMutex_query__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_hal_Hwi_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_hal_Hwi_initStack C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_hal_Hwi_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_heaps_HeapMem_Instance_init__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_heaps_HeapMem_alloc__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_heaps_HeapMem_free__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_heaps_HeapMem_getStats__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_heaps_HeapMem_init__I C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_heaps_HeapMem_isBlocking__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Clock_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Clock_logTick__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Clock_workFunc__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Idle_loop__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Queue_empty__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Semaphore_pend__E ./comms/tsk_comms.obj
    ti_sysbios_knl_Semaphore_post__E ./main/tsk_main.obj
    ti_sysbios_knl_Swi_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Swi_disable__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Swi_post__E ./acq/swi_edma_acq.obj
    ti_sysbios_knl_Swi_setAttrs__E ./acq/swi_edma_acq.obj
    ti_sysbios_knl_Swi_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Task_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Task_disable__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_knl_Task_sleep__E ./comms/tsk_comms.obj
    ti_sysbios_knl_Task_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_timers_timer64_Timer_Module_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674
    ti_sysbios_timers_timer64_Timer_startup__E C:\git\one\two\three\Code\Debug\configPkg\package\cfg\one_pe674.oe674

    error #10234-D: unresolved symbols remain
    fatal error #99900: error limit reached; 1 errors detected

    >> Compilation failure
    makefile:232: recipe for target 'one.out' failed
    gmake[1]: *** [one.out] Error 1
    makefile:228: recipe for target 'all' failed
    gmake: *** [all] Error 2

    **** Build Finished ****

  • "These particular problems started when I change all files from C to CPP, except for boot.c and autoinit.c. I also update my boot.c and autoinit.c, since they were ancient, to the 8.2 versions."

    Does this mean you changed the names of the BIOS source files also (ie Task.c -> Task.cpp, etc)?

    The boot.c and autoinit.c files in ti\targets\rts6000\ are handcrafted reversions of their counterparts provided by the TI Codegen tools. You can not simply replace boot.c and autoinit.c in 'rts6000' with the latest ones.

    Alan
  • Alan DeMars said:
    "These particular problems started when I change all files from C to CPP, except for boot.c and autoinit.c. I also update my boot.c and autoinit.c, since they were ancient, to the 8.2 versions."

    Does this mean you changed the names of the BIOS source files also (ie Task.c -> Task.cpp, etc)?

    No, just my application files

    Alan DeMars said:

    The boot.c and autoinit.c files in ti\targets\rts6000\ are handcrafted reversions of their counterparts provided by the TI Codegen tools. You can not simply replace boot.c and autoinit.c in 'rts6000' with the latest ones.

    Yeah, that was a mistake, and I had edited it out of the post.  autoinit.c and boot.c shouldn't have even been in my project ... guess they are pulled in automatically, like you mentioned.  Once removing, those errors went away.  

    I traced my problem down to this line in the .cfg file:

    BIOS.customCCOpts = "-mv6740 -pdr -pden"

    It doesn't matter what options I put there, it will result in the problem with the bios undefines.  Once removing, my build now completes.

    The only think left is this remark during the bios build:

    asme674 C:/ti/bios_6_53_02_00/packages/ti/sysbios/timers/timer64/Timer_asm.s64P ...

    remark #24038-D: --optimize_with_debug is deprecated and will be removed in a subsequent release. The behavior is enabled by default.

    It happens with several of the asme674 build lines.

    Know why/how to get ride of it?  I have -g set in the build options, since needing full symbols for debugging, but that was only meant for my application code, not the bios, which produces that remark as a result (the application code does not).

    Thanks,

    Robert

  • The BIOS.customCCOpts config parameter is meant to be added to or modified, not simply replaced. By replacing it, you inadvertently deleted some special compile options required to build the custom SYS/BIOS library.

    To get rid of the warning, I think you should do something like this:

    BIOS..customCCOpts += " --diag_suppress=24038 ";

    This will suppress warning number 24038.

    Alan
  • Alan DeMars said:


    To get rid of the warning, I think you should do something like this:

    BIOS..customCCOpts += " --diag_suppress=24038 ";

    This will suppress warning number 24038.

    Tried that, and -pds=24038, but still appears.

    Robert

  • Robert56682 said:

    Alan DeMars


    To get rid of the warning, I think you should do something like this:

    BIOS..customCCOpts += " --diag_suppress=24038 ";

    This will suppress warning number 24038.

    Tried that, and -pds=24038, but still appears.

    Robert

    From compiler v8.2 manual:

    --diag_suppress=num Suppresses the diagnostic identified by num. To determine the numeric
    identifier of a diagnostic message, use the --display_error_number option first
    in a separate compile. Then use --diag_suppress=num to suppress the
    diagnostic. You can only suppress discretionary diagnostic messages

    Maybe is not considered a "discretionary diagnostic message"

  • Try this then:

    BIOS.customCCOPTS = BIOS.customCCOPTS.replace("--optimize_with_debug", "");

    This should remove the "--optimize_with_debug" string from the BIOS.customCCOPTS string.
  • 24038 is a linker warning, so you need to pass the suppression option to the linker. Is there an equivalent BIOS custom linker options variable?
  • Alan DeMars said:
    Try this then:

    BIOS.customCCOPTS = BIOS.customCCOPTS.replace("--optimize_with_debug", "");

    This should remove the "--optimize_with_debug" string from the BIOS.customCCOPTS string.

    That seemed to do it, thanks.  Because it's enabled by default, per remark, removing it from the bios build should have no effect, right?

    Robert

  • I'm not sure what "per remark" means. However, in a more recent release of our code, we have stopped including "--optimize_with_debug" in our compile options because it has been deprecated. We found that removing it had no effect.

    Alan
  • Alan DeMars said:
    I'm not sure what "per remark" means. However, in a more recent release of our code, we have stopped including "--optimize_with_debug" in our compile options because it has been deprecated. We found that removing it had no effect.

    Alan

    "per remark" ... remark said that --optimize_with_debug is enabled by default, so removing from bios options as you suggested to get rid of the warning, would have no effect.  Which you've just confirmed.  thanks

    Robert

  • Got it now. Thanks. Please mark this issue resolved if you think it is.