summaryrefslogblamecommitdiffstats
path: root/spec/build/bsps/microblaze/microblaze_fpga/linkcmds.yml
blob: 9a3ca11b514fb78ccb76e64deac3e68f441303dc (plain) (tree)




































                                                                                
                                                                                     











































































































































































































                                                                                            
SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
build-type: config-file
content: |
  /* SPDX-License-Identifier: BSD-2-Clause */

  /*
   * Copyright (C) 2021 On-Line Applications Research Corporation (OAR)
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
   * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   * POSSIBILITY OF SUCH DAMAGE.
   */

  ENTRY (_start)
  STARTUP (start.o)
  _TEXT_START_ADDR = DEFINED(_TEXT_START_ADDR) ? _TEXT_START_ADDR : 0x80000000;

  MEMORY
    {
        BRAM     (AIW) : ORIGIN = 0x00000000, LENGTH = 0x10000
        RAM   : ORIGIN = _TEXT_START_ADDR, LENGTH = ${BSP_MICROBLAZE_FPGA_RAM_LENGTH}
    }

  REGION_ALIAS ("REGION_START", BRAM);
  REGION_ALIAS ("REGION_VECTOR", BRAM);
  REGION_ALIAS ("REGION_TEXT", RAM);
  REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
  REGION_ALIAS ("REGION_RODATA", RAM);
  REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
  REGION_ALIAS ("REGION_DATA", RAM);
  REGION_ALIAS ("REGION_DATA_LOAD", RAM);
  REGION_ALIAS ("REGION_FAST_DATA", RAM);
  REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
  REGION_ALIAS ("REGION_BSS", RAM);
  REGION_ALIAS ("REGION_WORK", RAM);
  REGION_ALIAS ("REGION_STACK", RAM);

  SECTIONS
  {
    .vectors.reset 0x0 : { KEEP (*(.vectors.reset)) } = 0
    .vectors.sw_exception 0x8 : { KEEP (*(.vectors.sw_exception)) } = 0
    .vectors.interrupt 0x10 : { KEEP (*(.vectors.interrupt)) } = 0
    .vectors.debug_sw_break 0x18 : { KEEP (*(.vectors.debug_sw_break)) } = 0
    .vectors.hw_exception 0x20 : { KEEP (*(.vectors.hw_exception)) } = 0
    . = _TEXT_START_ADDR;
    .text : ALIGN_WITH_INPUT {
      bsp_section_text_begin = .;
      *(.text.unlikely .text.*_unlikely)
      *(.text .stub .text.* .gnu.linkonce.t.*)
      /* .gnu.warning sections are handled specially by elf32.em.  */
      *(.gnu.warning)
      *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
    } > REGION_TEXT AT > REGION_TEXT_LOAD
    .init : ALIGN_WITH_INPUT {
      KEEP (*(.init))
    } > REGION_TEXT AT > REGION_TEXT_LOAD
    .fini : ALIGN_WITH_INPUT {
      KEEP (*(.fini))

      /*
      * If requested, align the size of the combined start and text
      * section to the next power of two to meet MPU region
      * alignment requirements.
      */
      . = DEFINED (bsp_align_text_and_rodata_end_to_power_of_2) ?
          bsp_section_start_begin
          + ALIGN (. - bsp_section_start_begin,
          1 << LOG2CEIL (. - bsp_section_start_begin)) : .;

      bsp_section_text_end = .;
    } > REGION_TEXT AT > REGION_TEXT_LOAD
    bsp_section_text_size = bsp_section_text_end - bsp_section_text_begin;
    bsp_section_text_load_begin = LOADADDR (.text);
    bsp_section_text_load_end = bsp_section_text_load_begin + bsp_section_text_size;

    . = ALIGN(4);

    /* Added to handle pic code */
    .got : {
      *(.got)
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .got1 : {
      *(.got1)
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .got2 : {
      *(.got2)
    } > REGION_RODATA AT > REGION_RODATA_LOAD

    _frodata = . ;
    .rodata : {
      *(.rodata)
      *(.rodata.*)
      *(.gnu.linkonce.r.*)
      CONSTRUCTORS; /* Is this needed? */
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    _erodata = .;
    .eh_frame : {
      *(.eh_frame)
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .jcr : {
      *(.jcr)
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .gcc_except_table : {
      *(.gcc_except_table)
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .tdata : ALIGN_WITH_INPUT {
      _TLS_Data_begin = .;
      *(.tdata .tdata.* .gnu.linkonce.td.*)
      _TLS_Data_end = .;
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .tbss : ALIGN_WITH_INPUT {
      _TLS_BSS_begin = .;
      *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon)
      _TLS_BSS_end = .;
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin;
    _TLS_Data_begin = _TLS_Data_size != 0 ? _TLS_Data_begin : _TLS_BSS_begin;
    _TLS_Data_end = _TLS_Data_size != 0 ? _TLS_Data_end : _TLS_BSS_begin;
    _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin;
    _TLS_Size = _TLS_BSS_end - _TLS_Data_begin;
    _TLS_Alignment = MAX (ALIGNOF (.tdata), ALIGNOF (.tbss));

    .ctors : {
      _dummy_symbol__ = .;
      __CTOR_LIST__ = .;
      ___CTORS_LIST___ = .;
      KEEP (*crtbegin.o(.ctors))
      KEEP (*(EXCLUDE_FILE(*crtend.o) .ctors))
      KEEP (*(SORT(.ctors.*)))
      KEEP (*(.ctors*))
      __CTOR_END__ = .;
      ___CTORS_END___ = .;
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .dtors : {
      __DTOR_LIST__ = .;
      ___DTORS_LIST___ = .;
      KEEP (*crtbegin.o(.dtors))
      KEEP (*(EXCLUDE_FILE(*crtend.o) .dtors))
      KEEP (*(SORT(.dtors.*)))
      KEEP (*(.dtors))
      PROVIDE(__DTOR_END__ = .);
      PROVIDE(___DTORS_END___ = .);
    } > REGION_RODATA AT > REGION_RODATA_LOAD
    .rtemsroset : {
      /* Special FreeBSD linker set sections */
      __start_set_sysctl_set = .;
      *(set_sysctl_*);
      __stop_set_sysctl_set = .;
      *(set_domain_*);
      *(set_pseudo_*);

      KEEP (*(SORT(.rtemsroset.*)))
      bsp_section_rodata_end = .;
    } > REGION_RODATA AT > REGION_RODATA_LOAD

    .data : ALIGN_WITH_INPUT {
      bsp_section_data_begin = .;
      *(.data .data.* .gnu.linkonce.d.*)
      SORT(CONSTRUCTORS)
    } > REGION_DATA AT > REGION_DATA_LOAD
    .data1 : ALIGN_WITH_INPUT {
      *(.data1)
    } > REGION_DATA AT > REGION_DATA_LOAD
    .rtemsrwset : ALIGN_WITH_INPUT {
      KEEP (*(SORT(.rtemsrwset.*)))
      bsp_section_data_end = .;
    } > REGION_DATA AT > REGION_DATA_LOAD
    bsp_section_data_size = bsp_section_data_end - bsp_section_data_begin;
    bsp_section_data_load_begin = LOADADDR (.data);
    bsp_section_data_load_end = bsp_section_data_load_begin + bsp_section_data_size;

    .bss : ALIGN_WITH_INPUT {
      bsp_section_bss_begin = .;
      *(.dynbss)
      *(.bss .bss.* .gnu.linkonce.b.*)
      *(COMMON)
      bsp_section_bss_end = .;
    } > REGION_BSS AT > REGION_BSS
    bsp_section_bss_size = bsp_section_bss_end - bsp_section_bss_begin;

    . = ALIGN(8);

    .rtemsstack (NOLOAD) : ALIGN_WITH_INPUT {
      bsp_section_rtemsstack_begin = .;
      *(SORT_BY_ALIGNMENT (SORT_BY_NAME (.rtemsstack*)))
      bsp_section_rtemsstack_end = .;
    } > REGION_WORK AT > REGION_WORK
    bsp_section_rtemsstack_size = bsp_section_rtemsstack_end - bsp_section_rtemsstack_begin;

    .work : ALIGN_WITH_INPUT {
      /*
      * The work section will occupy the remaining REGION_WORK region and
      * contains the RTEMS work space and heap.
      */
      bsp_section_work_begin = .;
      . += ORIGIN (REGION_WORK) + LENGTH (REGION_WORK) - ABSOLUTE (.);
      bsp_section_work_end = .;
    } > REGION_WORK AT > REGION_WORK
    bsp_section_work_size = bsp_section_work_end - bsp_section_work_begin;

    .stack : ALIGN_WITH_INPUT {
      /*
      * The stack section will occupy the remaining REGION_STACK region and may
      * contain the task stacks.  Depending on the region distribution this
      * section may be of zero size.
      */
      bsp_section_stack_begin = .;
      . += ORIGIN (REGION_STACK) + LENGTH (REGION_STACK) - ABSOLUTE (.);
      bsp_section_stack_end = .;
    } > REGION_STACK AT > REGION_STACK
    bsp_section_stack_size = bsp_section_stack_end - bsp_section_stack_begin;

    RamBase = ORIGIN (REGION_WORK);
    RamSize = LENGTH (REGION_WORK);
    RamEnd = RamBase + RamSize;
    WorkAreaBase = bsp_section_work_begin;
    HeapSize = 0;
  }
copyrights:
- Copyright (C) 2021 On-Line Applications Research Corporation (OAR)
enabled-by: true
install-path: ${BSP_LIBDIR}
links: []
target: linkcmds
type: build