FILE
  PsiComment(BLOCK_COMMENT)('/*\n *\n *    Copyright (c) 2020 Project CHIP Authors\n *    All rights reserved.\n *\n *    Licensed under the Apache License, Version 2.0 (the "License");\n *    you may not use this file except in compliance with the License.\n *    You may obtain a copy of the License at\n *\n *        http://www.apache.org/licenses/LICENSE-2.0\n *\n *    Unless required by applicable law or agreed to in writing, software\n *    distributed under the License is distributed on an "AS IS" BASIS,\n *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *    See the License for the specific language governing permissions and\n *    limitations under the License.\n */')
  PsiWhiteSpace('\n')
  PsiComment(BLOCK_COMMENT)('/***************************************************************************/')
  PsiComment(BLOCK_COMMENT)('/**\n * Linker script for Silicon Labs EFR32MG21 devices\n * @version 5.7.2\n *******************************************************************************\n * # License\n * <b>Copyright 2018 Silicon Laboratories Inc. www.silabs.com</b>\n *******************************************************************************\n *\n * SPDX-License-Identifier: Zlib\n *\n * The licensor of this software is Silicon Laboratories Inc.\n *\n * This software is provided 'as-is', without any express or implied\n * warranty. In no event will the authors be held liable for any damages\n * arising from the use of this software.\n *\n * Permission is granted to anyone to use this software for any purpose,\n * including commercial applications, and to alter it and redistribute it\n * freely, subject to the following restrictions:\n *\n * 1. The origin of this software must not be misrepresented; you must not\n *    claim that you wrote the original software. If you use this software\n *    in a product, an acknowledgment in the product documentation would be\n *    appreciated but is not required.\n * 2. Altered source versions must be plainly marked as such, and must not be\n *    misrepresented as being the original software.\n * 3. This notice may not be removed or altered from any source distribution.\n *\n ******************************************************************************/')
  PsiWhiteSpace('\n\n')
  LSMemoryCommandImpl(MEMORY_COMMAND)
    PsiElement(MEMORY)('MEMORY')
    PsiWhiteSpace('\n')
    PsiElement({)('{')
    PsiWhiteSpace('\n  ')
    LSMemoryDeclarationImpl(MEMORY_DECLARATION)
      LSNamedMemoryDeclImpl(NAMED_MEMORY_DECL)
        PsiElement(IDENTIFIER)('FLASH')
        PsiWhiteSpace(' ')
        LSMemoryDeclAttributesImpl(MEMORY_DECL_ATTRIBUTES)
          PsiElement(()('(')
          PsiElement(IDENTIFIER)('rx')
          PsiElement())(')')
        PsiWhiteSpace(' ')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        LSOriginAssignmentImpl(ORIGIN_ASSIGNMENT)
          PsiElement(ORIGIN)('ORIGIN')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(INT)('0x00000000')
        PsiElement(,)(',')
        PsiWhiteSpace(' ')
        LSLengthAssignmentImpl(LENGTH_ASSIGNMENT)
          PsiElement(LENGTH)('LENGTH')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSBinaryOperatorImpl(BINARY_OPERATOR)
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(INT)('1048576')
            PsiWhiteSpace(' ')
            PsiElement(-)('-')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(INT)('8192')
    PsiWhiteSpace('  ')
    PsiComment(BLOCK_COMMENT)('/* 8K is reserved at top of flash on MG21 */')
    PsiWhiteSpace('\n  ')
    LSMemoryDeclarationImpl(MEMORY_DECLARATION)
      LSNamedMemoryDeclImpl(NAMED_MEMORY_DECL)
        PsiElement(IDENTIFIER)('RAM')
        PsiWhiteSpace(' ')
        LSMemoryDeclAttributesImpl(MEMORY_DECL_ATTRIBUTES)
          PsiElement(()('(')
          PsiElement(IDENTIFIER)('rwx')
          PsiElement())(')')
        PsiWhiteSpace('  ')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        LSOriginAssignmentImpl(ORIGIN_ASSIGNMENT)
          PsiElement(ORIGIN)('ORIGIN')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(INT)('0x20000000')
        PsiElement(,)(',')
        PsiWhiteSpace(' ')
        LSLengthAssignmentImpl(LENGTH_ASSIGNMENT)
          PsiElement(LENGTH)('LENGTH')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(INT)('98304')
    PsiWhiteSpace('\n')
    PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  PsiComment(BLOCK_COMMENT)('/* Linker script to place sections and symbol values. Should be used together\n * with other linker script that defines memory regions FLASH and RAM.\n * It references following symbols, which must be defined in code:\n *   Reset_Handler : Entry of reset handler\n *\n * It defines following symbols, which code can use without definition:\n *   __exidx_start\n *   __exidx_end\n *   __copy_table_start__\n *   __copy_table_end__\n *   __zero_table_start__\n *   __zero_table_end__\n *   __etext\n *   __data_start__\n *   __preinit_array_start\n *   __preinit_array_end\n *   __init_array_start\n *   __init_array_end\n *   __fini_array_start\n *   __fini_array_end\n *   __data_end__\n *   __bss_start__\n *   __bss_end__\n *   __end__\n *   end\n *   __HeapBase\n *   __HeapLimit\n *   __StackLimit\n *   __StackTop\n *   __stack\n *   __Vectors_End\n *   __Vectors_Size\n */')
  PsiWhiteSpace('\n')
  LSEntryCommandImpl(ENTRY_COMMAND)
    PsiElement(ENTRY)('ENTRY')
    PsiElement(()('(')
    PsiElement(IDENTIFIER)('Reset_Handler')
    PsiElement())(')')
  PsiWhiteSpace('\n\n')
  LSSectionsCommandImpl(SECTIONS_COMMAND)
    PsiElement(SECTIONS)('SECTIONS')
    PsiWhiteSpace('\n')
    PsiElement({)('{')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.text')
        PsiWhiteSpace(' ')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.vectors')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__Vectors_End')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__Vectors_Size')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSBinaryOperatorImpl(BINARY_OPERATOR)
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(IDENTIFIER)('__Vectors_End')
              PsiWhiteSpace(' ')
              PsiElement(-)('-')
              PsiWhiteSpace(' ')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(IDENTIFIER)('__Vectors')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__end__')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.text*')
            PsiElement())(')')
        PsiWhiteSpace('\n\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.init')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.fini')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.application_properties')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n\t')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.gecko_configuration')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n\t')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.xo_configuration')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.gatt_header')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.gatt_data')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n\n    ')
        PsiComment(BLOCK_COMMENT)('/* .ctors */')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(WILDCARD)('*crtbegin.o')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ctors')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(WILDCARD)('*crtbegin?.o')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ctors')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              LSExcludeFileStmtImpl(EXCLUDE_FILE_STMT)
                PsiElement(EXCLUDE_FILE)('EXCLUDE_FILE')
                PsiElement(()('(')
                PsiElement(WILDCARD)('*crtend?.o')
                PsiWhiteSpace(' ')
                PsiElement(WILDCARD)('*crtend.o')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(IDENTIFIER)('.ctors')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSSortKindImpl(SORT_KIND)
              PsiElement(SORT)('SORT')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ctors.*')
            PsiElement())(')')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ctors')
            PsiElement())(')')
        PsiWhiteSpace('\n\n    ')
        PsiComment(BLOCK_COMMENT)('/* .dtors */')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(WILDCARD)('*crtbegin.o')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.dtors')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(WILDCARD)('*crtbegin?.o')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.dtors')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              LSExcludeFileStmtImpl(EXCLUDE_FILE_STMT)
                PsiElement(EXCLUDE_FILE)('EXCLUDE_FILE')
                PsiElement(()('(')
                PsiElement(WILDCARD)('*crtend?.o')
                PsiWhiteSpace(' ')
                PsiElement(WILDCARD)('*crtend.o')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(IDENTIFIER)('.dtors')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSSortKindImpl(SORT_KIND)
              PsiElement(SORT)('SORT')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.dtors.*')
            PsiElement())(')')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.dtors')
            PsiElement())(')')
        PsiWhiteSpace('\n\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.rodata*')
            PsiElement())(')')
        PsiWhiteSpace('\n\n\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.eh_frame*')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('FLASH')
    PsiWhiteSpace('\n\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.ARM.extab')
        PsiWhiteSpace(' ')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ARM.extab*')
              PsiWhiteSpace(' ')
              PsiElement(IDENTIFIER)('.gnu.linkonce.armextab.*')
            PsiElement())(')')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('FLASH')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__exidx_start')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('.')
    PsiElement(;)(';')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.ARM.exidx')
        PsiWhiteSpace(' ')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ARM.exidx*')
              PsiWhiteSpace(' ')
              PsiElement(IDENTIFIER)('.gnu.linkonce.armexidx.*')
            PsiElement())(')')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('FLASH')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__exidx_end')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('.')
    PsiElement(;)(';')
    PsiWhiteSpace('\n\n\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* To copy multiple ROM to RAM sections,\n   * uncomment .copy.table section and,\n   * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/*\n  .copy.table :\n  {\n    . = ALIGN(4);\n    __copy_table_start__ = .;\n    LONG (__etext)\n    LONG (__data_start__)\n    LONG (__data_end__ - __data_start__)\n    LONG (__etext2)\n    LONG (__data2_start__)\n    LONG (__data2_end__ - __data2_start__)\n    __copy_table_end__ = .;\n  } > FLASH\n  */')
    PsiWhiteSpace('\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* To clear multiple BSS sections,\n   * uncomment .zero.table section and,\n   * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/*\n  .zero.table :\n  {\n    . = ALIGN(4);\n    __zero_table_start__ = .;\n    LONG (__bss_start__)\n    LONG (__bss_end__ - __bss_start__)\n    LONG (__bss2_start__)\n    LONG (__bss2_end__ - __bss2_start__)\n    __zero_table_end__ = .;\n  } > FLASH\n  */')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__etext')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('.')
    PsiElement(;)(';')
    PsiWhiteSpace('\n\n  ')
    PsiComment(BLOCK_COMMENT)('/*******************************************************************/')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/* Define flash block for BLE-simee & CHIP-nvm3                    */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/* simee: 9000H (36k) bytes for BLE nvm3                           */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/* chipNvm3_section: 4000H (16k) bytes for CHIP nvm3.              */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/* 8K is reserved for OpenThread's NVM which is mapped directly at */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/* the top of flash                                                */')
    PsiWhiteSpace('\n  ')
    PsiComment(BLOCK_COMMENT)('/*******************************************************************/')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('OPENTHREAD_NVM_SIZE')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(INT)('8192')
    PsiElement(;)(';')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.nvm_dummy')
        PsiWhiteSpace(' ')
        LSSectionAddressTypeImpl(SECTION_ADDRESS_TYPE)
          LSParenExprImpl(PAREN_EXPR)
            PsiElement(()('(')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('DSECT')
            PsiElement())(')')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__nvm3_dummy_begin')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiWhiteSpace(' ')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('8192')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__nvm3_dummy_simee')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.simee')
            PsiElement())(')')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiWhiteSpace(' ')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('8192')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__nvm3_dummy_chip')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('chipNvm3_section')
            PsiElement())(')')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiWhiteSpace(' ')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('8192')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(+=)('+=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('OPENTHREAD_NVM_SIZE')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiWhiteSpace(' ')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('8192')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('FLASH')
    PsiWhiteSpace('\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* Set NVM to end of FLASH */')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__nvm3Base')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSBinaryOperatorImpl(BINARY_OPERATOR)
            LSLengthExprImpl(LENGTH_EXPR)
              PsiElement(LENGTH)('LENGTH')
              PsiElement(()('(')
              PsiElement(IDENTIFIER)('FLASH')
              PsiElement())(')')
            PsiWhiteSpace(' ')
            PsiElement(-)('-')
            PsiWhiteSpace(' ')
            LSBinaryOperatorImpl(BINARY_OPERATOR)
              LSSizeofExprImpl(SIZEOF_EXPR)
                PsiElement(SIZEOF)('SIZEOF')
                PsiElement(()('(')
                PsiElement(IDENTIFIER)('.nvm_dummy')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(+)('+')
              PsiWhiteSpace(' ')
              LSParenExprImpl(PAREN_EXPR)
                PsiElement(()('(')
                LSBinaryOperatorImpl(BINARY_OPERATOR)
                  LSPrimaryExprImpl(PRIMARY_EXPR)
                    PsiElement(IDENTIFIER)('__nvm3_dummy_simee')
                  PsiWhiteSpace(' ')
                  PsiElement(-)('-')
                  PsiWhiteSpace(' ')
                  LSPrimaryExprImpl(PRIMARY_EXPR)
                    PsiElement(IDENTIFIER)('__nvm3_dummy_begin')
                PsiElement())(')')
    PsiElement(;)(';')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__nvm3ChipBase')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSBinaryOperatorImpl(BINARY_OPERATOR)
            LSLengthExprImpl(LENGTH_EXPR)
              PsiElement(LENGTH)('LENGTH')
              PsiElement(()('(')
              PsiElement(IDENTIFIER)('FLASH')
              PsiElement())(')')
            PsiWhiteSpace(' ')
            PsiElement(-)('-')
            PsiWhiteSpace(' ')
            LSBinaryOperatorImpl(BINARY_OPERATOR)
              LSSizeofExprImpl(SIZEOF_EXPR)
                PsiElement(SIZEOF)('SIZEOF')
                PsiElement(()('(')
                PsiElement(IDENTIFIER)('.nvm_dummy')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(+)('+')
              PsiWhiteSpace(' ')
              LSParenExprImpl(PAREN_EXPR)
                PsiElement(()('(')
                LSBinaryOperatorImpl(BINARY_OPERATOR)
                  LSPrimaryExprImpl(PRIMARY_EXPR)
                    PsiElement(IDENTIFIER)('__nvm3_dummy_chip')
                  PsiWhiteSpace(' ')
                  PsiElement(-)('-')
                  PsiWhiteSpace(' ')
                  LSPrimaryExprImpl(PRIMARY_EXPR)
                    PsiElement(IDENTIFIER)('__nvm3_dummy_begin')
                PsiElement())(')')
    PsiElement(;)(';')
    PsiWhiteSpace('\n\n\n  ')
    PsiComment(BLOCK_COMMENT)('/*******************************************************************/')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.data')
        PsiWhiteSpace(' ')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        LSAtExprImpl(AT_EXPR)
          PsiElement(AT)('AT')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('__etext')
          PsiElement())(')')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__data_start__')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('vtable')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.data*')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiWhiteSpace(' ')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSProvideExprImpl(PROVIDE_EXPR)
          PsiElement(PROVIDE)('PROVIDE')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__ram_func_section_start')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.ram')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSProvideExprImpl(PROVIDE_EXPR)
          PsiElement(PROVIDE)('PROVIDE')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__ram_func_section_end')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        PsiComment(BLOCK_COMMENT)('/* preinit data */')
        PsiWhiteSpace('\n    ')
        LSProvideHiddenExprImpl(PROVIDE_HIDDEN_EXPR)
          PsiElement(PROVIDE_HIDDEN)('PROVIDE_HIDDEN')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__preinit_array_start')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.preinit_array')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSProvideHiddenExprImpl(PROVIDE_HIDDEN_EXPR)
          PsiElement(PROVIDE_HIDDEN)('PROVIDE_HIDDEN')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__preinit_array_end')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        PsiComment(BLOCK_COMMENT)('/* init data */')
        PsiWhiteSpace('\n    ')
        LSProvideHiddenExprImpl(PROVIDE_HIDDEN_EXPR)
          PsiElement(PROVIDE_HIDDEN)('PROVIDE_HIDDEN')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__init_array_start')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSSortKindImpl(SORT_KIND)
              PsiElement(SORT)('SORT')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.init_array.*')
            PsiElement())(')')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.init_array')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSProvideHiddenExprImpl(PROVIDE_HIDDEN_EXPR)
          PsiElement(PROVIDE_HIDDEN)('PROVIDE_HIDDEN')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__init_array_end')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        PsiComment(BLOCK_COMMENT)('/* finit data */')
        PsiWhiteSpace('\n    ')
        LSProvideHiddenExprImpl(PROVIDE_HIDDEN_EXPR)
          PsiElement(PROVIDE_HIDDEN)('PROVIDE_HIDDEN')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__fini_array_start')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSSortKindImpl(SORT_KIND)
              PsiElement(SORT)('SORT')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.fini_array.*')
            PsiElement())(')')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.fini_array')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSProvideHiddenExprImpl(PROVIDE_HIDDEN_EXPR)
          PsiElement(PROVIDE_HIDDEN)('PROVIDE_HIDDEN')
          PsiWhiteSpace(' ')
          PsiElement(()('(')
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__fini_array_end')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
          PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.jcr*')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        PsiComment(BLOCK_COMMENT)('/* All data end */')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__data_end__')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('RAM')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.bss')
        PsiWhiteSpace(' ')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__bss_start__')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.bss*')
            PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            LSCommonFileImpl(COMMON_FILE)
              PsiElement(*)('*')
              PsiElement(()('(')
              PsiElement(COMMON)('COMMON')
              PsiElement())(')')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('.')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSAlignExprImpl(ALIGN_EXPR)
              PsiElement(ALIGN)('ALIGN')
              PsiElement(()('(')
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(INT)('4')
              PsiElement())(')')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__bss_end__')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('RAM')
    PsiWhiteSpace('\n\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.heap')
        PsiWhiteSpace(' ')
        LSSectionAddressTypeImpl(SECTION_ADDRESS_TYPE)
          LSSectionDirectiveImpl(SECTION_DIRECTIVE)
            PsiElement(()('(')
            PsiElement(COPY)('COPY')
            PsiElement())(')')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__HeapBase')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__end__')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('end')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('__end__')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('_end')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('__end__')
        PsiElement(;)(';')
        PsiWhiteSpace('\n    ')
        LSAssignmentExprImpl(ASSIGNMENT_EXPR)
          LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
            PsiElement(IDENTIFIER)('__HeapLimit')
            PsiWhiteSpace(' ')
            PsiElement(=)('=')
            PsiWhiteSpace(' ')
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('.')
        PsiElement(;)(';')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('RAM')
    PsiWhiteSpace('\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* .stack_dummy section doesn't contains any symbols. It is only\n   * used for linker to calculate size of stack sections, and assign\n   * values to stack symbols later */')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSOutputSectionDescriptionImpl(OUTPUT_SECTION_DESCRIPTION)
        PsiElement(IDENTIFIER)('.stack_dummy')
        PsiWhiteSpace(' ')
        LSSectionAddressTypeImpl(SECTION_ADDRESS_TYPE)
          LSSectionDirectiveImpl(SECTION_DIRECTIVE)
            PsiElement(()('(')
            PsiElement(COPY)('COPY')
            PsiElement())(')')
        PsiElement(:)(':')
        PsiWhiteSpace('\n  ')
        PsiElement({)('{')
        PsiWhiteSpace('\n    ')
        LSInputSectionDescriptionImpl(INPUT_SECTION_DESCRIPTION)
          PsiElement(KEEP)('KEEP')
          PsiElement(()('(')
          LSInputSectionRuleImpl(INPUT_SECTION_RULE)
            PsiElement(*)('*')
            PsiElement(()('(')
            LSInputSectionsListImpl(INPUT_SECTIONS_LIST)
              PsiElement(IDENTIFIER)('.stack*')
            PsiElement())(')')
          PsiElement())(')')
        PsiWhiteSpace('\n  ')
        PsiElement(})('}')
        PsiWhiteSpace(' ')
        LSOutputSectionRegionImpl(OUTPUT_SECTION_REGION)
          PsiElement(>)('>')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('RAM')
    PsiWhiteSpace('\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* Set stack top to end of RAM, and stack limit move down by\n   * size of stack_dummy section */')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__StackTop')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSBinaryOperatorImpl(BINARY_OPERATOR)
            LSOriginExprImpl(ORIGIN_EXPR)
              PsiElement(ORIGIN)('ORIGIN')
              PsiElement(()('(')
              PsiElement(IDENTIFIER)('RAM')
              PsiElement())(')')
            PsiWhiteSpace(' ')
            PsiElement(+)('+')
            PsiWhiteSpace(' ')
            LSLengthExprImpl(LENGTH_EXPR)
              PsiElement(LENGTH)('LENGTH')
              PsiElement(()('(')
              PsiElement(IDENTIFIER)('RAM')
              PsiElement())(')')
    PsiElement(;)(';')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssignmentExprImpl(ASSIGNMENT_EXPR)
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__StackLimit')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSBinaryOperatorImpl(BINARY_OPERATOR)
            LSPrimaryExprImpl(PRIMARY_EXPR)
              PsiElement(IDENTIFIER)('__StackTop')
            PsiWhiteSpace(' ')
            PsiElement(-)('-')
            PsiWhiteSpace(' ')
            LSSizeofExprImpl(SIZEOF_EXPR)
              PsiElement(SIZEOF)('SIZEOF')
              PsiElement(()('(')
              PsiElement(IDENTIFIER)('.stack_dummy')
              PsiElement())(')')
    PsiElement(;)(';')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSProvideExprImpl(PROVIDE_EXPR)
        PsiElement(PROVIDE)('PROVIDE')
        PsiElement(()('(')
        LSSymbolAssignmentImpl(SYMBOL_ASSIGNMENT)
          PsiElement(IDENTIFIER)('__stack')
          PsiWhiteSpace(' ')
          PsiElement(=)('=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('__StackTop')
        PsiElement())(')')
    PsiElement(;)(';')
    PsiWhiteSpace('\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* Check if data + heap + stack exceeds RAM limit */')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssertExprImpl(ASSERT_EXPR)
        PsiElement(ASSERT)('ASSERT')
        PsiElement(()('(')
        LSBinaryOperatorImpl(BINARY_OPERATOR)
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('__StackLimit')
          PsiWhiteSpace(' ')
          PsiElement(>=)('>=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('__HeapLimit')
        PsiElement(,)(',')
        PsiWhiteSpace(' ')
        PsiElement(STRING_LITERAL)('"region RAM overflowed with stack"')
        PsiElement())(')')
    PsiWhiteSpace('\n\n\n  ')
    PsiComment(BLOCK_COMMENT)('/* Check if FLASH usage exceeds FLASH size */')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssertExprImpl(ASSERT_EXPR)
        PsiElement(ASSERT)('ASSERT')
        PsiElement(()('(')
        PsiWhiteSpace(' ')
        LSBinaryOperatorImpl(BINARY_OPERATOR)
          LSLengthExprImpl(LENGTH_EXPR)
            PsiElement(LENGTH)('LENGTH')
            PsiElement(()('(')
            PsiElement(IDENTIFIER)('FLASH')
            PsiElement())(')')
          PsiWhiteSpace(' ')
          PsiElement(>=)('>=')
          PsiWhiteSpace(' ')
          LSParenExprImpl(PAREN_EXPR)
            PsiElement(()('(')
            LSBinaryOperatorImpl(BINARY_OPERATOR)
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(IDENTIFIER)('__etext')
              PsiWhiteSpace(' ')
              PsiElement(+)('+')
              PsiWhiteSpace(' ')
              LSSizeofExprImpl(SIZEOF_EXPR)
                PsiElement(SIZEOF)('SIZEOF')
                PsiElement(()('(')
                PsiElement(IDENTIFIER)('.data')
                PsiElement())(')')
            PsiElement())(')')
        PsiElement(,)(',')
        PsiWhiteSpace(' ')
        PsiElement(STRING_LITERAL)('"FLASH memory overflowed !"')
        PsiElement())(')')
    PsiWhiteSpace('\n  ')
    LSSectionStmtImpl(SECTION_STMT)
      LSAssertExprImpl(ASSERT_EXPR)
        PsiElement(ASSERT)('ASSERT')
        PsiElement(()('(')
        LSBinaryOperatorImpl(BINARY_OPERATOR)
          LSParenExprImpl(PAREN_EXPR)
            PsiElement(()('(')
            LSBinaryOperatorImpl(BINARY_OPERATOR)
              LSPrimaryExprImpl(PRIMARY_EXPR)
                PsiElement(IDENTIFIER)('__etext')
              PsiWhiteSpace(' ')
              PsiElement(+)('+')
              PsiWhiteSpace(' ')
              LSSizeofExprImpl(SIZEOF_EXPR)
                PsiElement(SIZEOF)('SIZEOF')
                PsiElement(()('(')
                PsiElement(IDENTIFIER)('.data')
                PsiElement())(')')
            PsiElement())(')')
          PsiWhiteSpace(' ')
          PsiElement(<=)('<=')
          PsiWhiteSpace(' ')
          LSPrimaryExprImpl(PRIMARY_EXPR)
            PsiElement(IDENTIFIER)('__nvm3Base')
        PsiElement(,)(',')
        PsiWhiteSpace(' ')
        PsiElement(STRING_LITERAL)('"FLASH memory overlapped with NVM section."')
        PsiElement())(')')
    PsiWhiteSpace('\n')
    PsiElement(})('}')