| /* |
| * Copyright (C) 2018 Synaptics Incorporated. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND |
| * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, |
| * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY |
| * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR |
| * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE |
| * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND |
| * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF |
| * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT |
| * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY |
| * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS. |
| */ |
| |
| /* |
| * bootloader memory layout: |
| * 0x04100000 - 0x04500000 4096kB translation table |
| * 0x04500000 - 0x04800000 3072kB code, rodata, data, bss |
| * 0x04800000 - 0x04E00000 6144kB heap |
| * 0x04E00000 - 0x04FF0000 1984kB stack |
| * |
| *******************************************************************************/ |
| |
| OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64") |
| OUTPUT_ARCH(aarch64) |
| ENTRY(BootLoaderEntry) |
| |
| MEMORY |
| { |
| MEM_TTB (rw) : ORIGIN = 0x04100000, LENGTH = 0x00100000 |
| MEM_RUNTIME (rwx) : ORIGIN = 0x04500000, LENGTH = 0x00300000 |
| MEM_HEAP (rw) : ORIGIN = 0x04800000, LENGTH = 0x00600000 |
| MEM_STACK (rw) : ORIGIN = 0x04E00000, LENGTH = 0x001F0000 |
| } |
| |
| SECTIONS |
| { |
| . = 0x04100000; |
| . = ALIGN(0x1000); |
| __ttb_base_start = .; |
| |
| . = 0x04100000 + 0x400000 + 0x80000; |
| .text ALIGN(32) : |
| { |
| *(.text .text.*) |
| } >MEM_RUNTIME |
| |
| .rodata : |
| { |
| *(.rodata .rodata.*) |
| } >MEM_RUNTIME |
| |
| .rela : |
| { |
| *(.rela.*) |
| } >MEM_RUNTIME |
| |
| .got : |
| { |
| *(.got.plt) |
| *(.igot.plt) |
| *(.got) |
| *(.igot) |
| } >MEM_RUNTIME |
| |
| .plt : |
| { |
| *(.plt) |
| *(.iplt) |
| } >MEM_RUNTIME |
| |
| .data ALIGN(32) : |
| { |
| *(.data .data.*) |
| } >MEM_RUNTIME |
| |
| .bss ALIGN(32): |
| { |
| __bss = .; |
| *(.bss .bss.*) |
| *(COMMON) |
| __bss_end = .; |
| } >MEM_RUNTIME |
| |
| . = 0x04800000; |
| .heap ALIGN(32): |
| { |
| __heap_start = .; |
| . = . + 0x600000; |
| __heap_end = .; |
| } >MEM_HEAP |
| |
| . = 0x04E00000; |
| .stack ALIGN(32): |
| { |
| __stack_stop = .; |
| . = . + 0x1F0000; |
| __stack_start = .; |
| } >MEM_STACK |
| } |