This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Undefined symbol Image$$ARM_LIB_STACKHEAP$$ZI$$Limit

I am porting a gcc project to armclang.

My .sct file contains:

#define __STACK_SIZE    0x00001000
#define __HEAP_SIZE     0x00003800

#if __HEAP_SIZE > 0
  ARM_LIB_HEAP  __HEAP_BASE EMPTY  __HEAP_SIZE  {   ; Reserve empty region for heap
  }
#endif

  ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE {   ; Reserve empty region for stack
  }
}

File exceptions.c contains code:

ExecFuncPtr vector_table[] __attribute__((section("vectors"))) = {
     /* Configure Initial Stack Pointer using linker-generated symbol */
#ifdef TWO_REGION
    #pragma import(__use_two_region_memory)
    (ExecFuncPtr)&Image$$ARM_LIB_STACK$$ZI$$Limit,
#else /* (default) One Region model */
    (ExecFuncPtr)&Image$$ARM_LIB_STACKHEAP$$ZI$$Limit,
#endif
    (ExecFuncPtr)__main, /* Initial PC, set to entry point  */
    NMIException,
    HardFaultException,
    MemManageException,
    BusFaultException,
    UsageFaultException,
    0, 0, 0, 0,             /* Reserved */
    SVCHandler,
    DebugMonitor,
    0,                      /* Reserved */
    PendSVC,
    SysTickHandler,

    /* Add up to 240 interrupt handlers, starting here... */
    InterruptHandler,
    InterruptHandler,      /* Some dummy interrupt handlers */
    InterruptHandler
    /*
    :
    */
};

If TWO_REGION is defined I get compiler errors:

exceptions.c:102:13: error: '#pragma import' is an ARM Compiler 5 extension, and
      is not supported by ARM Compiler 6 [-Warmcc-pragma-import]
    #pragma import(__use_two_region_memory)
            ^
exceptions.c:103:19: error: use of undeclared identifier
      'Image$$ARM_LIB_STACK$$ZI$$Limit'; did you mean 'Image$$ARM_LIB_STACKHEAP$$ZI$$Limit'?
    (ExecFuncPtr)&Image$$ARM_LIB_STACK$$ZI$$Limit,
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  Image$$ARM_LIB_STACKHEAP$$ZI$$Limit
exceptions.c:85:21: note: 'Image$$ARM_LIB_STACKHEAP$$ZI$$Limit' declared here
extern unsigned int Image$$ARM_LIB_STACKHEAP$$ZI$$Limit; /* for (default) One Region model */
                    ^
2 errors generated.

If TWO_REGION is undefined I get linker error:

Error: L6218E: Undefined symbol Image$$ARM_LIB_STACKHEAP$$ZI$$Limit (referred from exceptions.o).

How should I fix these errors?