I am using a EK-TM4C123GXL
I currently have a project which is running a small 1.8" LCD display and SD card together, using FreeRTOS. The project (including the FatFS library) comes in at almost 15,000 lines of code. Which is proving difficult because as I slowly add functionality I keep getting errors like this:
error #10099-D: program will not fit into available memory. run placement with alignment fails for section "BSS_GROUP" size 0x222 . Available memory ranges: SRAM size: 0x8000 unused: 0x1ff max hole: 0x1ff "../freertos_demo_ccs.cmd", line 67: error #10099-D: program will not fit into available memory. run placement with alignment fails for section ".stack" size 0x200 . Available memory ranges: SRAM size: 0x8000 unused: 0x1ff max hole: 0x1ff error #10010: errors encountered during linking; "freertos_demo.out" not built
I have:
- Reduced my globals to just FreeRTOS queues/semaphores and a few FatFS structures.
- Declared as many arrays as const as possible.
- Reduced as many types as possible (e.g. int -> uint8_t )
What else can i do to reduce my SRAM usage, or if possible, see what is taking up so much?
Edit: Here is the output of the .map file just before I try to add some functionality( before it fails)
******************************************************************************
TI ARM Linker PC v5.2.2
******************************************************************************
>> Linked Mon Apr 13 22:53:40 2015
OUTPUT FILE NAME: <freertos_demo.out>
ENTRY POINT SYMBOL: "_c_int00" address: 000037b1
MEMORY CONFIGURATION
name origin length used unused attr fill
---------------------- -------- --------- -------- -------- ---- --------
FLASH 00000000 00040000 000048e0 0003b720 R X
SRAM 20000000 00008000 00007ff1 0000000f RW X
SEGMENT ALLOCATION MAP
run origin load origin length init length attrs members
---------- ----------- ---------- ----------- ----- -------
00000000 00000000 000048e8 000048e8 r-x
00000000 00000000 0000026c 0000026c r-- .intvecs
0000026c 0000026c 00003d10 00003d10 r-x .text
00003f80 00003f80 0000083c 0000083c r-- .const
000047c0 000047c0 00000128 00000128 r-- .cinit
20000000 20000000 00007ff4 00000000 rw-
20000000 20000000 00007bd5 00000000 rw- .data
20007bd8 20007bd8 0000021c 00000000 rw- .bss
20007df4 20007df4 00000200 00000000 rw- .stack
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.intvecs 0 00000000 0000026c
00000000 0000026c startup_ccs.obj (.intvecs)
.text 0 0000026c 00003d10
0000026c 000005bc freertos_demo.obj (.text:main)
00000828 000002e4 rtsv7M4_T_le_v4SPD16_eabi.lib : fmod.obj (.text)
00000b0c 00000290 : xsin.obj (.text)
00000d9c 0000024d ustdlib.obj (.text:uvsnprintf)
00000fe9 00000001 --HOLE-- [fill = 0]
00000fea 00000002 startup_ccs.obj (.text:FaultISR)
00000fec 0000024c screen_task.obj (.text:ScreenTask$8)
00001238 0000024c graphics.obj (.text:drawString)
00001484 000001fe uartstdio.obj (.text:UARTprintf)
00001682 000001b6 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_add_t2.obj (.text)
00001838 0000019c switch_task.obj (.text:SwitchTask$10)
000019d4 00000144 tasks.obj (.text:xTaskGenericCreate)
00001b18 00000136 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_div_t2.obj (.text)
00001c4e 00000002 startup_ccs.obj (.text:IntDefaultHandler)
00001c50 00000134 spi_task.obj (.text:SPITask$9)
00001d84 00000130 screen_task.obj (.text:drawDials)
00001eb4 00000118 queue.obj (.text:xQueueGenericReceive)
00001fcc 00000114 tasks.obj (.text:xTaskIncrementTick)
000020e0 00000110 led_task.obj (.text:LEDTask$5)
000021f0 00000110 screen_task.obj (.text:drawDialCircle)
00002300 00000100 queue.obj (.text:xQueueGenericSend)
00002400 000000fc screen_task.obj (.text:drawDialLine)
000024fc 000000fc tiva.obj (.text:initTivaForLCD)
000025f8 000000fc rtsv7M4_T_le_v4SPD16_eabi.lib : fd_mul_t2.obj (.text)
000026f4 000000e4 queue.obj (.text:prvUnlockQueue$15)
000027d8 000000e0 screen_task.obj (.text:drawDigital)
000028b8 000000d8 graphics.obj (.text:errorScreen)
00002990 000000d0 tasks.obj (.text:xTaskResumeAll)
00002a60 000000c8 heap_2.obj (.text:pvPortMalloc)
00002b28 000000c0 rgb.obj (.text:RGBEnable)
00002be8 000000be rtsv7M4_T_le_v4SPD16_eabi.lib : xdnorm.obj (.text)
00002ca6 00000002 startup_ccs.obj (.text:NmiSR)
00002ca8 000000a8 tasks.obj (.text:vTaskSwitchContext)
00002d50 000000a6 portasm.obj (.text)
00002df6 00000002 rtsv7M4_T_le_v4SPD16_eabi.lib : _lock.obj (.text)
00002df8 000000a4 tasks.obj (.text:vTaskPriorityInherit)
00002e9c 000000a2 graphics.obj (.text:drawLine)
00002f3e 0000009c rtsv7M4_T_le_v4SPD16_eabi.lib : memcpy_t2.obj (.text)
00002fda 00000002 freertos_demo.obj (.text:vApplicationStackOverflowHook)
00002fdc 00000098 queue.obj (.text:prvCopyDataToQueue$15)
00003074 0000008c rgb.obj (.text:RGBColorSet)
00003100 0000008c tasks.obj (.text:prvIdleTask$16)
0000318c 00000086 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_cmp_t2.obj (.text:__aeabi_cdcmple)
00003212 0000007e queue.obj (.text:xQueueGenericCreate)
00003290 0000007c spi_task.obj (.text:placeInQueue)
0000330c 0000007a rtsv7M4_T_le_v4SPD16_eabi.lib : memset_t2.obj (.text)
00003386 00000002 --HOLE-- [fill = 0]
00003388 00000070 tasks.obj (.text:xTaskRemoveFromEventList)
000033f8 0000006c rtsv7M4_T_le_v4SPD16_eabi.lib : autoinit.obj (.text)
00003464 0000006a : copy_decompress_rle.obj (.text)
000034ce 00000002 --HOLE-- [fill = 0]
000034d0 00000068 rgb.obj (.text:RGBDisable)
00003538 00000068 tiva.obj (.text:writeData)
000035a0 00000060 tasks.obj (.text:vTaskDelayUntil)
00003600 00000058 graphics.obj (.text:clearScreen)
00003658 00000058 tasks.obj (.text:vTaskPlaceOnEventList)
000036b0 00000058 tasks.obj (.text:xTaskCheckForTimeOut)
00003708 00000054 lcd.obj (.text:gammaAdjustmentST7735)
0000375c 00000054 queue.obj (.text:xQueueCreateMutex)
000037b0 00000050 rtsv7M4_T_le_v4SPD16_eabi.lib : boot.obj (.text)
00003800 00000050 tiva.obj (.text:writeCommand)
00003850 0000004e lcd.obj (.text:setArea)
0000389e 00000002 --HOLE-- [fill = 0]
000038a0 0000004c screen_task.obj (.text:drawDigitalValue)
000038ec 0000004c tasks.obj (.text:prvAddCurrentTaskToDelayedList$16)
00003938 0000004c rtsv7M4_T_le_v4SPD16_eabi.lib : cpy_tbl.obj (.text)
00003984 0000004c port.obj (.text:xPortStartScheduler)
000039d0 00000048 rtsv7M4_T_le_v4SPD16_eabi.lib : fd_toi_t2.obj (.text)
00003a18 00000048 heap_2.obj (.text:vPortFree)
00003a60 00000044 rtsv7M4_T_le_v4SPD16_eabi.lib : exit.obj (.text)
00003aa4 00000044 : feraiseexcept.obj (.text)
00003ae8 00000042 : u_divt2.obj (.text)
00003b2a 00000040 screen_task.obj (.text:performAction)
00003b6a 00000002 --HOLE-- [fill = 0]
00003b6c 0000003d spi_task.obj (.text:screenHandler)
00003ba9 00000003 --HOLE-- [fill = 0]
00003bac 0000003c rtsv7M4_T_le_v4SPD16_eabi.lib : signal.obj (.text)
00003be8 0000003c lcd.obj (.text:setOrientation)
00003c24 0000003a tasks.obj (.text:prvInitialiseTCBVariables$16)
00003c5e 0000003a list.obj (.text:vListInsert)
00003c98 00000038 uartstdio.obj (.text:UARTwrite)
00003cd0 00000036 graphics.obj (.text:drawRect)
00003d06 0000002e rtsv7M4_T_le_v4SPD16_eabi.lib : i_tofd_t2.obj (.text)
00003d34 00000028 ustdlib.obj (.text:ustrncpy)
00003d5c 00000024 graphics.obj (.text:drawPixel)
00003d80 00000024 queue.obj (.text:prvCopyDataFromQueue$15)
00003da4 00000024 list.obj (.text:uxListRemove)
00003dc8 00000022 port.obj (.text:pxPortInitialiseStack)
00003dea 00000020 rtsv7M4_T_le_v4SPD16_eabi.lib : u_tofd_t2.obj (.text)
00003e0a 00000002 --HOLE-- [fill = 0]
00003e0c 0000001c port.obj (.text:xPortSysTickHandler)
00003e28 0000001a ustdlib.obj (.text:usnprintf)
00003e42 0000001a screen_task.obj (.text:writeOption)
00003e5c 00000018 rtsv7M4_T_le_v4SPD16_eabi.lib : args_main.obj (.text)
00003e74 00000018 list.obj (.text:vListInsertEnd)
00003e8c 00000018 tasks.obj (.text:xTaskGetTickCount)
00003ea4 00000016 list.obj (.text:vListInitialise)
00003eba 00000002 --HOLE-- [fill = 0]
00003ebc 00000014 rgb.obj (.text:RGBIntensitySet)
00003ed0 00000014 lcd.obj (.text:getScreenWidth)
00003ee4 00000014 rtsv7M4_T_le_v4SPD16_eabi.lib : xferaise.obj (.text)
00003ef8 00000014 port.obj (.text:vPortEnterCritical)
00003f0c 00000014 port.obj (.text:vPortExitCritical)
00003f20 00000010 graphics.obj (.text:setColor)
00003f30 00000010 port.obj (.text:vPortYield)
00003f40 0000000e rtsv7M4_T_le_v4SPD16_eabi.lib : copy_decompress_none.obj (.text:decompress:none)
00003f4e 0000000c : copy_zero_init.obj (.text:decompress:ZI)
00003f5a 0000000c graphics.obj (.text:drawFastVLine)
00003f66 00000006 startup_ccs.obj (.text:ResetISR)
00003f6c 00000006 driverlib.lib : uart.obj (.text:UARTClockSourceSet)
00003f72 00000006 rtsv7M4_T_le_v4SPD16_eabi.lib : copy_decompress_rle.obj (.text:decompress:rle24)
00003f78 00000004 : pre_init.obj (.text)
.const 0 00003f80 0000083c
00003f80 00000654 graphics.obj (.const)
000045d4 0000013a <whole-program> (.const:.string)
0000470e 00000002 --HOLE-- [fill = 0]
00004710 00000060 rtsv7M4_T_le_v4SPD16_eabi.lib : xsin.obj (.const)
00004770 00000020 lcd.obj (.const)
00004790 00000018 uartstdio.obj (.const)
000047a8 00000014 tasks.obj (.const:.string)
.cinit 0 000047c0 00000128
000047c0 00000101 (.cinit..data.load) [load image, compression = rle]
000048c1 00000003 --HOLE-- [fill = 0]
000048c4 0000000c (__TI_handler_table)
000048d0 00000008 (.cinit..bss.load) [load image, compression = zero_init]
000048d8 00000010 (__TI_cinit_table)
.init_array
* 0 00000000 00000000 UNINITIALIZED
.data 0 20000000 00007bd5 UNINITIALIZED
20000000 00007548 heap_2.obj (.data)
20007548 00000328 spi_task.obj (.data)
20007870 000001d4 tasks.obj (.data)
20007a44 000000b0 rtsv7M4_T_le_v4SPD16_eabi.lib : signal.obj (.data:sigtable$39)
20007af4 00000004 buttons.obj (.data)
20007af8 00000080 rtsv7M4_T_le_v4SPD16_eabi.lib : xvalues.obj (.data)
20007b78 00000014 led_task.obj (.data)
20007b8c 00000014 rgb.obj (.data)
20007ba0 00000008 graphics.obj (.data)
20007ba8 00000008 rtsv7M4_T_le_v4SPD16_eabi.lib : _lock.obj (.data)
20007bb0 00000008 : exit.obj (.data)
20007bb8 00000008 : feraiseexcept.obj (.data)
20007bc0 00000008 uartstdio.obj (.data)
20007bc8 00000004 port.obj (.data)
20007bcc 00000004 rtsv7M4_T_le_v4SPD16_eabi.lib : errno.obj (.data)
20007bd0 00000004 : stkdepth_vars.obj (.data)
20007bd4 00000001 lcd.obj (.data)
.bss 0 20007bd8 0000021c UNINITIALIZED
20007bd8 00000208 ff.obj (.bss)
20007de0 00000008 freertos_demo.obj (.bss)
20007de8 00000004 (.common:g_pScreenButtonQueue)
20007dec 00000004 (.common:pxDelayedTaskList$16)
20007df0 00000004 (.common:pxOverflowDelayedTaskList$16)
.TI.persistent
* 0 20000000 00000000 UNINITIALIZED
.TI.noinit
* 0 20007bd8 00000000 UNINITIALIZED
.stack 0 20007df4 00000200 UNINITIALIZED
20007df4 00000200 --HOLE--
LINKER GENERATED COPY TABLES
__TI_cinit_table @ 000048d8 records: 2, size/record: 8, table size: 16
.data: load addr=000047c0, load size=00000101 bytes, run addr=20000000, run size=00007bd5 bytes, compression=rle
.bss: load addr=000048d0, load size=00000008 bytes, run addr=20007bd8, run size=0000021c bytes, compression=zero_init
LINKER GENERATED HANDLER TABLE
__TI_handler_table @ 000048c4 records: 3, size/record: 4, table size: 12
index: 0, handler: __TI_decompress_rle24
index: 1, handler: __TI_decompress_none
index: 2, handler: __TI_zero_init
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
address name
------- ----
00003a61 C$$EXIT
00003075 RGBColorSet
000034d1 RGBDisable
00002b29 RGBEnable
00003ebd RGBIntensitySet
00003f67 ResetISR
UNDEFED SHT$$INIT_ARRAY$$Base
UNDEFED SHT$$INIT_ARRAY$$Limit
00003f6d UARTClockSourceSet
00001485 UARTprintf
00003c99 UARTwrite
20007af8 _Denorm
00002be9 _Dnorm
20007b08 _Eps
20007bcc _Errno
20007bb8 _Fenv
00003ee5 _Feraise
20007b18 _Hugeval
20007b68 _Inf
20007b48 _Nan
20007b58 _Rteps
00000b0d _Sin
20007b28 _Snan
20007bbc _Tls_setup__Fenv
20007b38 _Xbig
20007b40 _Zero
20007ff4 __STACK_END
00000200 __STACK_SIZE
20007ff4 __STACK_TOP
000048d8 __TI_CINIT_Base
000048e8 __TI_CINIT_Limit
000048c4 __TI_Handler_Table_Base
000048d0 __TI_Handler_Table_Limit
000033f9 __TI_auto_init
20007bb0 __TI_cleanup_ptr
00003f41 __TI_decompress_none
00003f73 __TI_decompress_rle24
20007bb4 __TI_dtors_ptr
00000000 __TI_static_base__
00003f4f __TI_zero_init
0000318d __aeabi_cdcmpeq
0000318d __aeabi_cdcmple
000039d1 __aeabi_d2iz
0000168d __aeabi_dadd
00001b19 __aeabi_ddiv
000025f9 __aeabi_dmul
00001683 __aeabi_dsub
00003d07 __aeabi_i2d
0000330d __aeabi_memclr
0000330d __aeabi_memclr4
0000330d __aeabi_memclr8
00002f3f __aeabi_memcpy
00002f3f __aeabi_memcpy4
00002f3f __aeabi_memcpy8
0000330f __aeabi_memset
0000330f __aeabi_memset4
0000330f __aeabi_memset8
00003deb __aeabi_ui2d
00003ae9 __aeabi_uidiv
00003ae9 __aeabi_uidivmod
ffffffff __binit__
ffffffff __c_args__
20007df4 __stack
00003e5d _args_main
000037b1 _c_int00
20007ba8 _lock
00002df7 _nop
20007bd4 _orientation
00003f79 _system_pre_init
20007bac _unlock
00003a65 abort
20007ba6 bgColorHighByte
20007ba4 bgColorLowByte
ffffffff binit
00003601 clearScreen
20007ba2 colorHighByte
20007ba0 colorLowByte
00003939 copy_in
000021f1 drawDialCircle
00002401 drawDialLine
00001d85 drawDials
000027d9 drawDigital
000038a1 drawDigitalValue
00003f5b drawFastVLine
00002e9d drawLine
00003d5d drawPixel
00003cd1 drawRect
00001239 drawString
000028b9 errorScreen
00003a6d exit
00003aa5 feraiseexcept
00000829 fmod
00003f80 font_5x7
00004160 font_8x12
2000754c g_pDataQueue
20007b7c g_pLEDQueue
20007de4 g_pSPISemaphore
20007de8 g_pScreenButtonQueue
20007de0 g_pUARTSemaphore
00000000 g_pfnVectors
2000759c g_psFResultStrings
00003709 gammaAdjustmentST7735
00003ed1 getScreenWidth
000024fd initTivaForLCD
0000026d main
20007bd0 main_func_sp
00002f3f memcpy
00003315 memset
00003b2b performAction
00003291 placeInQueue
00002a61 pvPortMalloc
20007870 pxCurrentTCB
00003dc9 pxPortInitialiseStack
00003b6d screenHandler
00003851 setArea
00003f21 setColor
00003be9 setOrientation
00003bad signal
00003e29 usnprintf
00003d35 ustrncpy
00000d9d uvsnprintf
00003da5 uxListRemove
00002fdb vApplicationStackOverflowHook
00003ea5 vListInitialise
00003c5f vListInsert
00003e75 vListInsertEnd
00002dad vPortClearInterruptMask
00002de5 vPortEnableVFP
00003ef9 vPortEnterCritical
00003f0d vPortExitCritical
00003a19 vPortFree
00002db7 vPortSVCHandler
00002da3 vPortSetInterruptMask
00002dd1 vPortStartFirstTask
00003f31 vPortYield
000035a1 vTaskDelayUntil
00003659 vTaskPlaceOnEventList
00002df9 vTaskPriorityInherit
00002ca9 vTaskSwitchContext
00003801 writeCommand
00003539 writeData
00003e43 writeOption
00002d55 xPortPendSVHandler
00003985 xPortStartScheduler
00003e0d xPortSysTickHandler
0000375d xQueueCreateMutex
00003213 xQueueGenericCreate
00001eb5 xQueueGenericReceive
00002301 xQueueGenericSend
000036b1 xTaskCheckForTimeOut
000019d5 xTaskGenericCreate
00003e8d xTaskGetTickCount
00001fcd xTaskIncrementTick
00003389 xTaskRemoveFromEventList
00002991 xTaskResumeAll
GLOBAL SYMBOLS: SORTED BY Symbol Address
address name
------- ----
00000000 __TI_static_base__
00000000 g_pfnVectors
00000200 __STACK_SIZE
0000026d main
00000829 fmod
00000b0d _Sin
00000d9d uvsnprintf
00001239 drawString
00001485 UARTprintf
00001683 __aeabi_dsub
0000168d __aeabi_dadd
000019d5 xTaskGenericCreate
00001b19 __aeabi_ddiv
00001d85 drawDials
00001eb5 xQueueGenericReceive
00001fcd xTaskIncrementTick
000021f1 drawDialCircle
00002301 xQueueGenericSend
00002401 drawDialLine
000024fd initTivaForLCD
000025f9 __aeabi_dmul
000027d9 drawDigital
000028b9 errorScreen
00002991 xTaskResumeAll
00002a61 pvPortMalloc
00002b29 RGBEnable
00002be9 _Dnorm
00002ca9 vTaskSwitchContext
00002d55 xPortPendSVHandler
00002da3 vPortSetInterruptMask
00002dad vPortClearInterruptMask
00002db7 vPortSVCHandler
00002dd1 vPortStartFirstTask
00002de5 vPortEnableVFP
00002df7 _nop
00002df9 vTaskPriorityInherit
00002e9d drawLine
00002f3f __aeabi_memcpy
00002f3f __aeabi_memcpy4
00002f3f __aeabi_memcpy8
00002f3f memcpy
00002fdb vApplicationStackOverflowHook
00003075 RGBColorSet
0000318d __aeabi_cdcmpeq
0000318d __aeabi_cdcmple
00003213 xQueueGenericCreate
00003291 placeInQueue
0000330d __aeabi_memclr
0000330d __aeabi_memclr4
0000330d __aeabi_memclr8
0000330f __aeabi_memset
0000330f __aeabi_memset4
0000330f __aeabi_memset8
00003315 memset
00003389 xTaskRemoveFromEventList
000033f9 __TI_auto_init
000034d1 RGBDisable
00003539 writeData
000035a1 vTaskDelayUntil
00003601 clearScreen
00003659 vTaskPlaceOnEventList
000036b1 xTaskCheckForTimeOut
00003709 gammaAdjustmentST7735
0000375d xQueueCreateMutex
000037b1 _c_int00
00003801 writeCommand
00003851 setArea
000038a1 drawDigitalValue
00003939 copy_in
00003985 xPortStartScheduler
000039d1 __aeabi_d2iz
00003a19 vPortFree
00003a61 C$$EXIT
00003a65 abort
00003a6d exit
00003aa5 feraiseexcept
00003ae9 __aeabi_uidiv
00003ae9 __aeabi_uidivmod
00003b2b performAction
00003b6d screenHandler
00003bad signal
00003be9 setOrientation
00003c5f vListInsert
00003c99 UARTwrite
00003cd1 drawRect
00003d07 __aeabi_i2d
00003d35 ustrncpy
00003d5d drawPixel
00003da5 uxListRemove
00003dc9 pxPortInitialiseStack
00003deb __aeabi_ui2d
00003e0d xPortSysTickHandler
00003e29 usnprintf
00003e43 writeOption
00003e5d _args_main
00003e75 vListInsertEnd
00003e8d xTaskGetTickCount
00003ea5 vListInitialise
00003ebd RGBIntensitySet
00003ed1 getScreenWidth
00003ee5 _Feraise
00003ef9 vPortEnterCritical
00003f0d vPortExitCritical
00003f21 setColor
00003f31 vPortYield
00003f41 __TI_decompress_none
00003f4f __TI_zero_init
00003f5b drawFastVLine
00003f67 ResetISR
00003f6d UARTClockSourceSet
00003f73 __TI_decompress_rle24
00003f79 _system_pre_init
00003f80 font_5x7
00004160 font_8x12
000048c4 __TI_Handler_Table_Base
000048d0 __TI_Handler_Table_Limit
000048d8 __TI_CINIT_Base
000048e8 __TI_CINIT_Limit
2000754c g_pDataQueue
2000759c g_psFResultStrings
20007870 pxCurrentTCB
20007af8 _Denorm
20007b08 _Eps
20007b18 _Hugeval
20007b28 _Snan
20007b38 _Xbig
20007b40 _Zero
20007b48 _Nan
20007b58 _Rteps
20007b68 _Inf
20007b7c g_pLEDQueue
20007ba0 colorLowByte
20007ba2 colorHighByte
20007ba4 bgColorLowByte
20007ba6 bgColorHighByte
20007ba8 _lock
20007bac _unlock
20007bb0 __TI_cleanup_ptr
20007bb4 __TI_dtors_ptr
20007bb8 _Fenv
20007bbc _Tls_setup__Fenv
20007bcc _Errno
20007bd0 main_func_sp
20007bd4 _orientation
20007de0 g_pUARTSemaphore
20007de4 g_pSPISemaphore
20007de8 g_pScreenButtonQueue
20007df4 __stack
20007ff4 __STACK_END
20007ff4 __STACK_TOP
ffffffff __binit__
ffffffff __c_args__
ffffffff binit
UNDEFED SHT$$INIT_ARRAY$$Base
UNDEFED SHT$$INIT_ARRAY$$Limit
[155 symbols]