문제

I'm having trouble with my linker script. The sections .data2, .nonsharedram, and .bss has the wrong LMA. They should be placed in FLASH but are instead placed in the SHARED1 and SHARED2 area.

Linker script:

MEMORY
{
  FLASH      : org =  0x100000, len = 1M
  NON_SHARED : org =     0x100, len = 0x4600
  STACK      : org =    0x4700, len = 0x900
  BOOTPROG   : org =    0x8080, len = 0x1D80
  SHARED1    : org =   0x10000, len = 0x3000
  SHARED2    : org =   0x18000, len = 0x4000
  LATCH      : org =   0x40000, len = 2
  DSPCODE    : org = 0x1030000, len = 0x4000
  EXTRAM     : org =  0x200000, len = 1M
}

SECTIONS
{
  .cstack 0x4700 (NOLOAD) : {
    __STACK_START = .;
    . = . + 0x800;
    _STACK_END = . -4;
  } >STACK
  .istack 0x4F00 (NOLOAD) : {
    __ISTACK_START = .;
    . = . + 0x100;
    _ISTACK_END = . -4;
  } >STACK
  .bootprog        0x8080 (NOLOAD) : { *(.bootprog); }      >BOOTPROG
  .bmcdataram     0x10000 (NOLOAD) : { *(.bmcdataram); }    >SHARED1
  .dspdataram     0x102C0 (NOLOAD) : { *(.dspdataram); }    >SHARED1
  .pwron_ctrl     0x12000 (NOLOAD) : { *(.pwron_ctrl); }    >SHARED1
  .dspstack       0x12F00 (NOLOAD) : { *(.dspstack); }      >SHARED1
  .dsp2dataram    0x18000 (NOLOAD) : { *(.dsp2dataram); }   >SHARED2
  .output_latch   0x40000 (NOLOAD) : { *(.output_latch); }  >LATCH
  .dspcoderam   0x1030000 (NOLOAD) : { *(.dspcoderam); }    >DSPCODE
  .promst 0x100000 : 
    {
      *(.promst)
    } >FLASH
  .version 0x100100 :
    { 
      *(.version) 
    } >FLASH
  .cstart 0x100200 : 
    { 
      *(.cstart) 
    } >FLASH
  .rodata ALIGN(0x2) : AT (ADDR (.cstart) + SIZEOF (.cstart))
      { *(.rodata*) ; 
    } >FLASH
  .text : AT (ADDR (.rodata) + SIZEOF (.rodata))
    { 
      *(.text); 
      *(.ctors); 
      *(.dtors); 
      *(.eh_frame); 
      *(.jcr); 
    } >FLASH
  .init ALIGN(0x2) : AT (ADDR (.text) + SIZEOF (.text))
    { 
      *(.init*) ; 
    } >FLASH
  .fini ALIGN(0x2) : AT (ADDR (.init) + SIZEOF (.init))
    { 
      *(.fini*) ; 
    } >FLASH
  .data 0x12004 : AT (ADDR (.fini) + SIZEOF (.fini))
    {
      _datas = . ;
      *(EXCLUDE_FILE (*lib_a-impure.o *lib_a-mallocr.o) .data); 
      _datae = . ;
    } >SHARED1
  .data2 0x19000 : AT (ADDR (.data) + SIZEOF (.data))
    { 
      _data2s = . ;
      *lib_a-impure.o(.data); 
      *lib_a-mallocr.o(.data);
      _data2e = . ;
    } >SHARED2
  .nonsharedram 0x100 : AT (ADDR (.data2) + SIZEOF (.data2))
    { 
      _nonsharedrams = . ;
      *(.nonsharedram);
      _nonsharedrame = . ;
    } >NON_SHARED
  .bss 0x200000 : AT (ADDR (.data2) + SIZEOF (.data2))
    { 
      _bsss = . ;
      *(.bss); 
      *(COMMON); 
      _bsse = . ;
    } >EXTRAM
}

From objdump:

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .cstack       00000800  00004700  00004700  000fbf70  2**0
                  CONTENTS
  1 .istack       00000100  00004f00  00004f00  000fc770  2**0
                  CONTENTS
  2 .bootprog     00001d7f  00008080  00008080  000001d4  2**1
                  ALLOC
  3 .bmcdataram   00000210  00010000  00010000  000001d4  2**0
                  ALLOC
  4 .dspdataram   00001d40  000102c0  000102c0  000001d4  2**1
                  ALLOC
  5 .pwron_ctrl   00000004  00012000  00012000  000001d4  2**2
                  ALLOC
  6 .dsp2dataram  00001000  00018000  00018000  000009a8  2**1
                  ALLOC
  7 .output_latch 00000002  00040000  00040000  00000aac  2**1
                  ALLOC
  8 .dspcoderam   00004000  01030000  01030000  000fbf70  2**1
                  ALLOC
  9 .promst       00000056  00100000  00100000  00000aac  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 10 .version      00000015  00100100  00100100  00000b02  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 11 .cstart       00000042  00100200  00100200  00000b18  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 12 .rodata       0009af26  00100242  00100242  00000b5a  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 13 .text         0005fb00  0019b168  0019b168  0009ba80  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 14 .init         0000000c  001fac68  001fac68  000fb580  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 15 .fini         00000008  001fac74  001fac74  000fb58c  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
 16 .data         000009dc  00012004  001fac7c  000fb594  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 17 .data2        000007d4  00019000  000129e0  000001d4  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 18 .nonsharedram 00000104  00000100  000197d4  000009a8  2**2
                  CONTENTS, ALLOC, LOAD, DATA
 19 .bss          0001e6f4  00200000  000197d4  00000aac  2**2
                  ALLOC
 20 .comment      0000004b  00000000  00000000  000fc870  2**0
                  CONTENTS, READONLY
 21 .debug_frame  00015a84  00000000  00000000  000fc8bc  2**2
                  CONTENTS, READONLY, DEBUGGING
 22 .debug_abbrev 00006fe7  00000000  00000000  00112340  2**0
                  CONTENTS, READONLY, DEBUGGING
 23 .debug_info   00025b72  00000000  00000000  00119327  2**0
                  CONTENTS, READONLY, DEBUGGING
 24 .debug_line   00008f7a  00000000  00000000  0013ee99  2**0
                  CONTENTS, READONLY, DEBUGGING
 25 .debug_loc    0001db0a  00000000  00000000  00147e13  2**0
                  CONTENTS, READONLY, DEBUGGING
 26 .debug_pubnames 00000e8c  00000000  00000000  0016591d  2**0
                  CONTENTS, READONLY, DEBUGGING
 27 .debug_pubtypes 00003612  00000000  00000000  001667a9  2**0
                  CONTENTS, READONLY, DEBUGGING
 28 .debug_aranges 000008c0  00000000  00000000  00169dbb  2**0
                  CONTENTS, READONLY, DEBUGGING
 29 .debug_str    0000297e  00000000  00000000  0016a67b  2**0
                  CONTENTS, READONLY, DEBUGGING
 30 .debug_ranges 00000648  00000000  00000000  0016cff9  2**0
                  CONTENTS, READONLY, DEBUGGING
도움이 되었습니까?

해결책

Found out I should use:

AT (LOADADDR (.nonsharedram) + SIZEOF (.nonsharedram))

Instead of

AT (ADDR (.nonsharedram) + SIZEOF (.nonsharedram))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top