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.

ElfLoader_getSymbolAddress: symName [_Ipc_ResetVector]

I am trying to call   this

status = Ipc_control (ProcesserID, Ipc_CONTROLCMD_LOADCALLBACK,  NULL);

But the syslink.ko told me

ElfLoader_getSymbolAddress: symName [_Ipc_ResetVector]

I looked into my .map file of the file I loaded, the _Ipc_ResetVector is there.

So what is the matter?

  • the syslink.ko log shows :

    ElfLoaderTrgWrite_copy: translated 0x90000000 (sva) --> 0x90000000 (mpa)
    MemoryOS_map: pa=0x90000000, va=0xd4000000, sz=0x24560
    _ProcMgr_map for SlaveVirt:
        dstAddr       [0x90000000]
        sgList.paddr  [0x90000000]
        sgList.offset [0x0]
        sgList.size [0x24560]

    ElfLoaderTrgWrite_copy: translated 0x9002d6e8 (sva) --> 0x9002d6e8 (mpa)
    MemoryOS_map: pa=0x9002d6e8, va=0xd3f506e8, sz=0x3e3a
    _ProcMgr_map for SlaveVirt:
        dstAddr       [0x9002d000]
        sgList.paddr  [0x9002d000]
        sgList.offset [0x6e8]
        sgList.size [0x4522]

    ElfLoaderTrgWrite_copy: translated 0x90033980 (sva) --> 0x90033980 (mpa)
    MemoryOS_map: pa=0x90033980, va=0xd3f4e980, sz=0x10
    _ProcMgr_map for SlaveVirt:
        dstAddr       [0x90033000]
        sgList.paddr  [0x90033000]
        sgList.offset [0x980]
        sgList.size [0x990]

    ElfLoaderTrgWrite_copy: translated 0x90033c00 (sva) --> 0x90033c00 (mpa)
    MemoryOS_map: pa=0x90033c00, va=0xd3f5ac00, sz=0x200
    _ProcMgr_map for SlaveVirt:
        dstAddr       [0x90033000]
        sgList.paddr  [0x90033000]
        sgList.offset [0xc00]
        sgList.size [0xe00]

    ElfLoaderTrgWrite_copy: translated 0x90034000 (sva) --> 0x90034000 (mpa)
    MemoryOS_map: pa=0x90034000, va=0xd3f60000, sz=0x678
    _ProcMgr_map for SlaveVirt:
        dstAddr       [0x90034000]
        sgList.paddr  [0x90034000]
        sgList.offset [0x0]
        sgList.size [0x678]

    DM8168DSPPROC_start: Slave successfully started!

    but the .map file shows:

    SEGMENT ALLOCATION MAP

    run origin  load origin   length   init length attrs members
    ----------  ----------- ---------- ----------- ----- -------
    90000000    90000000    00024560   00024560    r-x
      90000000    90000000    00024560   00024560    r-x .text
    90024560    90024560    00009188   00000000    rw-
      90024560    90024560    00009188   00000000    rw- .far
    9002d6e8    9002d6e8    00003e3a   00003e3a    r--
      9002d6e8    9002d6e8    00003e3a   00003e3a    r-- .const
    90031528    90031528    00001334   00001334    rw-
      90031528    90031528    00001334   00001334    rw- .fardata
    90032860    90032860    00001120   00000000    rw-
      90032860    90032860    00001000   00000000    rw- .stack
      90033860    90033860    00000120   00000000    rw- .cio
    90033980    90033980    00000010   00000010    r--
      90033980    90033980    00000010   00000010    r-- .switch
    90033990    90033990    00000006   00000000    rw-
      90033990    90033990    00000006   00000000    rw- .bss
    90033998    90033998    00000004   00000004    rw-
      90033998    90033998    00000004   00000004    rw- .neardata
    9003399c    9003399c    00000004   00000004    r--
      9003399c    9003399c    00000004   00000004    r-- .rodata
    90033c00    90033c00    00000200   00000200    r-x
      90033c00    90033c00    00000200   00000200    r-x .vecs
    90034000    90034000    00000678   00000678    r--
      90034000    90034000    00000034   00000034    r-- ti_sdo_ipc_init
      90034034    90034034    00000644   00000644    r-- .cinit

    Note obviosly that the syslink.ko only recognized parts of the segment table.

    So do you know what did I do wrong?

  • I'm not sure why you are seeing this issue.  All the SysLink sample applications typically call Ipc_control (ProcesserID, Ipc_CONTROLCMD_LOADCALLBACK,  NULL); .

    Make sure your application is calling SysLink_setup() prior to making this call.

    Another thing to consider is how the slave core is being loaded and started. 

    Are you using SysLink's Slaveloader utility to load your slave cores?  If you aren't, you must use the ProcMgr APIs to get things properly loaded and started on your slave core(s).  APIs of interest are:

    ProcMgr_attach,  ProcMgr_load, ProcMgr_start

  • Hi Arnie,

    Now I have overcome the issue and now:

    while calling Ipc_CONTROLCMD_STARTCALLBACK, syslink.ko print some "Ipc_procSyncStart failed" error and later it stoped

    and nothing continued.

    what's wrong?

  • The error is due to the Ipc_CONTROLCMD_STARTCALLBACK call unable to attach to the slave cores. This can be caused by a couple of reasons.

    1. Either the slave cores hasn't been started.  Call ProcMgr_start if SlaveLoader utility isn't being used to load/start the device.
    2. The slave core is in some unknown state (crashed, didn't get properly initialized, running in invalid memory, etc).

    If the application is left running long enough, it will eventually timeout from trying to attach.  If you have CCS and an emulator, you might want to try connecting to the slave core to see what its doing.

    You can find some info:

    http://processors.wiki.ti.com/index.php/CCS_Debugging_of_Linux_Applications_with_GDB#Debugging_slave_cores_running_SysBios

    You don't necessarily have to follow Section 1.1 and 1.2 above unless you want to also debug the GPP core.

    You can also turn on TRACEing in the SysLink kernel to see if you can get more information.  Take a look at how to do this at:

    http://processors.wiki.ti.com/index.php/SysLink_Install_Guide#Loading_module

    and

    http://processors.wiki.ti.com/index.php/SysLink_UserGuide#Trace_types

  • Hi Arnie,

    Well my state is:

    Nothing happens after I tried to "load symbol" in CCS. The C674 core stay the same state as before.

  • Did you trying adding the spin while loop on the DSP-side?

    { volatile Int spin=1; while(spin); }

    I'd recommend doing this in main() function on the DSP-side.  That way you can catch the DSP early in its execution and allow you to step/debug through the DSP code.  Make sure you increase the TIMEOUT_LOOPCNT otherwise the GPP-side application will timeout and possibly terminate.