Перейти к содержанию
    

Размещение части функций в отдельной секции

Чего-то не выходит каменный цветок...

То ли лыжи сломались...

Вот исходный скрипт:

/* Default linker script, for normal executables */
OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")
OUTPUT_ARCH(msp:14)
MEMORY
{
 text   (rx)       : ORIGIN = 0x1100,     LENGTH = 0xeee0
 data   (rwx)      : ORIGIN = 0x0200,     LENGTH = 2048
 vectors (rw)      : ORIGIN = 0xffe0,     LENGTH = 32
 bootloader(rx)    : ORIGIN = 0x0c00,     LENGTH = 1K
 infomem(rx)       : ORIGIN = 0x1000,     LENGTH = 256
 infomemnobits(rx) : ORIGIN = 0x1000,     LENGTH = 256
}
SECTIONS
{
 /* Read-only sections, merged into text segment.  */
 .hash          : { *(.hash)             }
 .dynsym        : { *(.dynsym)           }
 .dynstr        : { *(.dynstr)           }
 .gnu.version   : { *(.gnu.version)      }
 .gnu.version_d   : { *(.gnu.version_d)  }
 .gnu.version_r   : { *(.gnu.version_r)  }
 .rel.init      : { *(.rel.init) }
 .rela.init     : { *(.rela.init) }
 .rel.text      :
   {
     *(.rel.text)
     *(.rel.text.*)
     *(.rel.gnu.linkonce.t*)
   }
 .rela.text     :
   {
     *(.rela.text)
     *(.rela.text.*)
     *(.rela.gnu.linkonce.t*)
   }
 .rel.fini      : { *(.rel.fini) }
 .rela.fini     : { *(.rela.fini) }
 .rel.rodata    :
   {
     *(.rel.rodata)
     *(.rel.rodata.*)
     *(.rel.gnu.linkonce.r*)
   }
 .rela.rodata   :
   {
     *(.rela.rodata)
     *(.rela.rodata.*)
     *(.rela.gnu.linkonce.r*)
   }
 .rel.data      :
   {
     *(.rel.data)
     *(.rel.data.*)
     *(.rel.gnu.linkonce.d*)
   }
 .rela.data     :
   {
     *(.rela.data)
     *(.rela.data.*)
     *(.rela.gnu.linkonce.d*)
   }
 .rel.ctors     : { *(.rel.ctors)        }
 .rela.ctors    : { *(.rela.ctors)       }
 .rel.dtors     : { *(.rel.dtors)        }
 .rela.dtors    : { *(.rela.dtors)       }
 .rel.got       : { *(.rel.got)          }
 .rela.got      : { *(.rela.got)         }
 .rel.bss       : { *(.rel.bss)          }
 .rela.bss      : { *(.rela.bss)         }
 .rel.plt       : { *(.rel.plt)          }
 .rela.plt      : { *(.rela.plt)         }
 /* Internal text space.  */
 .text :
 {
   . = ALIGN(2);
   *(.init)
   KEEP(*(.init))
   *(.init0)  /* Start here after reset.               */
   KEEP(*(.init0))
   *(.init1)  /* User definable.                       */
   KEEP(*(.init1))
   *(.init2)  /* Initialize stack.                     */
   KEEP(*(.init2))
   *(.init3)  /* Initialize hardware, user definable.  */
   KEEP(*(.init3))
   *(.init4)  /* Copy data to .data, clear bss.        */
   KEEP(*(.init4))
   *(.init5)  /* User definable.                       */
   KEEP(*(.init5))
   *(.init6)  /* C++ constructors.                     */
   KEEP(*(.init6))
   *(.init7)  /* User definable.                       */
   KEEP(*(.init7))
   *(.init8)  /* User definable.                       */
   KEEP(*(.init8))
   *(.init9)  /* Call main().                          */
   KEEP(*(.init9))
    __ctors_start = . ;
    *(.ctors)
    KEEP(*(.ctors))
    __ctors_end = . ;
    __dtors_start = . ;
    *(.dtors)
    KEEP(*(.dtors))
    __dtors_end = . ;
   . = ALIGN(2);
   *(.text)
   . = ALIGN(2);
   *(.text.*)
   . = ALIGN(2);
   *(.fini9)  /* Jumps here after main(). User definable.  */
   KEEP(*(.fini9))
   *(.fini8)  /* User definable.                           */
   KEEP(*(.fini8))
   *(.fini7)  /* User definable.                           */
   KEEP(*(.fini7))
   *(.fini6)  /* C++ destructors.                          */
   KEEP(*(.fini6))
   *(.fini5)  /* User definable.                           */
   KEEP(*(.fini5))
   *(.fini4)  /* User definable.                           */
   KEEP(*(.fini4))
   *(.fini3)  /* User definable.                           */
   KEEP(*(.fini3))
   *(.fini2)  /* User definable.                           */
   KEEP(*(.fini2))
   *(.fini1)  /* User definable.                           */
   KEEP(*(.fini1))
   *(.fini0)  /* Infinite loop after program termination.  */
   KEEP(*(.fini0))
   *(.fini)
   KEEP(*(.fini))
   _etext = .;
 }  > text
 .data   :
 {
    PROVIDE (__data_start = .) ;
   . = ALIGN(2);
   *(.data)
   *(SORT_BY_ALIGNMENT(.data.*))
   . = ALIGN(2);
   *(.gnu.linkonce.d*)
   . = ALIGN(2);
    _edata = . ;
 }  > data AT > text
   PROVIDE (__data_load_start = LOADADDR(.data) );
   PROVIDE (__data_size = SIZEOF(.data) );
 /* Bootloader.  */
 .bootloader   :
 {
    PROVIDE (__boot_start = .) ;
   *(.bootloader)
   . = ALIGN(2);
   *(.bootloader.*)
 }  > bootloader
 /* Information memory.  */
 .infomem   :
 {
   *(.infomem)
   . = ALIGN(2);
   *(.infomem.*)
 }  > infomem
 /* Information memory (not loaded into MPU).  */
 .infomemnobits   :
 {
   *(.infomemnobits)
   . = ALIGN(2);
   *(.infomemnobits.*)
 }  > infomemnobits
 .bss   :
 {
    PROVIDE (__bss_start = .) ;
   *(.bss)
   *(SORT_BY_ALIGNMENT(.bss.*))
   *(COMMON)
    PROVIDE (__bss_end = .) ;
    _end = . ;
 }  > data
   PROVIDE (__bss_size = SIZEOF(.bss) );
 .noinit   :
 {
    PROVIDE (__noinit_start = .) ;
   *(.noinit)
   *(.noinit.*)
   *(COMMON)
    PROVIDE (__noinit_end = .) ;
    _end = . ;
 }  > data
 .vectors  :
 {
    PROVIDE (__vectors_start = .) ;
   *(.vectors*)
   KEEP(*(.vectors*))
    _vectors_end = . ;
 }  > vectors
 /* Stabs for profiling information*/
 .profiler 0 : { *(.profiler) }
 /* Stabs debugging sections.  */
 .stab 0 : { *(.stab) }
 .stabstr 0 : { *(.stabstr) }
 .stab.excl 0 : { *(.stab.excl) }
 .stab.exclstr 0 : { *(.stab.exclstr) }
 .stab.index 0 : { *(.stab.index) }
 .stab.indexstr 0 : { *(.stab.indexstr) }
 .comment 0 : { *(.comment) }
 /* DWARF debug sections.
    Symbols in the DWARF debugging sections are relative to the beginning
    of the section so we begin them at 0.  */
 /* DWARF 1 */
 .debug          0 : { *(.debug) }
 .line           0 : { *(.line) }
 /* GNU DWARF 1 extensions */
 .debug_srcinfo  0 : { *(.debug_srcinfo) }
 .debug_sfnames  0 : { *(.debug_sfnames) }
 /* DWARF 1.1 and DWARF 2 */
 .debug_aranges  0 : { *(.debug_aranges) }
 .debug_pubnames 0 : { *(.debug_pubnames) }
 /* DWARF 2 */
 .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
 .debug_abbrev   0 : { *(.debug_abbrev) }
 .debug_line     0 : { *(.debug_line) }
 .debug_frame    0 : { *(.debug_frame) }
 .debug_str      0 : { *(.debug_str) }
 .debug_loc      0 : { *(.debug_loc) }
 .debug_macinfo  0 : { *(.debug_macinfo) }
 /* DWARF 3 */
 .debug_pubtypes 0 : { *(.debug_pubtypes) }
 .debug_ranges   0 : { *(.debug_ranges) }
 PROVIDE (__stack = 0xa00) ;
 PROVIDE (__data_start_rom = _etext) ;
 PROVIDE (__data_end_rom   = _etext + SIZEOF (.data)) ;
 PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
 PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
 PROVIDE (__subdevice_has_heap = 0) ;
}

 

