How the image size is computed by linker

0

I am trying to understand how the image size is getting computed by the linker. I am working on a project using ARM RVCT 3.1 compiler & linker tools. After compiling the source code the next process is linking, when linking has done the linker will create a binary. Here linker is linking the files at particular section by passing a scatter-loading file. After all this process the armlink.exe is producing a linker address map file, In this file i am analyzing the memory map of the image.

I have read the linker guide for using scatter-loading file, but i didn't get how the size is getting computed. Is the size representing in linker address map file is the Load region's size ? Below is the sample output of my linker address map file from linker.

Memory Map of the image

  Image Entry point : 0x00208744

  Load Region LOAD_REGION (Base: 0x00208400, Size: 0x0008e4c8, Max: 0xffffffff, ABSOLUTE)

Execution Region INIT_BASE (Base: 0x00208400, Size: 0x00000044, Max: 0xffffffff, ABSOLUTE)

...

Execution Region BUILD (Base: 0x00208444, Size: 0x00000300, Max: 0xffffffff, ABSOLUTE)

...

Execution Region CODE_SEC_1 (Base: 0x00208744, Size: 0x00003c34, Max: 0xffffffff, ABSOLUTE)

...

Execution Region CODE_SEC_2 (Base: 0x0020c378, Size: 0x000009ac, Max: 0xffffffff, ABSOLUTE)

...

Execution Region CODE_SEC_3 (Base: 0x0020cd24, Size: 0x00005b18, Max: 0xffffffff, ABSOLUTE)

...

Execution Region CODE_IN_RAM (Base: 0x0021283c, Size: 0x0005c8ac, Max: 0xffffffff, ABSOLUTE)

...

Execution Region RAM_FIRST_DATA_ADDRESS (Base: 0x0026f0e8, Size: 0x0000000c, Max: 0xffffffff, ABSOLUTE)

Base Addr    Size         Type   Attr      Idx    E Section Name        Object

...

Execution Region APP_DATA_IN_CACHABLE_BUFFERABLE_EXTERNAL_RAM_RO (Base: 0x0026f0f4, Size: 0x00004bf8, Max: 0xffffffff, ABSOLUTE)

...

Execution Region StringsRegion (Base: 0x00273cec, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE)

**** No section assigned to this execution region ****

Execution Region STACK_FOR_SCATTERLOADER (Base: 0x00273cec, Size: 0x00000118, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region DATA_IN_RAM_RW (Base: 0x00273e04, Size: 0x00000b1c, Max: 0xffffffff, ABSOLUTE)

...

Execution Region ConditionInfo (Base: 0x00274920, Size: 0x000080a4, Max: 0xffffffff, ABSOLUTE)

...

Execution Region DATA_IN_RAM_ZI (Base: 0x0027c9c4, Size: 0x00018c98, Max: 0xffffffff, ABSOLUTE)

...

Execution Region DATA_IN_RAM_UNINIT (Base: 0x0029565c, Size: 0x00001294, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region DATA_IN_RAM_SEC_1 (Base: 0x002968f0, Size: 0x00001d50, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region FIRST_UNUSED_RAM_ADDRESS (Base: 0x00298640, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region RAM_OF_PROTECTOR (Base: 0x02000000, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region RAM__ATT (Base: 0x00204000, Size: 0x00004000, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region RAM__ATT_L2 (Base: 0x00208000, Size: 0x00000400, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region CODE_IN_ITCM (Base: 0x00000000, Size: 0x00000064, Max: 0x00000c00, OVERLAY)

...

Execution Region DATA_IN_DTCM_ZI (Base: 0x00080000, Size: 0x00000000, Max: 0x00000500, OVERLAY)

**** No section assigned to this execution region ****


Execution Region VECTORS_AT_0 (Base: 0x00000000, Size: 0x00000020, Max: 0x00000040, ABSOLUTE, UNINIT)

...

Execution Region ZERO_PROTECTOR_END (Base: 0x00000020, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE)

**** No section assigned to this execution region ****


Execution Region CODE_IN_ITCM_SEC1 (Base: 0x00000020, Size: 0x00019b0c, Max: 0xffffffff, ABSOLUTE)

...

Execution Region ITCM_FIRST_UNUSED_ADDRESS (Base: 0x00019b2c, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region CODE_IN_ITCM_128KB_TO_160KB (Base: 0x00020000, Size: 0x00000000, Max: 0x00008000, OVERLAY)

**** No section assigned to this execution region ****


Execution Region ITCM_OVERFLOW_PROTECTOR (Base: 0x00040000, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region ALIGNED_SYSTEM_OBJECT_IN_DTCM (Base: 0x00080000, Size: 0x00000090, Max: 0xffffffff, ABSOLUTE)

...

Execution Region STACKS_IN_DTCM (Base: 0x00080090, Size: 0x00000964, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region ARM_LIB_STACK (Base: 0x000809f4, Size: 0x00000904, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region ARM_LIB_HEAP (Base: 0x000812f8, Size: 0x00000040, Max: 0x00000040, ABSOLUTE, UNINIT)

...

Execution Region DATA_IN_DTCM_INT (Base: 0x00081338, Size: 0x000002c0, Max: 0xffffffff, ABSOLUTE)

...

Execution Region DATA_IN_DTCM_RO (Base: 0x000815f8, Size: 0x00000024, Max: 0xffffffff, ABSOLUTE)

...

Execution Region DATA_IN_DTCM_RW (Base: 0x0008161c, Size: 0x000000c4, Max: 0xffffffff, ABSOLUTE)

...

Execution Region DATA_IN_DTCM_ZI (Base: 0x000816e0, Size: 0x0001659c, Max: 0xffffffff, ABSOLUTE)

...

Execution Region DATA_IN_DTCM_UNINIT (Base: 0x00097c7c, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE, UNINIT)

**** No section assigned to this execution region ****


Execution Region DTCM_FIRST_UNUSED_ADDRESS (Base: 0x00097c7c, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

Execution Region DTCM_OVERFLOW_PROTECTOR (Base: 0x000c0000, Size: 0x00000004, Max: 0xffffffff, ABSOLUTE, UNINIT)

...

In the above lines i am analyzing this Load Region LOAD_REGION (Base: 0x00208400, Size: 0x0008e4c8 , Max: 0xffffffff, ABSOLUTE) line. How this size is computed. I'm passing to linker a single load region with multiple root regions scf file. Any help in analyzing this is much appreciated, how the load region & execution region sizes got computed here.

linker
arm
scatter
linker-scripts
rvds
asked on Stack Overflow Dec 4, 2017 by Kumar2080 • edited Dec 5, 2017 by Kumar2080

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0