2018-02-27 22:39:27 -05:00
/* SPDX-License-Identifier: GPL-2.0 */
# ifdef CONFIG_HOTPLUG_CPU
# define ARM_CPU_DISCARD(x)
# define ARM_CPU_KEEP(x) x
# else
# define ARM_CPU_DISCARD(x) x
# define ARM_CPU_KEEP(x)
# endif
# if (defined(CONFIG_SMP_ON_UP) && !defined(CONFIG_DEBUG_SPINLOCK)) || \
defined ( CONFIG_GENERIC_BUG ) | | defined ( CONFIG_JUMP_LABEL )
# define ARM_EXIT_KEEP(x) x
# define ARM_EXIT_DISCARD(x)
# else
# define ARM_EXIT_KEEP(x)
# define ARM_EXIT_DISCARD(x) x
# endif
2018-03-05 16:34:03 -05:00
# ifdef CONFIG_MMU
# define ARM_MMU_KEEP(x) x
# define ARM_MMU_DISCARD(x)
# else
# define ARM_MMU_KEEP(x)
# define ARM_MMU_DISCARD(x) x
# endif
2018-02-27 22:39:27 -05:00
# define PROC_INFO \
. = ALIGN ( 4 ) ; \
2018-05-17 08:01:28 +01:00
__proc_info_begin = . ; \
2018-02-27 22:39:27 -05:00
* ( . proc . info . init ) \
2018-05-17 08:01:28 +01:00
__proc_info_end = . ;
2018-02-27 22:39:27 -05:00
# define IDMAP_TEXT \
ALIGN_FUNCTION ( ) ; \
2018-05-17 08:01:28 +01:00
__idmap_text_start = . ; \
2018-02-27 22:39:27 -05:00
* ( . idmap . text ) \
2018-05-17 08:01:28 +01:00
__idmap_text_end = . ; \
2018-02-27 22:39:27 -05:00
2018-03-05 16:34:03 -05:00
# define ARM_DISCARD \
* ( . ARM . exidx . exit . text ) \
* ( . ARM . extab . exit . text ) \
2018-09-13 12:59:59 +02:00
* ( . ARM . exidx . text . exit ) \
* ( . ARM . extab . text . exit ) \
2018-03-05 16:34:03 -05:00
ARM_CPU_DISCARD ( * ( . ARM . exidx . cpuexit . text ) ) \
ARM_CPU_DISCARD ( * ( . ARM . extab . cpuexit . text ) ) \
ARM_EXIT_DISCARD ( EXIT_TEXT ) \
ARM_EXIT_DISCARD ( EXIT_DATA ) \
EXIT_CALL \
ARM_MMU_DISCARD ( * ( . text . fixup ) ) \
ARM_MMU_DISCARD ( * ( __ex_table ) ) \
* ( . discard ) \
* ( . discard . * )
2018-03-05 16:34:03 -05:00
# define ARM_TEXT \
IDMAP_TEXT \
__entry_text_start = . ; \
* ( . entry . text ) \
__entry_text_end = . ; \
IRQENTRY_TEXT \
SOFTIRQENTRY_TEXT \
TEXT_TEXT \
SCHED_TEXT \
CPUIDLE_TEXT \
LOCK_TEXT \
KPROBES_TEXT \
* ( . gnu . warning ) \
* ( . glue_7 ) \
* ( . glue_7t ) \
. = ALIGN ( 4 ) ; \
* ( . got ) /* Global offset table */ \
ARM_CPU_KEEP ( PROC_INFO )
2018-03-01 17:32:28 -05:00
/* Stack unwinding tables */
# define ARM_UNWIND_SECTIONS \
. = ALIGN ( 8 ) ; \
. ARM . unwind_idx : { \
__start_unwind_idx = . ; \
* ( . ARM . exidx * ) \
__stop_unwind_idx = . ; \
} \
. ARM . unwind_tab : { \
__start_unwind_tab = . ; \
* ( . ARM . extab * ) \
__stop_unwind_tab = . ; \
}
2018-03-01 22:17:03 -05:00
/*
* The vectors and stubs are relocatable code , and the
* only thing that matters is their relative offsets
*/
# define ARM_VECTORS \
__vectors_start = . ; \
. vectors 0xffff0000 : AT ( __vectors_start ) { \
* ( . vectors ) \
} \
. = __vectors_start + SIZEOF ( . vectors ) ; \
__vectors_end = . ; \
\
__stubs_start = . ; \
. stubs ADDR ( . vectors ) + 0x1000 : AT ( __stubs_start ) { \
* ( . stubs ) \
} \
. = __stubs_start + SIZEOF ( . stubs ) ; \
__stubs_end = . ; \
\
PROVIDE ( vector_fiq_offset = vector_fiq - ADDR ( . vectors ) ) ;
2018-03-08 20:19:48 -05:00
# define ARM_TCM \
2018-03-08 21:12:04 -05:00
__itcm_start = ALIGN ( 4 ) ; \
. text_itcm ITCM_OFFSET : AT ( __itcm_start - LOAD_OFFSET ) { \
2018-03-08 20:19:48 -05:00
__sitcm_text = . ; \
* ( . tcm . text ) \
* ( . tcm . rodata ) \
. = ALIGN ( 4 ) ; \
__eitcm_text = . ; \
} \
2018-03-08 21:12:04 -05:00
. = __itcm_start + SIZEOF ( . text_itcm ) ; \
2018-03-08 20:19:48 -05:00
\
2018-03-08 21:12:04 -05:00
__dtcm_start = . ; \
. data_dtcm DTCM_OFFSET : AT ( __dtcm_start - LOAD_OFFSET ) { \
2018-03-08 20:19:48 -05:00
__sdtcm_data = . ; \
* ( . tcm . data ) \
. = ALIGN ( 4 ) ; \
__edtcm_data = . ; \
} \
2018-03-08 21:12:04 -05:00
. = __dtcm_start + SIZEOF ( . data_dtcm ) ;