msp430x149.txt

 

Куда надо вставлять вышеописанный кусок с подсекцией?

 

Пробовали в разные места, выдаёт ошибку либо на строке с названием новой секции, либо на { следом за ней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чего-то не выходит каменный цветок...

То ли лыжи сломались...

 

 

Куда надо вставлять вышеописанный кусок с подсекцией?

 

Пробовали в разные места, выдаёт ошибку либо на строке с названием новой секции, либо на { следом за ней.

 

Вот такой цветочек у меня вышел

.text : 
    { 
        KEEP(*(.isr_vector .isr_vector.*)) 
        *(.text .text.* .gnu.linkonce.t.*)           
        *(.glue_7t) *(.glue_7)                        
        *(.rodata .rodata* .gnu.linkonce.r.*)
        __start_metrology = .;
        *(.metrology .metrology.* .gnu.linkonce.t.*)
        __stop_metrology = .;                              
    } > rom

 

И выдержки из map файла

 

.rodata        0x08000d4b       0x10 release/obj/USART.o
                0x08000d4b                HEX
.rodata.str1.1
                0x08000d5b        0x3 release/obj/USART.o
                                  0x6 (size before relaxing)
*fill*         0x08000d5e        0x2 00
.rodata        0x08000d60       0x1c release/obj/Encoder.o
                0x08000d60                LCD_time_add
                0x08000d6c                pos
                0x08000d70                val_delta
.rodata.str1.1
                0x08000d7c       0x1e release/obj/Encoder.o
                                 0x21 (size before relaxing)
                0x08000d9a                __start_metrology = .
*(.metrology .metrology.* .gnu.linkonce.t.*)
*fill*         0x08000d9a        0x2 00
.metrology     0x08000d9c       0x24 release/obj/main.o
                0x08000d9c                ShowMiddleTemp
                0x08000dc0                __stop_metrology = .

.vfp11_veneer   0x08000dc0        0x0
.vfp11_veneer  0x00000000        0x0 linker stubs

 

 

Посоветуйте ещё, где по скриптам линкера толковая инфа.

Желательно прямой ссылкой.

Thnks.

ld.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посоветуйте ещё, где по скриптам линкера толковая инфа.

Желательно прямой ссылкой.

http://sourceware.org/binutils/docs/ld/Scripts.html

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...