Hi,
I have a AM335x based board with 1 GB RAM (DDR3). I have defined a memory Section in linker command file as follows
MEMORY
{
DDR_MEM : org = 0x80000000 len = 0x40000000 /* This is 1GB length*/
}
/* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */
SECTIONS
{
.text:Entry : load > 0x80000000
.text : load > DDR_MEM /* CODE */
.data : load > DDR_MEM /* INITIALIZED GLOBAL AND STATIC VARIABLES */
.bss : load > DDR_MEM /* UNINITIALIZED OR ZERO INITIALIZED */
/* GLOBAL & STATIC VARIABLES */
RUN_START(bss_start)
RUN_END(bss_end)
.const : load > DDR_MEM /* GLOBAL CONSTANTS */
.stack : load > 0xDFFFFF00 /*Beyond 1GB*/
}
So the length is set to 0x40000000 which is 1 GB which is available DDR3 in my board. Now i just tried to allocate stack beyond 1GB with .stack : load > 0xDFFFFF00 /*Beyond 1GB*/ ( 0x80000000 to 0xC0000000 is available 1GB memory range). I declared a local buffer of size 1 k in the main and built the code and ran. I noticed that the local buffer is allocated stack in the address 0xDFFFCECC.
The application runs fine but my question is how does the stack gets allocated beyond the available memory address and how the code runs without any problems?
Please suggest. The map file it generates is as attached.
******************************************************************************
TI ARM Linker PC v5.2.5
******************************************************************************
>> Linked Mon Jan 25 17:59:22 2016
OUTPUT FILE NAME: <../../../../../../../binary/armv7a/cgt_ccs/am335x/beaglebone/dmtimer/Debug/dmtimerCounter.out>
ENTRY POINT SYMBOL: "Entry" address: 80000000
MEMORY CONFIGURATION
name origin length used unused attr fill
---------------------- -------- --------- -------- -------- ---- --------
DDR_MEM 80000000 40000000 00045bed 3ffba413 RWIX
SEGMENT ALLOCATION MAP
run origin load origin length init length attrs members
---------- ----------- ---------- ----------- ----- -------
80000000 80000000 000000cc 000000cc r-x
80000000 80000000 000000cc 000000cc r-x .text:Entry
800000cc 800000cc 00040000 00040000 rw-
800000cc 800000cc 00040000 00040000 rw- .data
800400cc 800400cc 000058cc 000058cc r-x
800400cc 800400cc 000058cc 000058cc r-x .text
80045998 80045998 00000201 00000000 rw-
80045998 80045998 00000201 00000000 rw- .bss
80045b9c 80045b9c 00000054 00000054 r--
80045b9c 80045b9c 00000054 00000054 r-- .const
dfffff00 dfffff00 00000008 00000000 rw-
dfffff00 dfffff00 00000008 00000000 rw- .stack
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.text:Entry
* 0 80000000 000000cc
80000000 000000c4 system.lib : init.obj (.text:Entry)
800000c4 00000008 rtsv7A8_A_le_eabi.lib : autoinit.obj (.tramp.__TI_auto_init.1)
.data 0 800000cc 00040000
800000cc 00040000 dmtimerCounter.obj (.data:buf_global)
.TI.persistent
* 0 800000cc 00000000 UNINITIALIZED
.text 0 800400cc 000058cc
800400cc 00002048 utils.lib : uartStdio.obj (.text)
80042114 00001d10 drivers.lib : uart_irda_cir.obj (.text)
80043e24 00000638 utils.lib : ascii.obj (.text)
8004445c 00000488 system.lib : cp15.obj (.text)
800448e4 0000046c platform.lib : uart.obj (.text)
80044d50 000002e4 utils.lib : consoleUtils.obj (.text)
80045034 00000280 platform.lib : uartConsole.obj (.text)
800452b4 00000180 rtsv7A8_A_le_eabi.lib : memcpy32.obj (.text)
80045434 0000010c system.lib : exceptionhandler.obj (.text)
80045540 00000104 dmtimerCounter.obj (.text)
80045644 000000f0 rtsv7A8_A_le_eabi.lib : u_div32.obj (.text)
80045734 000000b0 : memset32.obj (.text)
800457e4 000000a4 : autoinit.obj (.text)
80045888 00000088 system.lib : startup.obj (.text)
80045910 00000084 rtsv7A8_A_le_eabi.lib : cpy_tbl.obj (.text)
80045994 00000004 : i_div0.obj (.text)
.bss 0 80045998 00000201 UNINITIALIZED
80045998 00000200 system.lib : interrupt.obj (.bss:fnRAMVectors)
80045b98 00000001 (.common:ConsoleType)
.TI.noinit
* 0 80045998 00000000 UNINITIALIZED
.const 0 80045b9c 00000054
80045b9c 00000038 system.lib : startup.obj (.const:vecTbl)
80045bd4 00000014 utils.lib : uartStdio.obj (.const:.string)
80045be8 00000004 system.lib : startup.obj (.const)
80045bec 00000004 utils.lib : uartStdio.obj (.const)
.stack 0 dfffff00 00000008 UNINITIALIZED
dfffff00 00000008 --HOLE--
FAR CALL TRAMPOLINES
callee name trampoline name
callee addr tramp addr call addr call info
-------------- ----------- --------- ----------------
__TI_auto_init $Tramp$AA$S$$__TI_auto_init
800457e4 800000c4 8000009c system.lib : init.obj (.text:Entry)
[1 trampolines]
[1 trampoline calls]
GLOBAL SYMBOLS: SORTED ALPHABETICALLY BY Name
address name
------- ----
80045be8 AM335X_VECTOR_BASE
80043e24 ASCIIToDigit
80045528 AbortHandler
800448b8 CP15AuxControlFeatureDisable
800448a4 CP15AuxControlFeatureEnable
8004484c CP15BranchPredictionDisable
8004483c CP15BranchPredictionEnable
80044830 CP15BranchPredictorInvalidate
8004486c CP15ControlFeatureDisable
80044880 CP15ControlFeatureEnable
80044548 CP15DCacheClean
80044680 CP15DCacheCleanBuff
800445dc CP15DCacheCleanFlush
800446d4 CP15DCacheCleanFlushBuff
80044478 CP15DCacheDisable
800444a4 CP15DCacheEnable
800444b4 CP15DCacheFlush
80044728 CP15DCacheFlushBuff
8004485c CP15DomainAccessClientSet
8004445c CP15ICacheDisable
80044494 CP15ICacheEnable
80044670 CP15ICacheFlush
8004478c CP15ICacheFlushBuff
800447f8 CP15MMUDisable
80044810 CP15MMUEnable
800448cc CP15MainIdPrimPartNumGet
800447ec CP15TlbInvalidate
800447e0 CP15Ttb0Set
80044894 CP15TtbCtlTtb0Config
80044824 CP15VectorBaseAddrSet
80045904 CPUAbortHandler
80044f3c ConsoleUtilsGetChar
80044eb4 ConsoleUtilsGets
80044d50 ConsoleUtilsInit
80044d5c ConsoleUtilsInit1
80044d9c ConsoleUtilsPrintf
80044df4 ConsoleUtilsPrintf1
80044fac ConsoleUtilsPutChar
80044f00 ConsoleUtilsPuts
80044e4c ConsoleUtilsScanf
80044d68 ConsoleUtilsSetType
80044314 DateToStr
80043ef8 DigitToASCII
80000000 Entry
800440a8 EthrAddrToStr
80045524 FIQHandler
80045478 IRQHandler
UNDEFED SHT$$INIT_ARRAY$$Base
UNDEFED SHT$$INIT_ARRAY$$Limit
80045450 SVC_Handler
80043f94 StrToEthrAddr
800441cc TimeToStr
8004493c UART0ModuleClkConfig
80043754 UARTAutoIdleModeControl
80043500 UARTAutoRTSAutoCTSControl
80043c3c UARTAutobaudParityGet
80043cd4 UARTAutobaudSpeedGet
80043c88 UARTAutobaudWordLenGet
8004249c UARTBreakCtl
800431dc UARTCharGet
80043184 UARTCharGetNonBlocking
80043234 UARTCharGetTimeout
800432c4 UARTCharPut
80043118 UARTCharPutNonBlocking
800430c4 UARTCharsAvail
8004528c UARTConsoleGetc
8004520c UARTConsoleInit
80045234 UARTConsoleInit1
8004525c UARTConsolePutc
80045274 UARTConsolePutc1
80043bac UARTDMACounterResetControl
800429d8 UARTDMADisable
8004297c UARTDMAEnable
80043ac4 UARTDSRInterruptControl
800423e0 UARTDivisorLatchDisable
800423bc UARTDivisorLatchEnable
80042238 UARTDivisorLatchWrite
80042174 UARTDivisorValCompute
80042afc UARTEnhanFuncBitValRestore
80042a9c UARTEnhanFuncEnable
80043338 UARTFIFOCharGet
80043318 UARTFIFOCharPut
800425b8 UARTFIFOConfig
800434ac UARTFIFOEnableStatusGet
80042a10 UARTFIFORegisterWrite
80043a60 UARTFIFOTrigLvlGranControl
80043354 UARTFIFOWrite
80043798 UARTFlowCtrlTrigLvlConfig
80040680 UARTGetHexNum
800405cc UARTGetNum
80040900 UARTGetc
800402f8 UARTGets
800436cc UARTIdleModeConfigure
80042fa8 UARTIntDisable
80042ec4 UARTIntEnable
8004340c UARTIntIdentityGet
80043458 UARTIntPendingStatusGet
800424e0 UARTLineCharacConfig
8004390c UARTLoopbackModeControl
80043980 UARTModemControlClear
80043950 UARTModemControlSet
800439cc UARTModemStatusChangeCheck
800439b0 UARTModemStatusGet
80044b44 UARTModuleClkConfig
80043698 UARTModuleReset
80043d80 UARTModuleVersionNumberGet
80042114 UARTOperatingModeSelect
8004259c UARTParityModeGet
80042558 UARTParityModeSet
800448e4 UARTPinMuxSetup
80041700 UARTPrintf
80041c08 UARTPrintf1
80043654 UARTPulseShapingControl
800404a0 UARTPutHexNum
800403a4 UARTPutNum
800408d8 UARTPutc
800408ec UARTPutc1
80040188 UARTPuts
80040240 UARTPuts1
80043b90 UARTRXCTSDSRTransitionStatusGet
80043b4c UARTRXCTSDSRWakeUpConfigure
8004247c UARTRegConfModeRestore
80042404 UARTRegConfigModeEnable
800439e8 UARTResumeOperation
800433c0 UARTRxErrorGet
80043c24 UARTRxFIFOLevelGet
80040f18 UARTScanf
80043d64 UARTScratchPadRegRead
80043d20 UARTScratchPadRegWrite
800435f0 UARTSoftwareFlowCtrlOptSet
80043070 UARTSpaceAvail
8004358c UARTSpecialCharDetectControl
80040170 UARTStdioInit
8004017c UARTStdioInit1
80042b60 UARTSubConfigMSRSPRModeEn
80042c38 UARTSubConfigTCRTLRModeEn
80042d10 UARTSubConfigXOFFModeEn
80042de8 UARTTCRTLRBitValRestore
80043d9c UARTTxDMAThresholdControl
80043de0 UARTTxDMAThresholdValConfig
80043b08 UARTTxEmptyIntControl
80043bf0 UARTTxFIFOFullStatusGet
80043c0c UARTTxFIFOLevelGet
80043710 UARTWakeUpControl
80043a30 UARTWakeUpEventsDisable
80043a00 UARTWakeUpEventsEnable
800437e8 UARTXON1XOFF1ValProgram
80043818 UARTXON2XOFF2ValProgram
80043848 UARTXONAnyFeatureControl
800409f4 UARTprintf
8004090c UARTwrite
80040980 UARTwrite1
80045528 UndefInstHandler
dfffff08 __STACK_END
00000008 __STACK_SIZE
UNDEFED __TI_CINIT_Base
UNDEFED __TI_CINIT_Limit
UNDEFED __TI_Handler_Table_Base
UNDEFED __TI_Handler_Table_Limit
800457e4 __TI_auto_init
80000000 __TI_static_base__
80045994 __aeabi_idiv0
80045734 __aeabi_memclr
80045734 __aeabi_memclr4
80045734 __aeabi_memclr8
800452b4 __aeabi_memcpy
800452b4 __aeabi_memcpy4
800452b4 __aeabi_memcpy8
80045738 __aeabi_memset
80045738 __aeabi_memset4
80045738 __aeabi_memset8
80045644 __aeabi_uidiv
80045644 __aeabi_uidivmod
ffffffff __binit__
ffffffff __c_args__
dfffff00 __stack
ffffffff binit
80045b99 bss_end
80045998 bss_start
800000cc buf_global
80045910 copy_in
80045998 fnRAMVectors
80045540 main
800452b4 memcpy
80045744 memset
80045888 start_boot
GLOBAL SYMBOLS: SORTED BY Symbol Address
address name
------- ----
00000008 __STACK_SIZE
80000000 Entry
80000000 __TI_static_base__
800000cc buf_global
80040170 UARTStdioInit
8004017c UARTStdioInit1
80040188 UARTPuts
80040240 UARTPuts1
800402f8 UARTGets
800403a4 UARTPutNum
800404a0 UARTPutHexNum
800405cc UARTGetNum
80040680 UARTGetHexNum
800408d8 UARTPutc
800408ec UARTPutc1
80040900 UARTGetc
8004090c UARTwrite
80040980 UARTwrite1
800409f4 UARTprintf
80040f18 UARTScanf
80041700 UARTPrintf
80041c08 UARTPrintf1
80042114 UARTOperatingModeSelect
80042174 UARTDivisorValCompute
80042238 UARTDivisorLatchWrite
800423bc UARTDivisorLatchEnable
800423e0 UARTDivisorLatchDisable
80042404 UARTRegConfigModeEnable
8004247c UARTRegConfModeRestore
8004249c UARTBreakCtl
800424e0 UARTLineCharacConfig
80042558 UARTParityModeSet
8004259c UARTParityModeGet
800425b8 UARTFIFOConfig
8004297c UARTDMAEnable
800429d8 UARTDMADisable
80042a10 UARTFIFORegisterWrite
80042a9c UARTEnhanFuncEnable
80042afc UARTEnhanFuncBitValRestore
80042b60 UARTSubConfigMSRSPRModeEn
80042c38 UARTSubConfigTCRTLRModeEn
80042d10 UARTSubConfigXOFFModeEn
80042de8 UARTTCRTLRBitValRestore
80042ec4 UARTIntEnable
80042fa8 UARTIntDisable
80043070 UARTSpaceAvail
800430c4 UARTCharsAvail
80043118 UARTCharPutNonBlocking
80043184 UARTCharGetNonBlocking
800431dc UARTCharGet
80043234 UARTCharGetTimeout
800432c4 UARTCharPut
80043318 UARTFIFOCharPut
80043338 UARTFIFOCharGet
80043354 UARTFIFOWrite
800433c0 UARTRxErrorGet
8004340c UARTIntIdentityGet
80043458 UARTIntPendingStatusGet
800434ac UARTFIFOEnableStatusGet
80043500 UARTAutoRTSAutoCTSControl
8004358c UARTSpecialCharDetectControl
800435f0 UARTSoftwareFlowCtrlOptSet
80043654 UARTPulseShapingControl
80043698 UARTModuleReset
800436cc UARTIdleModeConfigure
80043710 UARTWakeUpControl
80043754 UARTAutoIdleModeControl
80043798 UARTFlowCtrlTrigLvlConfig
800437e8 UARTXON1XOFF1ValProgram
80043818 UARTXON2XOFF2ValProgram
80043848 UARTXONAnyFeatureControl
8004390c UARTLoopbackModeControl
80043950 UARTModemControlSet
80043980 UARTModemControlClear
800439b0 UARTModemStatusGet
800439cc UARTModemStatusChangeCheck
800439e8 UARTResumeOperation
80043a00 UARTWakeUpEventsEnable
80043a30 UARTWakeUpEventsDisable
80043a60 UARTFIFOTrigLvlGranControl
80043ac4 UARTDSRInterruptControl
80043b08 UARTTxEmptyIntControl
80043b4c UARTRXCTSDSRWakeUpConfigure
80043b90 UARTRXCTSDSRTransitionStatusGet
80043bac UARTDMACounterResetControl
80043bf0 UARTTxFIFOFullStatusGet
80043c0c UARTTxFIFOLevelGet
80043c24 UARTRxFIFOLevelGet
80043c3c UARTAutobaudParityGet
80043c88 UARTAutobaudWordLenGet
80043cd4 UARTAutobaudSpeedGet
80043d20 UARTScratchPadRegWrite
80043d64 UARTScratchPadRegRead
80043d80 UARTModuleVersionNumberGet
80043d9c UARTTxDMAThresholdControl
80043de0 UARTTxDMAThresholdValConfig
80043e24 ASCIIToDigit
80043ef8 DigitToASCII
80043f94 StrToEthrAddr
800440a8 EthrAddrToStr
800441cc TimeToStr
80044314 DateToStr
8004445c CP15ICacheDisable
80044478 CP15DCacheDisable
80044494 CP15ICacheEnable
800444a4 CP15DCacheEnable
800444b4 CP15DCacheFlush
80044548 CP15DCacheClean
800445dc CP15DCacheCleanFlush
80044670 CP15ICacheFlush
80044680 CP15DCacheCleanBuff
800446d4 CP15DCacheCleanFlushBuff
80044728 CP15DCacheFlushBuff
8004478c CP15ICacheFlushBuff
800447e0 CP15Ttb0Set
800447ec CP15TlbInvalidate
800447f8 CP15MMUDisable
80044810 CP15MMUEnable
80044824 CP15VectorBaseAddrSet
80044830 CP15BranchPredictorInvalidate
8004483c CP15BranchPredictionEnable
8004484c CP15BranchPredictionDisable
8004485c CP15DomainAccessClientSet
8004486c CP15ControlFeatureDisable
80044880 CP15ControlFeatureEnable
80044894 CP15TtbCtlTtb0Config
800448a4 CP15AuxControlFeatureEnable
800448b8 CP15AuxControlFeatureDisable
800448cc CP15MainIdPrimPartNumGet
800448e4 UARTPinMuxSetup
8004493c UART0ModuleClkConfig
80044b44 UARTModuleClkConfig
80044d50 ConsoleUtilsInit
80044d5c ConsoleUtilsInit1
80044d68 ConsoleUtilsSetType
80044d9c ConsoleUtilsPrintf
80044df4 ConsoleUtilsPrintf1
80044e4c ConsoleUtilsScanf
80044eb4 ConsoleUtilsGets
80044f00 ConsoleUtilsPuts
80044f3c ConsoleUtilsGetChar
80044fac ConsoleUtilsPutChar
8004520c UARTConsoleInit
80045234 UARTConsoleInit1
8004525c UARTConsolePutc
80045274 UARTConsolePutc1
8004528c UARTConsoleGetc
800452b4 __aeabi_memcpy
800452b4 __aeabi_memcpy4
800452b4 __aeabi_memcpy8
800452b4 memcpy
80045450 SVC_Handler
80045478 IRQHandler
80045524 FIQHandler
80045528 AbortHandler
80045528 UndefInstHandler
80045540 main
80045644 __aeabi_uidiv
80045644 __aeabi_uidivmod
80045734 __aeabi_memclr
80045734 __aeabi_memclr4
80045734 __aeabi_memclr8
80045738 __aeabi_memset
80045738 __aeabi_memset4
80045738 __aeabi_memset8
80045744 memset
800457e4 __TI_auto_init
80045888 start_boot
80045904 CPUAbortHandler
80045910 copy_in
80045994 __aeabi_idiv0
80045998 bss_start
80045998 fnRAMVectors
80045b99 bss_end
80045be8 AM335X_VECTOR_BASE
dfffff00 __stack
dfffff08 __STACK_END
ffffffff __binit__
ffffffff __c_args__
ffffffff binit
UNDEFED SHT$$INIT_ARRAY$$Base
UNDEFED SHT$$INIT_ARRAY$$Limit
UNDEFED __TI_CINIT_Base
UNDEFED __TI_CINIT_Limit
UNDEFED __TI_Handler_Table_Base
UNDEFED __TI_Handler_Table_Limit
[186 symbols]