• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2021 Bestechnic (Shanghai) Co., Ltd. All rights reserved.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#include "plat_addr_map.h"
16
17#if defined(KERNEL_LITEOS_M)
18#define CUSTOM_REBOOT_DUMP_SIZE		0x4000
19#endif
20
21#ifdef RB_CODEC
22#define HEAP_SECTION_SIZE			0x1000
23#else
24#define HEAP_SECTION_SIZE			0x2000
25#endif
26
27#if defined(NUTTX_BUILD)
28#include "nuttx/config.h"
29#define NUTTX_HEAP_SECTION_SIZE		0x20000
30#define STACK_SECTION_SIZE		CONFIG_IDLETHREAD_STACKSIZE
31#undef HEAP_SECTION_SIZE
32#define HEAP_SECTION_SIZE		0x0000
33#else
34#define STACK_SECTION_SIZE		0x2000
35#endif
36#if defined(CP_ENABLE) && !defined(CP_BOOT)
37#define CP_STACK_SECTION_SIZE		0x6000
38#else
39#define CP_STACK_SECTION_SIZE		0x1000
40#endif
41
42#if defined(ROM_UTILS_ON)
43#if defined(CHIP_BEST1400) || defined(CHIP_BEST1402)
44#define ROM_UTILS_RESV_RAM_SIZE     0x64
45#else
46#define ROM_UTILS_RESV_RAM_SIZE     0x0
47#endif
48#endif
49
50#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
51#define OVERLAY_DATA_SECTION_SIZE	0x10000
52#elif defined(RB_CODEC)
53#define OVERLAY_DATA_SECTION_SIZE	0xA000
54#else
55#define OVERLAY_DATA_SECTION_SIZE	0x8000
56#endif
57
58#if !defined(FAST_XRAM_SECTION_SIZE)
59#if (RAM_SIZE >= 0x48000)
60#define RTOS_IN_RAM
61#if defined(BTUSB_AUDIO_MODE)
62#define FAST_XRAM_SECTION_SIZE		0x20000
63#elif (defined(CHIP_BEST1402) && defined(SPEECH_TX_2MIC_NS2))
64#define FAST_XRAM_SECTION_SIZE		0xF800
65#else
66#define FAST_XRAM_SECTION_SIZE		0x16000
67#endif
68#elif (RAM_SIZE >= 0x40000)
69#if defined(CHIP_BEST1402) || defined(CHIP_BEST1400)
70#define FAST_XRAM_SECTION_SIZE		0x5200
71#else
72#define FAST_XRAM_SECTION_SIZE		0x3800
73#endif
74#else
75#define FAST_XRAM_SECTION_SIZE		0x6000
76#endif
77#endif
78#if defined(NUTTX_BUILD) && defined(ARM_CMSE)
79#undef FAST_XRAM_SECTION_SIZE
80#define FAST_XRAM_SECTION_SIZE		0x0
81#endif
82#if !defined(OTA_BOOT_SIZE) && defined(OTA_CODE_OFFSET)
83#define FLASH_REGION_BASE			(FLASH_BASE + OTA_CODE_OFFSET)
84#else
85#ifdef OTA_BOOT_OFFSET
86#define FLASH_REGION_BASE			(FLASH_BASE + OTA_BOOT_OFFSET)
87#else
88#define FLASH_REGION_BASE			(FLASH_BASE)
89#endif
90#endif
91
92#ifndef FLASH_REGION_SIZE
93#define FLASH_REGION_SIZE			(FLASH_SIZE - (FLASH_REGION_BASE - FLASH_BASE) - CP_FLASH_SIZE)
94#endif
95
96#if (FLASH_REGION_BASE + FLASH_REGION_SIZE) > (FLASH_BASE + FLASH_SIZE)
97#error "(FLASH_REGION_BASE + FLASH_REGION_SIZE) should <= (FLASH_BASE + FLASH_SIZE)"
98#endif
99
100#define FLASH_NC_REGION_BASE		FLASH_C_TO_NC(FLASH_REGION_BASE)
101#define FLASHX_REGION_BASE			FLASH_TO_FLASHX(FLASH_REGION_BASE)
102
103#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
104#define OVERLAY_FOR_CP
105#endif
106
107#ifdef OVERLAY_FOR_CP
108#define REGION_OVERLAY_TEXT			RAMCPX
109#define REGION_OVERLAY_DATA			RAMCP
110#else
111#define REGION_OVERLAY_TEXT			FRAMX
112#define REGION_OVERLAY_DATA			RAM
113#endif
114
115/* Linker script to configure memory regions. */
116/* See plat_addr_map.h and common.mk for the macro definitions */
117MEMORY
118{
119	ROM			(rx)	: ORIGIN = ROM_BASE,				LENGTH = ROM_SIZE
120	FLASH 		(r)		: ORIGIN = FLASH_REGION_BASE,		LENGTH = FLASH_REGION_SIZE
121	FLASH_NC	(r)		: ORIGIN = FLASH_NC_REGION_BASE,	LENGTH = FLASH_REGION_SIZE
122	FLASHX		(rx)	: ORIGIN = FLASHX_REGION_BASE,		LENGTH = FLASH_REGION_SIZE
123	RAM			(rwx)	: ORIGIN = RAM_BASE,				LENGTH = RAM_SIZE - FAST_XRAM_SECTION_SIZE
124	RAMX		(rx)	: ORIGIN = RAMX_BASE,				LENGTH = RAM_SIZE - FAST_XRAM_SECTION_SIZE
125#if defined(ARM_CMSE) && (RAM_NSC_SIZE != 0)
126	RAMX_NSC	(rx)	: ORIGIN = RAMX_BASE + RAM_S_SIZE,	LENGTH = RAM_NSC_SIZE
127#endif
128	FRAMX		(rwx)	: ORIGIN = RAMX_BASE + RAM_SIZE - FAST_XRAM_SECTION_SIZE,	LENGTH = FAST_XRAM_SECTION_SIZE
129#ifdef PSRAM_BASE
130	PSRAM 		(rwx)	: ORIGIN = PSRAM_BASE,				LENGTH = PSRAM_SIZE
131	PSRAM_NC	(rwx)	: ORIGIN = PSRAM_NC_BASE,			LENGTH = PSRAM_SIZE
132	PSRAMX		(rx)	: ORIGIN = PSRAMX_BASE,				LENGTH = PSRAM_SIZE
133#endif
134#ifdef PSRAMUHS_BASE
135	PSRAMUHS	(rwx)	: ORIGIN = MCU_PSRAMUHS_BASE,			LENGTH = MCU_PSRAMUHS_SIZE
136	PSRAMUHS_NC	(rwx)	: ORIGIN = MCU_PSRAMUHS_NC_BASE,		LENGTH = MCU_PSRAMUHS_SIZE
137	PSRAMUHSX	(rx)	: ORIGIN = MCU_PSRAMUHSX_BASE,			LENGTH = MCU_PSRAMUHS_SIZE
138#endif
139#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
140	RAMCP 		(rwx)	: ORIGIN = RAMCP_BASE,				LENGTH = RAMCP_SIZE
141	RAMCPX 		(rwx)	: ORIGIN = RAMCPX_BASE,				LENGTH = RAMCPX_SIZE
142#endif
143#ifdef MEM_POOL_BASE
144	MEM_POOL	(rwx)	: ORIGIN = MEM_POOL_BASE,			LENGTH = MEM_POOL_SIZE
145#endif
146#if defined(RAMV_BASE) && (RAMV_SIZE > 0)
147	RAMV 		(rwx)	: ORIGIN = RAMV_BASE,				LENGTH = RAMV_SIZE
148#endif
149}
150
151/* Library configurations */
152#ifndef NUTTX_BUILD
153#ifndef NO_LIBC
154GROUP(libgcc.a libc.a libm.a libnosys.a)
155#endif
156#endif
157
158/* Linker script to place sections and symbol values. Should be used together
159 * with other linker script that defines memory regions FLASH and RAM.
160 * It references following symbols, which must be defined in code:
161 *   Reset_Handler : Entry of reset handler
162 *
163 * It defines following symbols, which code can use without definition:
164 *   __export_fn_rom
165 *   __exidx_start
166 *   __exidx_end
167 *   __copy_table_start__
168 *   __copy_table_end__
169 *   __zero_table_start__
170 *   __zero_table_end__
171 *   __etext
172 *   __data_start__
173 *   __preinit_array_start
174 *   __preinit_array_end
175 *   __init_array_start
176 *   __init_array_end
177 *   __fini_array_start
178 *   __fini_array_end
179 *   __data_end__
180 *   __bss_start__
181 *   __bss_end__
182 *   __end__
183 *   end
184 *   __HeapLimit
185 *   __StackLimit
186 *   __StackTop
187 *   __stack
188 *   __free_ram
189 *   __factory_start
190 *   __factory_end
191 *   __calib_start
192 *   __calib_end
193 *   __flash_start
194 *   __flash_end
195 *   __free_flash
196 *   __boot_sram_start_flash__
197 *   __boot_sram_end_flash__
198 *   __boot_sram_start__
199 *   __boot_bss_sram_start__
200 *   __boot_bss_sram_end__
201 *   __sram_text_data_start_flash__
202 *   __sram_text_data_end_flash__
203 *   __fast_sram_text_data_start__
204 *   __fast_sram_text_data_end__
205 *   __fast_sram_text_data_start_flash__
206 *   __fast_sram_text_data_end_flash__
207 *   __sram_text_data_start__
208 *   __sram_bss_start__
209 *   __sram_bss_end__
210 *   __overlay_text_start__
211 *   __overlay_text_exec_start__
212 *   __overlay_data_start__
213 */
214ENTRY(Boot_Loader)
215
216SECTIONS
217{
218	__export_fn_rom = (ORIGIN(ROM) + LENGTH(ROM) - ROM_BUILD_INFO_SECTION_SIZE - ROM_EXPORT_FN_SECTION_SIZE);
219
220	.boot_struct (ORIGIN(FLASH)) :
221	{
222		__flash_start = .;
223		KEEP(*(.boot_struct))
224		. = ALIGN(4);
225	} > FLASH
226
227	. = FLASH_TO_FLASHX(.);
228
229	.boot_text_flash (.) : AT (FLASHX_TO_FLASH(ADDR(.boot_text_flash)))
230	{
231		__flashx_start_addr__ = .;
232		*(.boot_loader)
233		*(.boot_text_flash*)
234		*(.boot_rodata_flash*)
235		. = ALIGN(4);
236	} > FLASHX
237
238#if defined(__BES_OTA_MODE__)
239	.ota_boot_info (ALIGN(4096)) :
240	{
241		*(.ota_boot_info)
242		. = (0x1000);
243	} > FLASHX
244
245	.ota_boot_rev (ALIGN(4096)) :
246	{
247		*(.ota_boot_rev)
248		. = (0x1000);
249	} > FLASHX
250#endif
251
252	. = FLASHX_TO_FLASH(.);
253
254	.got_info (.) :
255	{
256		__got_info_start = .;
257		__got_start = .;
258		*(.got)
259		. = ALIGN(4);
260		__got_end = .;
261		__got_plt_start = .;
262		*(.got.plt)
263		. = ALIGN(4);
264		__igot_plt_start = .;
265		*(.igot.plt)
266		. = ALIGN(4);
267		__dynamic_start = .;
268		*(.dynamic)
269		. = ALIGN(4);
270		__got_info_end = .;
271	} > FLASH
272
273	.vector_table (ORIGIN(RAM)) (NOLOAD) :
274	{
275		KEEP(*(.vector_table))
276		. = VECTOR_SECTION_SIZE;
277		. = ALIGN(4);
278	} > RAM
279
280	.reboot_param (.) (NOLOAD) :
281	{
282		KEEP(*(.reboot_param))
283		. = REBOOT_PARAM_SECTION_SIZE;
284		. = ALIGN(4);
285	} > RAM
286
287	.userdata_pool (.) (NOLOAD) :
288	{
289		*(.userdata_pool)
290		. = ALIGN(4);
291		__userdata_pool_end__ = .;
292	} > RAM
293
294	__boot_sram_start_flash__ = LOADADDR(.got_info) + SIZEOF(.got_info);
295	__boot_sram_start__ = __userdata_pool_end__;
296
297	.boot_text_sram (RAM_TO_RAMX(__boot_sram_start__)) : AT (__boot_sram_start_flash__)
298	{
299		_stext = .;
300		/* memcpy.o or libc_nano.a(lib_a-memcpy.o/lib_a-memcpy-stub.o) */
301		*:memcpy.o(.text*)
302		*:lib_a-memcpy*.o(.text*)
303		*:libc_rom.o(.text*)
304		*:libc_rom_mem.o(.text*)
305
306		/* memset.o or libc_nano.a(lib_a-memset.o) */
307		*:memset.o(.text*)
308		*:lib_a-memset*.o(.text*)
309
310		*:hal_norflash*.o(.text*)
311		*:norflash_*.o(EXCLUDE_FILE(*:norflash_api.o) .text*)
312
313#ifdef BOOT_CODE_IN_RAM
314		*:hal_cmu_*.o(.text*)
315		*:hal_iomux_*.o(.text*)
316		*:hal_analogif_*.o(.text*)
317		*:hal_spi.o(.text*)
318		*:hal_timer.o(.text*)
319		*:hal_sysfreq.o(.text*)
320#endif
321
322		*:hal_mcu2cp.o(.text*)
323		*:wifi_agent.o(.text*)
324#ifndef WIFI_ON_CP
325		*:wifi_srv.o(.text*)
326#endif
327		*:ethernetif.o(.text*)
328
329#ifdef ROM_IN_FLASH
330		*:hal_cmu_*.o(.text.hal_cmu_flash*_set_freq .text.hal_cmu_reset_set .text.hal_cmu_reset_clear)
331		*:hal_cmu_common.o(.text.hal_cmu_get_crystal_freq)
332		*:hal_timer.o(.text.hal_sys_timer_delay .text.hal_sys_timer_delay_us
333			.text.hal_sys_timer_delay_ns .text.hal_sys_timer_get
334			.text.hal_fast_sys_timer_get)
335#endif
336#if defined(ARM_CMSE) && defined(INTSRAM_RUN)
337		/* BEST2003 SAU set FLASH_BASE region as nonsecure region becase of the SAU region number limitation,
338		CPU can't access FLASH_BASE region in secure state, so the text should be located in SRAM */
339		*(EXCLUDE_FILE(*crt*) .text*)
340#endif
341
342		*psram*.o(.text*)
343		*(.boot_text_sram*)
344		. = ALIGN(4);
345		__boot_text_sram_end__ = .;
346	} > RAMX
347
348	.boot_data_sram (RAMX_TO_RAM(ADDR(.boot_text_sram) + SIZEOF(.boot_text_sram))) :
349					AT (__boot_sram_start_flash__ + SIZEOF(.boot_text_sram))
350	{
351		__boot_data_sram_start__ = .;
352		*:hal_norflash*.o(.data* .rodata*)
353		*:norflash_*.o(EXCLUDE_FILE(*:norflash_api.o) .data* EXCLUDE_FILE(*:norflash_api.o) .rodata*)
354		*psram*.o(.data* .rodata*)
355		*:libc_rom.o(.rodata*)
356		*:libc_rom_mem.o(.rodata*)
357
358#if defined(ARM_CMSE) && defined(INTSRAM_RUN)
359		/* BEST2003 SAU set FLASH_BASE region as nonsecure region becase of the SAU region number limitation,
360		CPU can't access FLASH_BASE region in secure state, so the data and rodata should be located in SRAM */
361		*(.data* .rodata*)
362#endif
363		/* Stack protector instrumentation rodata for functions in special sections */
364		*(.rodata.cst4)
365
366		*(.boot_rodata_sram*)
367		*(.boot_data*)
368		. = ALIGN(4);
369#ifdef OPENAMP_SUPPORT
370		*(.resource_table)
371		. = ALIGN(4);
372#endif
373		__boot_data_sram_end__ = .;
374	} > RAM
375
376	__boot_sram_end_flash__ = __boot_sram_start_flash__ +
377								SIZEOF(.boot_text_sram) + SIZEOF(.boot_data_sram);
378
379	.boot_bss_sram (.) (NOLOAD) : AT (ADDR(.boot_bss_sram))
380	{
381		__boot_bss_sram_start__ = .;
382		*:hal_norflash*.o(.bss*)
383		*:norflash_*.o(EXCLUDE_FILE(*:norflash_api.o) .bss*)
384		*psram*.o(.bss*)
385		*(.boot_bss*)
386		. = ALIGN(32);
387		__boot_bss_sram_end__ = .;
388	} > RAM
389
390	__sram_text_data_start_flash__ = __boot_sram_end_flash__;
391	__sram_text_data_start__ = __boot_bss_sram_end__;
392
393	.sram_text (RAM_TO_RAMX(__sram_text_data_start__)) : AT (__sram_text_data_start_flash__)
394	{
395		__sram_text_start__ = .;
396#ifdef RTOS_IN_RAM
397		*:rtos_lib.o(.text*)
398#endif
399#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
400		*:hal_memsc.o(.text*)
401		*:hal_trace.o(.text*)
402		*:hal_trace_mod.o(.text*)
403		*:mpu_armv*.o(.text*)
404		*:codec_sbc.o(.text*)
405		*:multi_heap.o(.text*)
406		*:pool_api.o(.text*)
407		*libgcc.a:(.text*)
408
409		/* for LIBC_ROM=0 */
410		*libc_nano.a:(.text*)
411		/* for NOSTD=1  */
412		*:atoi.o(.text*)
413		*:ctype.o(.text*)
414		*:memchr.o(.text*)
415		*:memcmp.o(.text*)
416		*:memmove.o(.text*)
417		*:strcat.o(.text*)
418		*:strchr.o(.text*)
419		*:strcmp.o(.text*)
420		*:strcpy.o(.text*)
421		*:strlen.o(.text*)
422		*:strncat.o(.text*)
423		*:strncmp.o(.text*)
424		*:strncpy.o(.text*)
425		*:strnicmp.o(.text*)
426		*:strstr.o(.text*)
427		*:strtol.o(.text*)
428		*:strtoul.o(.text*)
429		*:vsprintf.o(.text*)
430		*:vsscanf.o(.text*)
431
432		/* for SCO_CP_ACCEL=1 */
433		*:cmsis_dsp_lib.o(.text*)
434		*libm.a:(.text*)
435
436		*:a2dp_encoder_cp.o(.text*)
437		*:a2dp_encoder_sbc_cp.o(.text*)
438#elif defined(ARM_CMSE) && (RAMCP_SIZE == 0)
439		*(.cp_text_sram*)
440#endif
441
442#ifndef LC3_IN_A7_DSP_CODEC
443#if(A2DP_LC3_ON)
444		*:adjust_global_gain.o(.text*)
445		*:al_fec.o(.text*)
446		*:apply_global_gain.o(.text*)
447		*:ari_codec.o(.text*)
448		*:attack_detector.o(.text*)
449		*:basop32.o(.text*)
450		*:basop_mpy.o(.text*)
451		*:basop_util.o(.text*)
452		*:constants.o(.text*)
453		*:cutoff_bandwidth.o(.text*)
454		*:dct2.o(.text*)
455		*:dct4.o(.text*)
456		*:dec_entropy.o(.text*)
457		*:dec_lc3.o(.text*)
458		*:detect_cutoff_warped.o(.text*)
459		*:enc_entropy.o(.text*)
460		*:enc_lc3.o(.text*)
461		*:enh1632.o(.text*)
462		*:enh40.o(.text*)
463		*:estimate_global_gain.o(.text*)
464		*:fft.o(.text*)
465		*:imdct.o(.text*)
466		*:lc3.o(.text*)
467		*:lc3_pre_encoding_process.o(.text*)
468		*:lc3_process.o(.text*)
469		*:levinson.o(.text*)
470		*:ltpf_coder.o(.text*)
471		*:ltpf_decoder.o(.text*)
472		*:mdct.o(.text*)
473		*:mdct_shaping.o(.text*)
474		*:noise_factor.o(.text*)
475		*:noise_filling.o(.text*)
476		*:olpa.o(.text*)
477		*:output_scaling.o(.text*)
478		*:pc_apply.o(.text*)
479		*:pc_classify.o(.text*)
480		*:pc_main.o(.text*)
481		*:pc_update.o(.text*)
482		*:per_band_energy.o(.text*)
483		*:plc_apply.o(.text*)
484		*:plc_classify.o(.text*)
485		*:plc_damping_scrambling.o(.text*)
486		*:plc_lpc_scaling.o(.text*)
487		*:plc_main.o(.text*)
488		*:plc_noise_substitution.o(.text*)
489		*:plc_phecu_f0_refine_first.o(.text*)
490		*:plc_phecu_fec_hq.o(.text*)
491		*:plc_phecu_lf_peak_analysis.o(.text*)
492		*:plc_phecu_peak_locator.o(.text*)
493		*:plc_phecu_setf0hz.o(.text*)
494		*:plc_phecu_tools.o(.text*)
495		*:plc_tdac.o(.text*)
496		*:plc_tdc_inverse_odft.o(.text*)
497		*:plc_tdc_lagwin.o(.text*)
498		*:plc_tdc_main.o(.text*)
499		*:plc_tdc_pre_emphasis.o(.text*)
500		*:plc_update.o(.text*)
501		*:plc_update_aft_imdct.o(.text*)
502		*:plc_xcorr.o(.text*)
503		*:pvq_dec.o(.text*)
504		*:pvq_enc.o(.text*)
505		*:pvq_index.o(.text*)
506		*:quantize_spec.o(.text*)
507		*:resamp12k8.o(.text*)
508		*:residual_coding.o(.text*)
509		*:residual_decoding.o(.text*)
510		*:rom_basop_util.o(.text*)
511		*:setup_dec_lc3.o(.text*)
512		*:setup_enc_lc3.o(.text*)
513		*:sns_compute_scf.o(.text*)
514		*:sns_interpolate_scf.o(.text*)
515		*:sns_quantize_scf.o(.text*)
516		*:tns_coder.o(.text*)
517		*:tns_decoder.o(.text*)
518		*(.overlay_a2dp_lc3*)
519#endif
520#endif
521		*:norflash_api.o(.text*)
522		*:tcp.o(.text*)
523		*:tcp_in.o(.text*)
524		. = ALIGN(0x2000); /*align for dubug hook*/
525		*:tcp_out.o(.text*)
526		/* for SCO_CP_ACCEL=1 */
527		*:cmsis_dsp_lib.o(.text*)
528		*libm.a:(.text*)
529
530#ifdef KWS_IN_RAM
531		*:kws_lib.o(.text*)
532#endif
533		*:tcp*.o(.text*)
534		*:net*.o(.text*)
535		*:agg*.o(.text*)
536		*:michael.o(.text*)
537		*:rx.o(.text*)
538		*:event.o(.text*)
539		*:util.o(.text*)
540		*:rate.o(.text*)
541		*:rc80211*.o(.text*)
542		*:tx.o(.text*)
543		*:status.o(.text*)
544		*:hw_crc.o(.text*)
545		*:queue.o(.text*)
546		*:hwio.o(.text*)
547		*:fwio.o(.text*)
548		*:bh.o(.text*)
549		*:txrx.o(.text*)
550		*:skbuff.o(.text*)
551		*:eth*.o(.text*)
552		*:ip*.o(.text*)
553		*:def.o(.text*)
554		*:pbuf.o(.text*)
555		*:raw.o(.text*)
556		*:sockets.o(.text*)
557		*:cmsis*.o(.text*)
558		*:list.o(.text*)
559		*:memp*.o(.text*)
560		*:mcu_slave_init.o(.text*)
561		*:dsp_code_decom.o(.text*)
562		*:lzma_decode.o(.text*)
563		*:hal_transq.o(.text*)
564		*:ftp_client.o(.text*)
565		*:port_s.o(.text*)
566		*:k_*.o(.text*)
567		*:wifi_drv*.o(.text*)
568		*:dpd*.o(.text*)
569		/* freeRTOS kernel */
570		*:heap_5.o(.text*)
571		*:port.o(.text*)
572		*:mpu_wrappers.o(.text*)
573		*:croutine.o(.text*)
574		*:event_groups.o(.text*)
575		*:list.o(.text*)
576		*:queue.o(.text*)
577		*:stream_buffer.o(.text*)
578		*:tasks.o(.text*)
579		*:timers.o(.text*)
580		*(.sram_text*)
581		/*
582		   If you want protect one section by armv8's mpu, the section should
583		   be aligned to 32bytes
584		 */
585		. = ALIGN(32);
586		__sram_text_end__ = .;
587	} > RAMX
588
589	.sram_data (RAMX_TO_RAM(ADDR(.sram_text) + SIZEOF(.sram_text))) :
590				AT (__sram_text_data_start_flash__ + SIZEOF(.sram_text))
591	{
592#ifdef RTOS_IN_RAM
593		*:rtos_lib.o(.data* .rodata*)
594#endif
595
596#if defined(GLOBAL_SRAM_KISS_FFT)
597		*:fftwrap.o(.data* .rodata*)
598		*:kiss_fft.o(.data* .rodata*)
599		*:kiss_fftr.o(.data* .rodata*)
600#endif
601
602#if defined(GLOBAL_SRAM_CMSIS_FFT)
603		*:CommonTables.o(.rodata.armBitRevIndexTable256)
604		*:CommonTables.o(.rodata.twiddleCoef_256)
605		*:CommonTables.o(.rodata.twiddleCoef_rfft_512)
606		*:CommonTables.o(.rodata.armBitRevIndexTable128)
607		*:CommonTables.o(.rodata.twiddleCoef_128)
608		*:CommonTables.o(.rodata.twiddleCoef_rfft_256)
609#endif
610
611#if defined(VOICE_ALGO_CP_ACCEL)
612		*:CommonTables.o(.rodata.armBitRevIndexTable256)
613		*:CommonTables.o(.rodata.twiddleCoef_256)
614		*:CommonTables.o(.rodata.twiddleCoef_rfft_512)
615
616#if defined(VOICE_TX_AEC)
617		*:ssp_aec.o(.data* .rodata*)
618#endif
619#if defined(APP_NOISE_ESTIMATION)
620		*:noise_estimator.o(.data* .rodata*)
621#endif
622#endif
623#if defined(NEW_NV_RECORD_ENALBED)
624		. = ALIGN(NV_EXTENSION_MIRROR_RAM_SIZE);
625        *(.nv_extension_pool)
626        . = ALIGN(NV_EXTENSION_MIRROR_RAM_SIZE);
627#endif
628#if defined(BTUSB_AUDIO_MODE)
629		*:hal_usb.o(.rodata*)
630#endif
631
632#if defined(SCO_CP_ACCEL)
633		*:plc_8000.o(.data* .rodata*)
634#if defined(_CVSD_BYPASS_) || defined(CVSD_BYPASS)
635		*:Pcm8k_Cvsd.o(.data* .rodata*)
636		*:cvsd_codec.o(.data* .rodata*)
637#endif
638		*:table.o(.data* .rodata*)
639		*:plc_16000.o(.data* .rodata*)
640		/* Move algos from overlay to here */
641#endif
642
643		*:utils.o(.data* .rodata*)
644		*:cqueue.o(.data* .rodata*)
645		*:iir_process.o(.data* .rodata*)
646		*:sbcplc.o(.data* .rodata*)
647		*:sbc.o(.data* .rodata*)
648		*:sbc_math.o(.data* .rodata*)
649		*:crossover_filter.o(.data* .rodata*)
650		*:exp_func_tables.o(.data* .rodata*)
651#if defined(AQE_KWS)
652		*:kws_nn.o(.data* .rodata.second_conv_wt)
653		*:command_recognition.o(.data* .rodata*)
654		*:arm_bitreversal_16.o(.data* .rodata*)
655		*:arm_cfft_radix8_f32.o(.data* .rodata*)
656		*:arm_bitreversal2.o(.data* .rodata*)
657		*:arm_mult_f32.o(.data* .rodata*)
658		*:arm_cmplx_mag_squared_f32.o(.data* .rodata*)
659		*:arm_cmplx_mult_cmplx_f32.o(.data* .rodata*)
660		*:arm_abs_f32.o(.data* .rodata*)
661		*:arm_cos_f32.o(.data* .rodata*)
662		*:arm_sin_f32.o(.data* .rodata*)
663		*:nsx_core.o(.data* .rodata*)
664#endif
665
666#if defined(SPEECH_TX_NN_NS)
667		*:nn_ns_large_network.o(.data* .rodata*)
668		*:denoise_20ms.o(.data* .rodata*)
669#endif
670
671#if defined(SPEECH_TX_NN_NS2)
672		*:nn_ns_data.o(.data* .rodata*)
673#endif
674
675#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
676		*:hal_memsc.o(.rodata*)
677		*:hal_trace.o(.rodata*)
678		*:hal_trace_mod.o(.rodata*)
679		*:mpu.o(.rodata*)
680		*:multi_heap.o(.rodata*)
681		*:pool_api.o(.rodata*)
682		*:a2dp_decoder_cp.o(.rodata*)
683		*:a2dp_encoder_cp.o(.rodata*)
684		*:a2dp_encoder_sbc_cp.o(.rodata*)
685		*libgcc.a:(.rodata*)
686
687		/* for LIBC_ROM=0 */
688		*libc_nano.a:(.rodata*)
689		/* for NOSTD=1  */
690		*:atoi.o(.rodata*)
691		*:ctype.o(.rodata*)
692		*:memchr.o(.rodata*)
693		*:memcmp.o(.rodata*)
694		*:memmove.o(.rodata*)
695		*:strcat.o(.rodata*)
696		*:strchr.o(.rodata*)
697		*:strcmp.o(.rodata*)
698		*:strcpy.o(.rodata*)
699		*:strlen.o(.rodata*)
700		*:strncat.o(.rodata*)
701		*:strncmp.o(.rodata*)
702		*:strncpy.o(.rodata*)
703		*:strnicmp.o(.rodata*)
704		*:strstr.o(.rodata*)
705		*:strtol.o(.rodata*)
706		*:strtoul.o(.rodata*)
707		*:vsprintf.o(.rodata*)
708		*:vsscanf.o(.rodata*)
709
710		/* for SCO_CP_ACCEL=1 */
711		*:cmsis_dsp_lib.o(.rodata*)
712		*libm.a:(.rodata*)
713#endif
714
715#if defined(GSOUND_HOTWORD_EXTERNAL)
716		*:voice_sbc.o(.data* .rodata*)
717		*:gsound_custom_audio.o(.data* .rodata*)
718		*:gsound_custom_hotword_external.o(.data* .rodata*)
719		*:libspeech*.o(.data* .rodata*)
720#endif
721
722#ifndef LC3_IN_A7_DSP_CODEC
723#if(A2DP_LC3_ON)
724		*:adjust_global_gain.o(.data* .rodata*)
725		*:al_fec.o(.data* .rodata*)
726		*:apply_global_gain.o(.data* .rodata*)
727		*:ari_codec.o(.data* .rodata*)
728		*:attack_detector.o(.data* .rodata*)
729		*:basop32.o(.data* .rodata*)
730		*:basop_mpy.o(.data* .rodata*)
731		*:basop_util.o(.data* .rodata*)
732		*:constants.o(.data* .rodata*)
733		*:cutoff_bandwidth.o(.data* .rodata*)
734		*:dct2.o(.data* .rodata*)
735		*:dct4.o(.data* .rodata*)
736		*:dec_entropy.o(.data* .rodata*)
737		*:dec_lc3.o(.data* .rodata*)
738		*:detect_cutoff_warped.o(.data* .rodata*)
739		*:enc_entropy.o(.data* .rodata*)
740		*:enc_lc3.o(.data* .rodata*)
741		*:enh1632.o(.data* .rodata*)
742		*:enh40.o(.data* .rodata*)
743		*:estimate_global_gain.o(.data* .rodata*)
744		*:fft.o(.data* .rodata*)
745		*:imdct.o(.data* .rodata*)
746		*:lc3.o(.data* .rodata*)
747		*:lc3_pre_encoding_process.o(.data* .rodata*)
748		*:lc3_process.o(.data* .rodata*)
749		*:levinson.o(.data* .rodata*)
750		*:ltpf_coder.o(.data* .rodata*)
751		*:ltpf_decoder.o(.data* .rodata*)
752		*:mdct.o(.data* .rodata*)
753		*:mdct_shaping.o(.data* .rodata*)
754		*:noise_factor.o(.data* .rodata*)
755		*:noise_filling.o(.data* .rodata*)
756		*:olpa.o(.data* .rodata*)
757		*:output_scaling.o(.data* .rodata*)
758		*:pc_apply.o(.data* .rodata*)
759		*:pc_classify.o(.data* .rodata*)
760		*:pc_main.o(.data* .rodata*)
761		*:pc_update.o(.data* .rodata*)
762		*:per_band_energy.o(.data* .rodata*)
763		*:plc_apply.o(.data* .rodata*)
764		*:plc_classify.o(.data* .rodata*)
765		*:plc_damping_scrambling.o(.data* .rodata*)
766		*:plc_lpc_scaling.o(.data* .rodata*)
767		*:plc_main.o(.data* .rodata*)
768		*:plc_noise_substitution.o(.data* .rodata*)
769		*:plc_phecu_f0_refine_first.o(.data* .rodata*)
770		*:plc_phecu_fec_hq.o(.data* .rodata*)
771		*:plc_phecu_lf_peak_analysis.o(.data* .rodata*)
772		*:plc_phecu_peak_locator.o(.data* .rodata*)
773		*:plc_phecu_setf0hz.o(.data* .rodata*)
774		*:plc_phecu_tools.o(.data* .rodata*)
775		*:plc_tdac.o(.data* .rodata*)
776		*:plc_tdc_inverse_odft.o(.data* .rodata*)
777		*:plc_tdc_lagwin.o(.data* .rodata*)
778		*:plc_tdc_main.o(.data* .rodata*)
779		*:plc_tdc_pre_emphasis.o(.data* .rodata*)
780		*:plc_update.o(.data* .rodata*)
781		*:plc_update_aft_imdct.o(.data* .rodata*)
782		*:plc_xcorr.o(.data* .rodata*)
783		*:pvq_dec.o(.data* .rodata*)
784		*:pvq_enc.o(.data* .rodata*)
785		*:pvq_index.o(.data* .rodata*)
786		*:quantize_spec.o(.data* .rodata*)
787		*:resamp12k8.o(.data* .rodata*)
788		*:residual_coding.o(.data* .rodata*)
789		*:residual_decoding.o(.data* .rodata*)
790		*:rom_basop_util.o(.data* .rodata*)
791		*:setup_dec_lc3.o(.data* .rodata*)
792		*:setup_enc_lc3.o(.data* .rodata*)
793		*:sns_compute_scf.o(.data* .rodata*)
794		*:sns_interpolate_scf.o(.data* .rodata*)
795		*:sns_quantize_scf.o(.data* .rodata*)
796		*:tns_coder.o(.data* .rodata*)
797		*:tns_decoder.o(.data* .rodata*)
798#endif
799#endif
800
801		*:norflash_api.o(.rodata*)
802#if defined(A2DP_SCALABLE_ON)
803		*:util.o(.data* .rodata*)
804#endif
805		*:tcp*.o(.data*)
806		*:net*.o(.data*)
807		*:agg*.o(.data*)
808		*:rx.o(.data*)
809		*:event.o(.data*)
810		*:util.o(.data*)
811		*:rate.o(.data*)
812		*:rc80211*.o(.data*)
813		*:tx.o(.data*)
814		*:status.o(.data*)
815		*:hw_crc.o(.data*)
816		*:queue.o(.data*)
817		*:hwio.o(.data*)
818		*:fwio.o(.data*)
819		*:bh.o(.data*)
820		*:txrx.o(.data*)
821		*:skbuff.o(.data*)
822		*:eth*.o(.data*)
823		*:ip*.o(.data*)
824		*:def.o(.data*)
825		*:pbuf.o(.data*)
826		*:raw.o(.data*)
827		*:sockets.o(.data*)
828		*:apps.o(.data*)
829		*:cmsis*.o(.data*)
830		*:list.o(.data*)
831		*:k_*.o(.data*)
832		*:mcu_slave_init.o(.data*)
833		*:dsp_code_decom.o(.data*)
834		*:lzma_decode.o(.data*)
835		*:hal_transq.o(.data*)
836		*:ftp_client.o(.data*)
837		*(.sram_data*)
838#if (RAMCP_SIZE == 0)
839		*(.cp_data*)
840#endif
841#if RTT_APP_SUPPORT > 0
842    /* section information for finsh shell */
843        . = ALIGN(4);
844        __fsymtab_start = .;
845        KEEP(*(FSymTab))
846        __fsymtab_end = .;
847
848        . = ALIGN(4);
849        __vsymtab_start = .;
850        KEEP(*(VSymTab))
851        __vsymtab_end = .;
852
853        /* section information for initial. */
854        . = ALIGN(4);
855        __rt_init_start = .;
856        KEEP(*(SORT(.rti_fn*)))
857        __rt_init_end = .;
858#endif
859#ifdef ARM_CMSE
860		. = ALIGN(4);
861		/* preinit data */
862		PROVIDE_HIDDEN (__preinit_array_start = .);
863		KEEP(*(.preinit_array))
864		PROVIDE_HIDDEN (__preinit_array_end = .);
865
866		. = ALIGN(4);
867		/* init data */
868		PROVIDE_HIDDEN (__init_array_start = .);
869		KEEP(*(SORT(.init_array.*)))
870		KEEP(*(.init_array))
871		PROVIDE_HIDDEN (__init_array_end = .);
872
873		. = ALIGN(4);
874		/* finit data */
875		PROVIDE_HIDDEN (__fini_array_start = .);
876		KEEP(*(SORT(.fini_array.*)))
877		KEEP(*(.fini_array))
878		PROVIDE_HIDDEN (__fini_array_end = .);
879
880		. = ALIGN(4);
881		__cust_cmd_hldr_tbl_start = .;
882		KEEP(*(.cust_cmd_hldr_tbl))
883		__cust_cmd_hldr_tbl_end = .;
884		. = ALIGN(4);
885		__ai_gatt_server_table_start = .;
886		KEEP(*(.ai_gatt_server_table))
887		__ai_gatt_server_table_end = .;
888		. = ALIGN(4);
889		__ai_ble_handler_table_start = .;
890		KEEP(*(.ai_ble_handler_table))
891		__ai_ble_handler_table_end = .;
892		. = ALIGN(4);
893		__ai_spp_register_table_start = .;
894		KEEP(*(.ai_spp_register_table))
895		__ai_spp_register_table_end = .;
896		. = ALIGN(4);
897		__tota_handler_table_start = .;
898		KEEP(*(.tota_handler_table))
899		__tota_handler_table_end = .;
900		. = ALIGN(4);
901		__ai_handler_function_table_start = .;
902		KEEP(*(.ai_handler_function_table))
903		__ai_handler_function_table_end = .;
904		. = ALIGN(4);
905		__custom_handler_table_start = .;
906		KEEP(*(.custom_handler_table))
907		__custom_handler_table_end = .;
908		. = ALIGN(4);
909		__mixprompt_property_table_start = .;
910		KEEP(*(.mixprompt_property_table))
911		__mixprompt_property_table_end = .;
912		. = ALIGN(4);
913		__core_bridge_task_cmd_table_start = .;
914		KEEP(*(.core_bridge_task_cmd_table))
915		__core_bridge_task_cmd_table_end = .;
916		. = ALIGN(4);
917		__core_bridge_instant_cmd_table_start = .;
918		KEEP(*(.core_bridge_instant_cmd_table))
919		__core_bridge_instant_cmd_table_end = .;
920		. = ALIGN(4);
921		__app_bt_sync_command_handler_table_start = .;
922		KEEP(*(.app_bt_sync_command_handler_table))
923		__app_bt_sync_command_handler_table_end = .;
924		. = ALIGN(4);
925		KEEP(*(.eh_frame*))
926		*(.note.gnu.build-id)
927#endif
928		. = ALIGN(4);
929	} > RAM
930
931	__sram_text_data_end_flash__ = __sram_text_data_start_flash__ +
932								SIZEOF(.sram_text) + SIZEOF(.sram_data);
933
934	.sram_bss (.) (NOLOAD) : AT (ADDR(.sram_bss))
935	{
936		__sram_bss_start__ = .;
937		*:utils.o(.bss*)
938#if defined(_CVSD_BYPASS_) || defined(CVSD_BYPASS)
939		*:Pcm8k_Cvsd.o(.bss*)
940		*:cvsd_codec.o(.bss*)
941#endif
942
943#if defined(VOICE_TX_AEC)
944		*:ssp_aec.o(.bss*)
945#endif
946
947#if defined(APP_NOISE_ESTIMATION)
948		*:noise_estimator.o(.bss*)
949#endif
950		*:tcp*.o(.bss*)
951		*:net*.o(.bss*)
952		*:agg*.o(.bss*)
953		*:rx.o(.bss*)
954		*:event.o(.bss*)
955		*:util.o(.bss*)
956		*:rate.o(.bss*)
957		*:rc80211*.o(.bss*)
958		*:tx.o(.bss*)
959		*:status.o(.bss*)
960		*:hw_crc.o(.bss*)
961		*:queue.o(.bss*)
962		*:hwio.o(.bss*)
963		*:fwio.o(.bss*)
964		*:bh.o(.bss*)
965		*:txrx.o(.bss*)
966		*:skbuff.o(.bss*)
967		*:eth*.o(.bss*)
968		*:ip*.o(.bss*)
969		*:def.o(.bss*)
970		*:pbuf.o(.bss*)
971		*:raw.o(.bss*)
972		*:sockets.o(.bss*)
973		*:apps.o(.bss*)
974		*:cmsis*.o(.bss*)
975		*:list.o(.bss*)
976		*:memp*.o(.bss*)
977		*:k_*.o(.bss*)
978		*:mcu_slave_init.o(.bss*)
979		*:dsp_code_decom.o(.bss*)
980		*:lzma_decode.o(.bss*)
981		*:ftp_client.o(.bss*)
982		*:hal_transq.o(.bss*)
983		*:hal_mcu2cp.o(.bss*)
984		*:wifi_agent.o(.bss*)
985#ifndef WIFI_ON_CP
986		*:wifi_srv.o(.bss*)
987#endif
988		*:ethernetif.o(.bss*)
989
990		*(.sram_bss*)
991#if (RAMCP_SIZE == 0)
992		*(.cp_bss*)
993#endif
994		. = ALIGN(32);
995		__sram_bss_end__ = .;
996#ifdef OPENAMP_SUPPORT
997		. = ALIGN(64);
998		__share_mem_pa_start__ = .;
999		. += SHARED_MEM_SIZE;
1000		__share_mem_pa_end__ = .;
1001#endif
1002	} > RAM
1003
1004
1005#if defined(ARM_CMSE) && (RAM_NSC_SIZE != 0)
1006	__sram_nsc_text_start_flash__ = __sram_text_data_end_flash__;
1007	.gnu.sgstubs (ORIGIN(SRAM_NSC)) : AT (__sram_nsc_text_start_flash__)
1008	{
1009		__sram_nsc_text_start__ = .;
1010		. = ALIGN(4);
1011	} > RAMX_NSC
1012	__sram_nsc_text_end_flash__ = __sram_nsc_text_start_flash__ + SIZEOF(.gnu.sgstubs);
1013	__fast_sram_text_data_start_flash__ = __sram_nsc_text_end_flash__;
1014#else
1015	__fast_sram_text_data_start_flash__ = __sram_text_data_end_flash__;
1016#endif
1017
1018	.fast_text_sram (ORIGIN(FRAMX)) : AT (__fast_sram_text_data_start_flash__)
1019	{
1020		__fast_sram_text_exec_start__ = .;
1021#if defined(GLOBAL_SRAM_KISS_FFT)
1022		*:fftwrap.o(.text*)
1023		*:kiss_fft.o(.text*)
1024		*:kiss_fftr.o(.text*)
1025#endif
1026
1027#if defined(GLOBAL_SRAM_CMSIS_FFT)
1028		*:cmsis_fftwrap.o(.text*)
1029		*:arm_rfft_fast_f32.o(.text*)
1030		*:arm_cfft_f32.o(.text*)
1031#endif
1032
1033#if defined(VOICE_ALGO_CP_ACCEL)
1034		*:cmsis_fftwrap.o(.text*)
1035		*:arm_rfft_fast_f32.o(.text*)
1036		*:arm_cfft_f32.o(.text*.arm_cfft_f32)
1037		*:arm_bitreversal2.o(.text*.arm_bitreversal_32)
1038		*:arm_cfft_radix8_f32.o(.text*.arm_radix8_butterfly_f32)
1039
1040		*:voice_algo.o(.text*.voice_algo_process_impl)
1041		*:voice_algo.o(.text*.algo_process_impl)
1042#if defined(VOICE_TX_AEC)
1043		*:voice_tx_aec.o(.text*.voice_tx_aec_process)
1044		*:ssp_aec.o(.text*)
1045#endif
1046#if defined(APP_NOISE_ESTIMATION)
1047		*:voice_noise_est.o(.text*.voice_noise_est_process)
1048		*:noise_estimator.o(.text*)
1049#endif
1050#endif
1051
1052#if defined(SCO_CP_ACCEL)
1053		*:frame_resize.o(.text*)
1054		*:buffer_manager.o(.text*)
1055		*:plc_8000.o(.text*)
1056#if defined(_CVSD_BYPASS_) || defined(CVSD_BYPASS)
1057		*:Pcm8k_Cvsd.o(.text*)
1058		*:cvsd_codec.o(.text*)
1059#endif
1060		*:dspfns.o(.text*)
1061		*:lpc_plc.o(.text*)
1062		*:plc_16000.o(.text*)
1063		*:sbc_filter.o(.text*)
1064/* Move algos from overlay to here */
1065
1066#endif
1067
1068#if defined(ROM_UTILS_ON)
1069		*:rom_utils.o(.text*)
1070#endif
1071
1072#if defined(BTUSB_AUDIO_MODE)
1073		*:hal_dma.o(.text*)
1074		*:hal_uart.o(.text*)
1075		*:hal_trace.o(.text*)
1076#endif
1077
1078#if defined(BTUSB_AUDIO_MODE)
1079		*:hal_usb.o(.text*)
1080
1081		*:usb_audio.o(.text*)
1082		*:usb_audio_sync.o(.text*)
1083		*:usb_audio_cdc.o(.text*)
1084
1085		*:usbaudio_entry.o(.text*)
1086		*:usb_audio_app.o(.text*)
1087#endif
1088
1089		/* memmove.o or libc_nano.a(lib_a-memmove.o) */
1090		*:memmove.o(.text*)
1091		*:lib_a-memmove.o(.text*)
1092		*:utils.o(.text*)
1093		*:cqueue.o(.text*)
1094		*:audio_resample_ex.o(.text*)
1095#if defined(MIX_MIC_DURING_MUSIC)
1096		*:app_bt_stream.o(.text*)
1097#endif
1098#if defined(__SBC_FUNC_IN_ROM__) || (defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0))
1099		*:sbc.o(.text*)
1100#else
1101		*:sbc.o(.text*.sbc_is_stream_info_valid)
1102		*:sbc.o(.text*.sbc_frame_length_get)
1103		*:sbc.o(.text*.sbc_4bit_crc_calc)
1104		*:sbc.o(.text*.sbc_bits_for_mono_alloc)
1105		*:sbc.o(.text*.sbc_bits_for_stereo_alloc)
1106		*:sbc.o(.text*.sbc_header_process)
1107		*:sbc.o(.text*.sbc_factors_process)
1108		*:sbc.o(.text*.sbc_sample_extract)
1109		*:sbc.o(.text*.sbc_sbsamples_make)
1110		*:sbc.o(.text*.sbc_joint_process)
1111		*:sbc.o(.text*.sbc_4band_synth_filter)
1112		*:sbc.o(.text*.sbc_8band_synth_filter)
1113		*:sbc.o(.text*.sbc_decoder_state_reset)
1114		*:sbc.o(.text*.sbc_frame_mute)
1115		*:sbc.o(.text*.sbc_frames_decode)
1116		*:sbc.o(.text*.sbc_frames_decode_do)
1117		*:sbc.o(.text*.sbc_frames_decode_select_channel)
1118		*:sbc.o(.text*.sbc_frames_decode)
1119		*:sbc.o(.text*.sbc_samples_quant)
1120		*:sbc.o(.text*.sbc_decoder_init)
1121		*:sbc.o(.text*.sbc_encoder_init)
1122		*:sbc.o(.text*.sbc_frames_encode)
1123#endif
1124		*:sbc_math.o(.text*)
1125#if defined(A2DP_AAC_ON)
1126		*:fixpoint_math.o(.text*)
1127		*:FDK_bitbuffer.o(.text*)
1128		*:FDK_tools_rom.o(.text*FDKgetWindowSlope*)
1129		*:FDK_tools_rom.o(.text*getBitstreamElementList*)
1130		*:dct.o(.text*dct_IV*)
1131#if !defined(__SBC_FUNC_IN_ROM_VBEST2000__)
1132		*:fft.o(.text*._Z3fftiPlPi)
1133		*:fft_rad2.o(.text*dit_fft*)
1134		*:dct.o(.text*getTables*)
1135#endif
1136#if defined(OPUS_IN_OVERLAY)
1137		*:voice_opus.o(.text*)
1138#elif defined(VOICE_DATAPATH) || defined(__ALEXA_WWE) || defined(AQE_KWS_ALEXA)
1139		*:opus_encoder.o(.text*)
1140#elif defined(__AI_VOICE__) && (RAM_SIZE >= 0x48000)
1141		*:voice_opus.o(.text*)
1142		/**:opus_encoder.o(.text*)*/
1143		*:opus_encoder.o(.text*.frame_size_select)
1144		*:opus_encoder.o(.text*.opus_encode_native)
1145		*:opus_encoder.o(.text*.user_bitrate_to_bitrate)
1146		*:opus_encoder.o(.text*.compute_equiv_rate)
1147		*:opus_encoder.o(.text*.decide_fec)
1148		*:opus_encoder.o(.text*.dc_reject)
1149		*:opus_encoder.o(.text*.gen_toc)
1150		*:opus_encoder.o(.text*.opus_encode)
1151		*:opus_encoder.o(.text*.opus_encoder_create)
1152		*:opus_encoder.o(.text*.opus_encoder_get_size)
1153		*:opus_encoder.o(.text*.opus_encoder_init)
1154		*:opus_encoder.o(.text*.opus_encoder_ctl)
1155		*:analysis.o(.text*)
1156		/**:celt_encoder.o(.text*)*/
1157		*:celt_encoder.o(.text*.opus_custom_encoder_ctl)
1158		*:celt_encoder.o(.text*.celt_encoder_get_size)
1159		*:celt_encoder.o(.text*.opus_custom_encoder_get_size)
1160		*:celt_encoder.o(.text*.celt_encoder_init)
1161		*:celt_encoder.o(.text*.opus_custom_encoder_init_arch)
1162		/**:repacketizer.o(.text*)*/
1163		*:repacketizer.o(.text*.opus_packet_pad)
1164		*:repacketizer.o(.text*.opus_repacketizer_init)
1165		*:repacketizer.o(.text*.opus_repacketizer_cat)
1166		*:repacketizer.o(.text*.opus_repacketizer_cat_impl)
1167		*:repacketizer.o(.text*.opus_repacketizer_out_range_impl)
1168		*:opus.o(.text*)
1169		*:enc_API.o(.text*)
1170		/**:entenc.o(.text*)*/
1171		*:entenc.o(.text*.ec_enc_init)
1172		*:entenc.o(.text*.ec_enc_icdf)
1173		*:entenc.o(.text*.ec_enc_normalize)
1174		*:entenc.o(.text*.ec_enc_carry_out)
1175		*:entenc.o(.text*.ec_write_byte)
1176		*:entenc.o(.text*.ec_enc_patch_initial_bits)
1177		*:entenc.o(.text*.ec_enc_done)
1178		*:control_audio_bandwidth.o(.text*)
1179		*:encode_pulses.o(.text*)
1180		*:LPC_analysis_filter.o(.text*)
1181		*:burg_modified_FIX.o(.text*.silk_burg_modified_c)
1182		*:vector_ops_FIX.o(.text*.silk_scale_copy_vector16)
1183		*:vector_ops_FIX.o(.text*.silk_inner_prod_aligned)
1184		*:vector_ops_FIX.o(.text*.silk_inner_prod16_aligned_64_c)
1185		*:NLSF_del_dec_quant.o(.text*.silk_NLSF_del_dec_quant)
1186		*:encode_frame_FIX.o(.text*.silk_encode_frame_FIX)
1187		*:encode_frame_FIX.o(.text*.silk_encode_do_VAD_FIX)
1188		*:encode_frame_FIX.o(.text*.silk_LBRR_encode_FIX)
1189		/**:pitch.o(.text*)*/
1190		*:pitch.o(.text*.celt_pitch_xcorr_c)
1191		*:resampler.o(.text*)
1192		*:VAD.o(.text*)
1193		*:encode_indices.o(.text*)
1194		/**:control_codec.o(.text*)*/
1195		*:control_codec.o(.text*.silk_control_encoder)
1196		*:control_codec.o(.text*.silk_setup_resamplers)
1197		*:control_codec.o(.text*.silk_setup_fs)
1198		*:control_codec.o(.text*.silk_setup_complexity)
1199		*:control_codec.o(.text*.silk_setup_LBRR)
1200		/**:celt_lpc.o(.text*)*/
1201		*:celt_lpc.o(.text*._celt_autocorr)
1202		/**:shell_coder.o(.text*)*/
1203		*:shell_coder.o(.text*.combine_pulses)
1204		*:shell_coder.o(.text*.silk_shell_encoder)
1205		*:shell_coder.o(.text*.encode_split)
1206		*:init_encoder.o(.text*)
1207		*:log2lin.o(.text*)
1208		*:biquad_alt.o(.text*)
1209		*:stereo_encode_pred.o(.text*)
1210		*:NLSF_unpack.o(.text*)
1211		*:code_signs.o(.text*)
1212		*:lin2log.o(.text*)
1213		*:HP_variable_cutoff.o(.text*)
1214		*:sum_sqr_shift.o(.text*)
1215		*:inner_prod_aligned.o(.text*)
1216		*:stereo_quant_pred.o(.text*)
1217		*:entcode.o(.text*)
1218		*:celt.o(.text*)
1219		*:laplace.o(.text*)
1220		/**:NSQ.o(.text*)*/ /*complexity 1*/
1221		/**:NSQ_del_dec.o(.text*)*/ /*complexity 2*/
1222#endif
1223#endif
1224
1225#if defined(AI_CAPTURE_DATA_AEC)
1226		*:coherence.o(.text*)
1227		*:echo_canceller.o(.text*)
1228		*:echo_suppression.o(.text*)
1229		*:lcmmse.o(.text*)
1230		*:logmmse.o(.text*)
1231		*:mdf2.o(.text*)
1232		*:noise_generator.o(.text*)
1233		*:pink_noise_gen.o(.text*)
1234		*:white_noise_gen.o(.text*)
1235#endif
1236
1237#if defined(__AUDIO_SPECTRUM__)
1238		*:spectrum_fix.o(.text*)
1239		*:audio_spectrum.o(.text*)
1240#endif
1241#if defined(A2DP_SCALABLE_ON) && defined(A2DP_AAC_ON)
1242		*:mdct.o(.text*)
1243#endif
1244		*:crossover_filter.o(.text*)
1245		*:data_compressor.o(.text*)
1246		*:drc.o(.text*)
1247		*:limiter.o(.text*)
1248#if defined(AQE_KWS)
1249		*:arm_*.o(.text*)
1250		*:aqe_mfcc.o(.text*)
1251		*:kws_nn.o(.text*)
1252		*:command_recognition.o(.text*)
1253		*:arm_radix8_butterfly_f32.o(.text*)
1254		*:arm_bitreversal_32.o(.text*)
1255		*:arm_bitreversal_16.o(.text*)
1256		*:dct.o(.text*dct_IV*)
1257		*:fft.o(.text*._Z3fftiPlPi)
1258		*:fft_rad2.o(.text*dit_fft*)
1259		*:dct.o(.text*getTables*)
1260		*:arm_cfft_radix8_f32.o(.text*)
1261		*:arm_bitreversal2.o(.text*)
1262		*:arm_mult_f32.o(.text*)
1263		*:arm_cmplx_mag_squared_f32.o(.text*)
1264		*:arm_cmplx_mult_cmplx_f32.o(.text*)
1265		*:lib_a-wf_sqrt.o(.text*)
1266		*:arm_abs_f32.o(.text*)
1267		*:arm_cos_f32.o(.text*)
1268		*:arm_sin_f32.o(.text*)
1269
1270		*:coherence.o(.text*)
1271		*:echo_canceller.o(.text*)
1272		*:echo_suppression.o(.text*)
1273		*:lcmmse.o(.text*)
1274		*:logmmse.o(.text*)
1275		*:mdf2.o(.text*)
1276		*:noise_generator.o(.text*)
1277		*:pink_noise_gen.o(.text*)
1278		*:white_noise_gen.o(.text*)
1279
1280		*:ae_common.o(.text*)
1281		*:ae_rand.o(.text*)
1282		*:fastmath.o(.text*)
1283		*:integer_delay.o(.text*)
1284		*:iirfilt.o(.text*)
1285		*:ringbuf.o(.text*)
1286		*:scale_int16.o(.text*)
1287		*:speech_conv.o(.text*)
1288		*:speech_trans_buf.o(.text*)
1289
1290		*:ns3.o(.text*)
1291		*:noise_suppression_x.o(.text*)
1292		*:nsx_core.o(.text*)
1293		*:nsx_core_c.o(.text*)
1294		*:copy_set_operations.o(.text*)
1295		*:cross_correlation.o(.text*)
1296		*:division_operations.o(.text*)
1297		*:dot_product_with_scale.o(.text*)
1298		*:downsample_fast.o(.text*)
1299		*:energy.o(.text*)
1300		*:get_scaling_square.o(.text*)
1301		*:min_max_operations.o(.text*)
1302		*:real_fft.o(.text*)
1303		*:resample_by_2.o(.text*)
1304		*:resample_by_2_internal.o(.text*)
1305		*:spl_init.o(.text*)
1306		*:spl_sqrt.o(.text*)
1307		*:spl_sqrt_floor.o(.text*)
1308		*:vector_scaling_operations.o(.text*)
1309#endif
1310#if defined(SPEECH_TX_NN_NS2)
1311	*:nn_ns_pitch.o(.text*)
1312	*:nn_ns_celt_lpc.o(.text*)
1313	*:nn_ns_model.o(.text*)
1314	*:nn_ns2.o(.text*)
1315#endif
1316
1317
1318
1319#if !defined(SCO_OPTIMIZE_FOR_RAM)
1320		:audio_prompt_sbc.o(.text*)
1321#endif
1322
1323#if defined(A2DP_SCALABLE_ON)
1324		*:util.o(.text*)
1325#endif
1326		*(.fast_text_sram*)
1327#if (RAMCP_SIZE == 0)
1328		*(.cp_text_sram*)
1329#endif
1330		/*
1331		   If you want protect one section by armv8's mpu, the section should
1332		   be aligned to 32bytes
1333		 */
1334		. = ALIGN(32);
1335		__fast_sram_text_exec_end__ = .;
1336	} > FRAMX
1337
1338	__fast_sram_text_data_end_flash__ = __fast_sram_text_data_start_flash__ + SIZEOF(.fast_text_sram);
1339	__fast_sram_text_data_start__ = RAMX_TO_RAM(__fast_sram_text_exec_start__);
1340	__fast_sram_text_data_end__ = RAMX_TO_RAM(__fast_sram_text_exec_end__);
1341
1342#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
1343	__cp_text_sram_start_flash__ = __fast_sram_text_data_end_flash__;
1344
1345	.cp_text_sram (ORIGIN(RAMCPX)) : AT (__cp_text_sram_start_flash__)
1346	{
1347		__cp_text_sram_exec_start__ = .;
1348		*(.cp_text_sram*)
1349		*:cp_queue.o(.text*)
1350#if defined(GSOUND_HOTWORD_EXTERNAL)
1351		//*:libspeech*.o(.text*)
1352#endif
1353
1354#ifdef MP3_DECODE_IN_CP
1355		/* mp3 */
1356		*:mini_mp3.o(.text*)
1357#endif
1358
1359#ifdef AAC_DECODE_IN_CP
1360		/* aac */
1361		*:aacdecoder_lib.o(.text*)
1362		*:tpdec_lib.o(.text*)
1363		*:tpdec_adts.o(.text*)
1364		*:tpdec_asc.o(.text*)
1365		*:aacdecoder.o(.text*)
1366		*:channel.o(.text*)
1367		*:channelinfo.o(.text*)
1368		*:aac_ram.o(.text*)
1369		*:aacdec_pns.o(.text*)
1370		*:aacdec_tns.o(.text*)
1371		*:stereo.o(.text*)
1372		*:fixpoint_math.o(.text*)
1373		*:FDK_bitbuffer.o(.text*)
1374		*:block.o(.text*)
1375		*:pulsedata.o(.text*)
1376		*:mdct.o(.text*)
1377		*:genericStds.o(.text*)
1378#endif
1379
1380#ifdef OPUS_DECODE_IN_CP
1381		/* opus */
1382		*:opus_decoder.o(.text*)
1383		*:bands.o(.text*)
1384		*:celt_decoder.o(.text*)
1385		*:entenc.o(.text*)
1386		*:entdec.o(.text*)
1387		*:vq.o(.text*)
1388		*:decode_core.o(.text*)
1389		*:opus.o(.text*)
1390		*:dec_API.o(.text*)
1391		*:init_decoder.o(.text*)
1392		*:CNG.o(.text*)
1393		*:PLC.o(.text*)
1394		*:decoder_set_fs.o(.text*)
1395		*:decode_frame.o(.text*)
1396		*:decode_indices.o(.text*)
1397		*:decode_pulses.o(.text*)
1398		*:decode_parameters.o(.text*)
1399		*:decode_pitch.o(.text*)
1400		*:control_audio_bandwidth.o(.text*)
1401		*:gain_quant.o(.text*)
1402		*:NLSF_decode.o(.text*)
1403		*:NLSF_stabilize.o(.text*)
1404		*:NLSF2A.o(.text*)
1405		*:stereo_MS_to_LR.o(.text*)
1406		*:LPC_fit.o(.text*)
1407		*:bwexpander_32.o(.text*)
1408		*:LPC_inv_pred_gain.o(.text*)
1409		*:resampler_private_IIR_FIR.o(.text*)
1410		*:resampler_private_AR2.o(.text*)
1411		*:stereo_decode_pred.o(.text*)
1412		*:resampler_private_down_FIR.o(.text*)
1413		*:resampler_private_up2_HQ.o(.text*)
1414		*:bwexpander.o(.text*)
1415		*:quant_bands.o(.text*)
1416		*:opus_kiss_fft.o(.text*)
1417		*:rate.o(.text*.compute_allocation)
1418		*:cwrs.o(.text*)
1419		*:mathops.o(.text*)
1420		*:LPC_analysis_filter.o(.text*)
1421		*:burg_modified_FIX.o(.text*)
1422		*:vector_ops_FIX.o(.text*)
1423		*:NLSF_del_dec_quant.o(.text*)
1424		*:encode_frame_FIX.o(.text*)
1425		*:pitch.o(.text*)
1426		*:resampler.o(.text*)
1427		*:VAD.o(.text*)
1428		*:encode_indices.o(.text*)
1429		*:control_codec.o(.text*)
1430		*:celt_lpc.o(.text*)
1431		*:shell_coder.o(.text*)
1432		*:init_encoder.o(.text*)
1433		*:log2lin.o(.text*)
1434		*:biquad_alt.o(.text*)
1435		*:stereo_encode_pred.o(.text*)
1436		*:NLSF_unpack.o(.text*)
1437		*:code_signs.o(.text*)
1438		*:lin2log.o(.text*)
1439		*:HP_variable_cutoff.o(.text*)
1440		*:sum_sqr_shift.o(.text*)
1441		*:inner_prod_aligned.o(.text*)
1442		*:stereo_quant_pred.o(.text*)
1443		*:entcode.o(.text*)
1444		*:celt.o(.text*)
1445		*:laplace.o(.text*)
1446		*:NSQ.o(.text*) /*complexity 1*/
1447		*:NSQ_del_dec.o(.text*) /*complexity 2*/
1448#endif
1449
1450#ifdef OPUS_ENCODE_IN_CP
1451		/* /opus/src/src */
1452		*:analysis.o(.text*)
1453		*:mlp.o(.text*)
1454		*:mlp_data.o(.text*)
1455		*:opus.o(.text*)
1456		/*:opus_decoder.o(.text*) */
1457		*:opus_encoder.o(.text*)
1458		*:opus_memory.o(.text*)
1459		*:opus_multistream.o(.text*)
1460		/*:opus_multistream_decoder.o(.text*) */
1461		*:opus_multistream_encoder.o(.text*)
1462		*:repacketizer.o(.text*)
1463		/* /opus/src/silk */
1464		*:A2NLSF.o(.text*)
1465		*:ana_filt_bank_1.o(.text*)
1466		*:biquad_alt.o(.text*)
1467		*:bwexpander_32.o(.text*)
1468		*:bwexpander.o(.text*)
1469		*:check_control_input.o(.text*)
1470		*:CNG.o(.text*)
1471		*:code_signs.o(.text*)
1472		*:control_audio_bandwidth.o(.text*)
1473		*:control_codec.o(.text*)
1474		*:control_SNR.o(.text*)
1475		*:debug.o(.text*)
1476		/*:dec_API.o(.text*) */
1477		/*:decode_core.o(.text*) */
1478		/*:decode_frame.o(.text*) */
1479		/*:decode_indices.o(.text*) */
1480		/*:decode_parameters.o(.text*) */
1481		/*:decode_pitch.o(.text*) */
1482		*:decode_pulses.o(.text*)
1483		/*:decoder_set_fs.o(.text*) */
1484		*:enc_API.o(.text*)
1485		*:encode_indices.o(.text*)
1486		*:encode_pulses.o(.text*)
1487		*:gain_quant.o(.text*)
1488		*:HP_variable_cutoff.o(.text*)
1489		/*:init_decoder.o(.text*) */
1490		*:init_encoder.o(.text*)
1491		*:inner_prod_aligned.o(.text*)
1492		*:interpolate.o(.text*)
1493		*:lin2log.o(.text*)
1494		*:log2lin.o(.text*)
1495		*:LPC_analysis_filter.o(.text*)
1496		*:LPC_fit.o(.text*)
1497		*:LPC_inv_pred_gain.o(.text*)
1498		*:LP_variable_cutoff.o(.text*)
1499		*:NLSF2A.o(.text*)
1500		*:NLSF_decode.o(.text*)
1501		*:NLSF_del_dec_quant.o(.text*)
1502		*:NLSF_encode.o(.text*)
1503		*:NLSF_stabilize.o(.text*)
1504		*:NLSF_unpack.o(.text*)
1505		*:NLSF_VQ.o(.text*)
1506		*:NLSF_VQ_weights_laroia.o(.text*)
1507		*:NSQ.o(.text*)
1508		*:NSQ_del_dec.o(.text*)
1509		*:pitch_est_tables.o(.text*)
1510		*:PLC.o(.text*)
1511		*:process_NLSFs.o(.text*)
1512		*:quant_LTP_gains.o(.text*)
1513		*:resampler.o(.text*)
1514		*:resampler_down2_3.o(.text*)
1515		*:resampler_down2.o(.text*)
1516		*:resampler_private_AR2.o(.text*)
1517		*:resampler_private_down_FIR.o(.text*)
1518		*:resampler_private_IIR_FIR.o(.text*)
1519		*:resampler_private_up2_HQ.o(.text*)
1520		*:resampler_rom.o(.text*)
1521		*:shell_coder.o(.text*)
1522		*:sigm_Q15.o(.text*)
1523		*:sort.o(.text*)
1524		/*:stereo_decode_pred.o(.text*) */
1525		*:stereo_encode_pred.o(.text*)
1526		*:stereo_find_predictor.o(.text*)
1527		*:stereo_LR_to_MS.o(.text*)
1528		*:stereo_MS_to_LR.o(.text*)
1529		*:stereo_quant_pred.o(.text*)
1530		*:sum_sqr_shift.o(.text*)
1531		*:table_LSF_cos.o(.text*)
1532		*:tables_gain.o(.text*)
1533		*:tables_LTP.o(.text*)
1534		*:tables_NLSF_CB_NB_MB.o(.text*)
1535		*:tables_NLSF_CB_WB.o(.text*)
1536		*:tables_other.o(.text*)
1537		*:tables_pitch_lag.o(.text*)
1538		*:tables_pulses_per_block.o(.text*)
1539		*:VAD.o(.text*)
1540		*:VQ_WMat_EC.o(.text*)
1541		/* /opus/src/silk/fixed */
1542		*:apply_sine_window_FIX.o(.text*)
1543		*:autocorr_FIX.o(.text*)
1544		*:burg_modified_FIX.o(.text*)
1545		*:corrMatrix_FIX.o(.text*)
1546		*:encode_frame_FIX.o(.text*)
1547		*:find_LPC_FIX.o(.text*)
1548		*:find_LTP_FIX.o(.text*)
1549		*:find_pitch_lags_FIX.o(.text*)
1550		*:find_pred_coefs_FIX.o(.text*)
1551		*:k2a_FIX.o(.text*)
1552		*:k2a_Q16_FIX.o(.text*)
1553		*:LTP_analysis_filter_FIX.o(.text*)
1554		*:LTP_scale_ctrl_FIX.o(.text*)
1555		*:noise_shape_analysis_FIX.o(.text*)
1556		*:pitch_analysis_core_FIX.o(.text*)
1557		*:process_gains_FIX.o(.text*)
1558		*:regularize_correlations_FIX.o(.text*)
1559		*:residual_energy16_FIX.o(.text*)
1560		*:residual_energy_FIX.o(.text*)
1561		*:schur64_FIX.o(.text*)
1562		*:schur_FIX.o(.text*)
1563		*:vector_ops_FIX.o(.text*)
1564		*:warped_autocorrelation_FIX.o(.text*)
1565		/* /opus/src/celt */
1566		*:bands.o(.text*)
1567		*:celt.o(.text*)
1568		/*:celt_decoder.o(.text*) */
1569		*:celt_encoder.o(.text*)
1570		*:celt_lpc.o(.text*)
1571		*:cwrs.o(.text*)
1572		*:entcode.o(.text*)
1573		*:entdec.o(.text*)
1574		*:entenc.o(.text*)
1575		*:laplace.o(.text*)
1576		*:mathops.o(.text*)
1577		*:mdct.o(.text*)
1578		*:modes.o(.text*)
1579		*:opus_kiss_fft.o(.text*)
1580		*:pitch.o(.text*)
1581		*:quant_bands.o(.text*)
1582		*:rate.o(.text*.compute_allocation)
1583		*:vq.o(.text*)
1584#endif
1585
1586#ifdef VOIP_ALG_ALI_TEST_IN_CP
1587		/* alg voip */
1588		*:audio_alg.o(.text*)
1589#endif
1590
1591#ifdef EQ_DRC_IN_CP
1592		/* eq */
1593		*:iir_process.o(.text*)
1594		/* drc */
1595		*:drc.o(*text)
1596		*:data_compressor.o(*text)
1597		/* limiter */
1598		*:limiter.o(.text*)
1599		*:floatlimiter.o(.text*)
1600#endif
1601
1602#ifdef ALSA_RESAMPLE_IN_CP
1603		*:audio_resample_ex.o(.text*)
1604		*:resample_coef.o(.text*)
1605#endif
1606		. = ALIGN(4);
1607		__cp_text_sram_exec_end__ = .;
1608	} > RAMCPX
1609
1610	__cp_text_sram_start = RAMX_TO_RAM(__cp_text_sram_exec_start__);
1611	__cp_text_sram_end = RAMX_TO_RAM(__cp_text_sram_exec_end__);
1612
1613	.vector_table_cp (ORIGIN(RAMCP)) (NOLOAD) :
1614	{
1615		KEEP(*(.vector_table_cp))
1616		. = VECTOR_SECTION_SIZE;
1617		. = ALIGN(4);
1618	} > RAMCP
1619
1620	__cp_data_sram_start_flash__ = __cp_text_sram_start_flash__ + SIZEOF(.cp_text_sram);
1621
1622	.cp_data_sram (.) : AT (__cp_data_sram_start_flash__)
1623	{
1624		__cp_data_sram_start = .;
1625		*(.cp_data*)
1626		*:cp_queue.o(.data* .rodata*)
1627#if defined(GSOUND_HOTWORD_EXTERNAL)
1628		//*:libspeech*.o(.data* .rodata*)
1629#endif
1630		. = ALIGN(4);
1631
1632#ifdef MP3_DECODE_IN_CP
1633		/* mp3 */
1634		*:mini_mp3.o(.data* .rodata*)
1635#endif
1636
1637#ifdef AAC_DECODE_IN_CP
1638		/* aac */
1639		*:block.o(.data* .rodata*)
1640		*:tpdec_lib.o(.data* .rodata*)
1641		*:tpdec_latm.o(.data* .rodata*)
1642		*:aacdec_pns.o(.data* .rodata*)
1643		*:aacdec_tns.o(.data* .rodata*)
1644		*:pulsedata.o(.data* .rodata*)
1645		*:channel.o(.data* .rodata*)
1646		*:aacdecoder.o(.data* .rodata*)
1647		*:channelinfo.o(.data* .rodata*)
1648		*:aacdecoder_lib.o(.data* .rodata*)
1649		*:stereo.o(.data* .rodata*)
1650		*:fixpoint_math.o(.data* .rodata*)
1651		*:FDK_bitbuffer.o(.data* .rodata*)
1652		*:tpdec_adts.o(.data* .rodata*)
1653		*:aac_rom.o(.data* .rodata*)
1654		*:FDK_tools_rom.o(.data* .rodata*)
1655#endif
1656
1657#ifdef OPUS_DECODE_IN_CP
1658		/* opus */
1659		*:resampler.o(.data* .rodata*)
1660		*:tables_other.o(.data* .rodata*)
1661		*:tables_gain.o(.data* .rodata*)
1662		*:tables_LTP.o(.data* .rodata*)
1663		*:tables_NLSF_CB_NB_MB.o(.data* .rodata*)
1664		*:NLSF2A.o(.data* .rodata*)
1665		*:table_LSF_cos.o(.data* .rodata*)
1666		*:tables_pulses_per_block.o(.data* .rodata*)
1667		*:PLC.o(.data* .rodata*)
1668		*:resampler_rom.o(.data* .rodata*)
1669		*:pitch_est_tables.o(.data* .rodata*)
1670		*:tables_pitch_lag.o(.data* .rodata*)
1671		*:celt_decoder.o(.data* .rodata*)
1672		*:bands.o(.data* .rodata*)
1673		*:vq.o(.data* .rodata*)
1674		*:cwrs.o(.data* .rodata*)
1675		*:entcode.o(.data* .rodata*)
1676		*:rate.o(.rodata.LOG2_FRAC_TABLE)
1677		*:modes.o(.data* .rodata*)
1678		*:quant_bands.o(.data* .rodata*)
1679		*:opus_decoder.o(.data* .rodata*)
1680		*:dec_API.o(.data* .rodata*)
1681		*:tables_NLSF_CB_WB.o(.data* .rodata*)
1682		*:celt.o(.data* .rodata*)
1683#endif
1684
1685#ifdef OPUS_ENCODE_IN_CP
1686		/* /opus/src/src */
1687		*:analysis.o(.data* .rodata*)
1688		*:mlp.o(.data* .rodata*)
1689		*:mlp_data.o(.data* .rodata*)
1690		*:opus.o(.data* .rodata*)
1691		/*:opus_decoder.o(.data* .rodata*) */
1692		*:opus_encoder.o(.data* .rodata*)
1693		*:opus_memory.o(.data* .rodata*)
1694		*:opus_multistream.o(.data* .rodata*)
1695		/*:opus_multistream_decoder.o(.data* .rodata*) */
1696		*:opus_multistream_encoder.o(.data* .rodata*)
1697		*:repacketizer.o(.data* .rodata*)
1698		/* /opus/src/silk */
1699		*:A2NLSF.o(.data* .rodata*)
1700		*:ana_filt_bank_1.o(.data* .rodata*)
1701		*:biquad_alt.o(.data* .rodata*)
1702		*:bwexpander_32.o(.data* .rodata*)
1703		*:bwexpander.o(.data* .rodata*)
1704		*:check_control_input.o(.data* .rodata*)
1705		*:CNG.o(.data* .rodata*)
1706		*:code_signs.o(.data* .rodata*)
1707		*:control_audio_bandwidth.o(.data* .rodata*)
1708		*:control_codec.o(.data* .rodata*)
1709		*:control_SNR.o(.data* .rodata*)
1710		*:debug.o(.data* .rodata*)
1711		/*:dec_API.o(.data* .rodata*) */
1712		/*:decode_core.o(.data* .rodata*) */
1713		/*:decode_frame.o(.data* .rodata*) */
1714		/*:decode_indices.o(.data* .rodata*) */
1715		/*:decode_parameters.o(.data* .rodata*) */
1716		/*:decode_pitch.o(.data* .rodata*) */
1717		*:decode_pulses.o(.data* .rodata*)
1718		/*:decoder_set_fs.o(.data* .rodata*) */
1719		*:enc_API.o(.data* .rodata*)
1720		*:encode_indices.o(.data* .rodata*)
1721		*:encode_pulses.o(.data* .rodata*)
1722		*:gain_quant.o(.data* .rodata*)
1723		*:HP_variable_cutoff.o(.data* .rodata*)
1724		/*:init_decoder.o(.data* .rodata*) */
1725		*:init_encoder.o(.data* .rodata*)
1726		*:inner_prod_aligned.o(.data* .rodata*)
1727		*:interpolate.o(.data* .rodata*)
1728		*:lin2log.o(.data* .rodata*)
1729		*:log2lin.o(.data* .rodata*)
1730		*:LPC_analysis_filter.o(.data* .rodata*)
1731		*:LPC_fit.o(.data* .rodata*)
1732		*:LPC_inv_pred_gain.o(.data* .rodata*)
1733		*:LP_variable_cutoff.o(.data* .rodata*)
1734		*:NLSF2A.o(.data* .rodata*)
1735		*:NLSF_decode.o(.data* .rodata*)
1736		*:NLSF_del_dec_quant.o(.data* .rodata*)
1737		*:NLSF_encode.o(.data* .rodata*)
1738		*:NLSF_stabilize.o(.data* .rodata*)
1739		*:NLSF_unpack.o(.data* .rodata*)
1740		*:NLSF_VQ.o(.data* .rodata*)
1741		*:NLSF_VQ_weights_laroia.o(.data* .rodata*)
1742		*:NSQ.o(.data* .rodata*)
1743		*:NSQ_del_dec.o(.data* .rodata*)
1744		*:pitch_est_tables.o(.data* .rodata*)
1745		*:PLC.o(.data* .rodata*)
1746		*:process_NLSFs.o(.data* .rodata*)
1747		*:quant_LTP_gains.o(.data* .rodata*)
1748		*:resampler.o(.data* .rodata*)
1749		*:resampler_down2_3.o(.data* .rodata*)
1750		*:resampler_down2.o(.data* .rodata*)
1751		*:resampler_private_AR2.o(.data* .rodata*)
1752		*:resampler_private_down_FIR.o(.data* .rodata*)
1753		*:resampler_private_IIR_FIR.o(.data* .rodata*)
1754		*:resampler_private_up2_HQ.o(.data* .rodata*)
1755		*:resampler_rom.o(.data* .rodata*)
1756		*:shell_coder.o(.data* .rodata*)
1757		*:sigm_Q15.o(.data* .rodata*)
1758		*:sort.o(.data* .rodata*)
1759		/*:stereo_decode_pred.o(.data* .rodata*) */
1760		*:stereo_encode_pred.o(.data* .rodata*)
1761		*:stereo_find_predictor.o(.data* .rodata*)
1762		*:stereo_LR_to_MS.o(.data* .rodata*)
1763		*:stereo_MS_to_LR.o(.data* .rodata*)
1764		*:stereo_quant_pred.o(.data* .rodata*)
1765		*:sum_sqr_shift.o(.data* .rodata*)
1766		*:table_LSF_cos.o(.data* .rodata*)
1767		*:tables_gain.o(.data* .rodata*)
1768		*:tables_LTP.o(.data* .rodata*)
1769		*:tables_NLSF_CB_NB_MB.o(.data* .rodata*)
1770		*:tables_NLSF_CB_WB.o(.data* .rodata*)
1771		*:tables_other.o(.data* .rodata*)
1772		*:tables_pitch_lag.o(.data* .rodata*)
1773		*:tables_pulses_per_block.o(.data* .rodata*)
1774		*:VAD.o(.data* .rodata*)
1775		*:VQ_WMat_EC.o(.data* .rodata*)
1776		/* /opus/src/silk/fixed */
1777		*:apply_sine_window_FIX.o(.data* .rodata*)
1778		*:autocorr_FIX.o(.data* .rodata*)
1779		*:burg_modified_FIX.o(.data* .rodata*)
1780		*:corrMatrix_FIX.o(.data* .rodata*)
1781		*:encode_frame_FIX.o(.data* .rodata*)
1782		*:find_LPC_FIX.o(.data* .rodata*)
1783		*:find_LTP_FIX.o(.data* .rodata*)
1784		*:find_pitch_lags_FIX.o(.data* .rodata*)
1785		*:find_pred_coefs_FIX.o(.data* .rodata*)
1786		*:k2a_FIX.o(.data* .rodata*)
1787		*:k2a_Q16_FIX.o(.data* .rodata*)
1788		*:LTP_analysis_filter_FIX.o(.data* .rodata*)
1789		*:LTP_scale_ctrl_FIX.o(.data* .rodata*)
1790		*:noise_shape_analysis_FIX.o(.data* .rodata*)
1791		*:pitch_analysis_core_FIX.o(.data* .rodata*)
1792		*:process_gains_FIX.o(.data* .rodata*)
1793		*:regularize_correlations_FIX.o(.data* .rodata*)
1794		*:residual_energy16_FIX.o(.data* .rodata*)
1795		*:residual_energy_FIX.o(.data* .rodata*)
1796		*:schur64_FIX.o(.data* .rodata*)
1797		*:schur_FIX.o(.data* .rodata*)
1798		*:vector_ops_FIX.o(.data* .rodata*)
1799		*:warped_autocorrelation_FIX.o(.data* .rodata*)
1800		/* /opus/src/celt */
1801		*:bands.o(.data* .rodata*)
1802		*:celt.o(.data* .rodata*)
1803		/*:celt_decoder.o(.data* .rodata*) */
1804		*:celt_encoder.o(.data* .rodata*)
1805		*:celt_lpc.o(.data* .rodata*)
1806		*:cwrs.o(.data* .rodata*)
1807		*:entcode.o(.data* .rodata*)
1808		*:entdec.o(.data* .rodata*)
1809		*:entenc.o(.data* .rodata*)
1810		*:laplace.o(.data* .rodata*)
1811		*:mathops.o(.data* .rodata*)
1812		*:mdct.o(.data* .rodata*)
1813		*:modes.o(.data* .rodata*)
1814		*:opus_kiss_fft.o(.data* .rodata*)
1815		*:pitch.o(.data* .rodata*)
1816		*:quant_bands.o(.data* .rodata*)
1817		*:rate.o(.rodata.LOG2_FRAC_TABLE)
1818		*:vq.o(.data* .rodata*)
1819#endif
1820
1821#ifdef VOIP_ALG_ALI_TEST_IN_CP
1822		/* alg voip */
1823		*:audio_alg.o(.data* .rodata*)
1824#endif
1825
1826#ifdef EQ_DRC_IN_CP
1827		/* drc */
1828		*:drc.o(.data* .rodata*)
1829		*:data_compressor.o(.data* .rodata*)
1830		*:floatlimiter.o(.data* .rodata*)
1831#endif
1832
1833#ifdef ALSA_RESAMPLE_IN_CP
1834		*:audio_resample_ex.o(.data* .rodata*)
1835		*:resample_coef.o(.data* .rodata*)
1836#endif
1837		. = ALIGN(4);
1838		__cp_data_sram_end = .;
1839	} > RAMCP
1840
1841	__cp_sram_end_flash__ = __cp_data_sram_start_flash__ + SIZEOF(.cp_data_sram);
1842
1843	.cp_bss_sram (.) (NOLOAD) : AT (ADDR(.cp_bss_sram))
1844	{
1845		__cp_bss_sram_start = .;
1846		*(.cp_bss*)
1847		. = ALIGN(4);
1848
1849#ifdef MP3_DECODE_IN_CP
1850		/* mp3 */
1851		*:mini_mp3.o(.bss*)
1852#endif
1853
1854#ifdef AAC_DECODE_IN_CP
1855		/* aac */
1856		*:aacdecoder.o(.bss*)
1857#endif
1858
1859#ifdef OPUS_DECODE_IN_CP
1860		/* opus */
1861		*:celt.o(.bss*)
1862#endif
1863
1864#ifdef OPUS_ENCODE_IN_CP
1865		/* /opus/src/src */
1866		*:analysis.o(.bss*)
1867		*:mlp.o(.bss*)
1868		*:mlp_data.o(.bss*)
1869		*:opus.o(.bss*)
1870		/*:opus_decoder.o(.bss*) */
1871		*:opus_encoder.o(.bss*)
1872		*:opus_memory.o(.bss*)
1873		*:opus_multistream.o(.bss*)
1874		/*:opus_multistream_decoder.o(.bss*) */
1875		*:opus_multistream_encoder.o(.bss*)
1876		*:repacketizer.o(.bss*)
1877		/* /opus/src/silk */
1878		*:A2NLSF.o(.bss*)
1879		*:ana_filt_bank_1.o(.bss*)
1880		*:biquad_alt.o(.bss*)
1881		*:bwexpander_32.o(.bss*)
1882		*:bwexpander.o(.bss*)
1883		*:check_control_input.o(.bss*)
1884		*:CNG.o(.bss*)
1885		*:code_signs.o(.bss*)
1886		*:control_audio_bandwidth.o(.bss*)
1887		*:control_codec.o(.bss*)
1888		*:control_SNR.o(.bss*)
1889		*:debug.o(.bss*)
1890		/*:dec_API.o(.bss*) */
1891		/*:decode_core.o(.bss*) */
1892		/*:decode_frame.o(.bss*) */
1893		/*:decode_indices.o(.bss*) */
1894		/*:decode_parameters.o(.bss*) */
1895		/*:decode_pitch.o(.bss*) */
1896		*:decode_pulses.o(.bss*)
1897		/*:decoder_set_fs.o(.bss*) */
1898		*:enc_API.o(.bss*)
1899		*:encode_indices.o(.bss*)
1900		*:encode_pulses.o(.bss*)
1901		*:gain_quant.o(.bss*)
1902		*:HP_variable_cutoff.o(.bss*)
1903		/*:init_decoder.o(.bss*) */
1904		*:init_encoder.o(.bss*)
1905		*:inner_prod_aligned.o(.bss*)
1906		*:interpolate.o(.bss*)
1907		*:lin2log.o(.bss*)
1908		*:log2lin.o(.bss*)
1909		*:LPC_analysis_filter.o(.bss*)
1910		*:LPC_fit.o(.bss*)
1911		*:LPC_inv_pred_gain.o(.bss*)
1912		*:LP_variable_cutoff.o(.bss*)
1913		*:NLSF2A.o(.bss*)
1914		*:NLSF_decode.o(.bss*)
1915		*:NLSF_del_dec_quant.o(.bss*)
1916		*:NLSF_encode.o(.bss*)
1917		*:NLSF_stabilize.o(.bss*)
1918		*:NLSF_unpack.o(.bss*)
1919		*:NLSF_VQ.o(.bss*)
1920		*:NLSF_VQ_weights_laroia.o(.bss*)
1921		*:NSQ.o(.bss*)
1922		*:NSQ_del_dec.o(.bss*)
1923		*:pitch_est_tables.o(.bss*)
1924		*:PLC.o(.bss*)
1925		*:process_NLSFs.o(.bss*)
1926		*:quant_LTP_gains.o(.bss*)
1927		*:resampler.o(.bss*)
1928		*:resampler_down2_3.o(.bss*)
1929		*:resampler_down2.o(.bss*)
1930		*:resampler_private_AR2.o(.bss*)
1931		*:resampler_private_down_FIR.o(.bss*)
1932		*:resampler_private_IIR_FIR.o(.bss*)
1933		*:resampler_private_up2_HQ.o(.bss*)
1934		*:resampler_rom.o(.bss*)
1935		*:shell_coder.o(.bss*)
1936		*:sigm_Q15.o(.bss*)
1937		*:sort.o(.bss*)
1938		/*:stereo_decode_pred.o(.bss*) */
1939		*:stereo_encode_pred.o(.bss*)
1940		*:stereo_find_predictor.o(.bss*)
1941		*:stereo_LR_to_MS.o(.bss*)
1942		*:stereo_MS_to_LR.o(.bss*)
1943		*:stereo_quant_pred.o(.bss*)
1944		*:sum_sqr_shift.o(.bss*)
1945		*:table_LSF_cos.o(.bss*)
1946		*:tables_gain.o(.bss*)
1947		*:tables_LTP.o(.bss*)
1948		*:tables_NLSF_CB_NB_MB.o(.bss*)
1949		*:tables_NLSF_CB_WB.o(.bss*)
1950		*:tables_other.o(.bss*)
1951		*:tables_pitch_lag.o(.bss*)
1952		*:tables_pulses_per_block.o(.bss*)
1953		*:VAD.o(.bss*)
1954		*:VQ_WMat_EC.o(.bss*)
1955		/* /opus/src/silk/fixed */
1956		*:apply_sine_window_FIX.o(.bss*)
1957		*:autocorr_FIX.o(.bss*)
1958		*:burg_modified_FIX.o(.bss*)
1959		*:corrMatrix_FIX.o(.bss*)
1960		*:encode_frame_FIX.o(.bss*)
1961		*:find_LPC_FIX.o(.bss*)
1962		*:find_LTP_FIX.o(.bss*)
1963		*:find_pitch_lags_FIX.o(.bss*)
1964		*:find_pred_coefs_FIX.o(.bss*)
1965		*:k2a_FIX.o(.bss*)
1966		*:k2a_Q16_FIX.o(.bss*)
1967		*:LTP_analysis_filter_FIX.o(.bss*)
1968		*:LTP_scale_ctrl_FIX.o(.bss*)
1969		*:noise_shape_analysis_FIX.o(.bss*)
1970		*:pitch_analysis_core_FIX.o(.bss*)
1971		*:process_gains_FIX.o(.bss*)
1972		*:regularize_correlations_FIX.o(.bss*)
1973		*:residual_energy16_FIX.o(.bss*)
1974		*:residual_energy_FIX.o(.bss*)
1975		*:schur64_FIX.o(.bss*)
1976		*:schur_FIX.o(.bss*)
1977		*:vector_ops_FIX.o(.bss*)
1978		*:warped_autocorrelation_FIX.o(.bss*)
1979		/* /opus/src/celt */
1980		*:bands.o(.bss*)
1981		*:celt.o(.bss*)
1982		/*:celt_decoder.o(.bss*) */
1983		*:celt_encoder.o(.bss*)
1984		*:celt_lpc.o(.bss*)
1985		*:cwrs.o(.bss*)
1986		*:entcode.o(.bss*)
1987		*:entdec.o(.bss*)
1988		*:entenc.o(.bss*)
1989		*:laplace.o(.bss*)
1990		*:mathops.o(.bss*)
1991		*:mdct.o(.bss*)
1992		*:modes.o(.bss*)
1993		*:opus_kiss_fft.o(.bss*)
1994		*:pitch.o(.bss*)
1995		*:quant_bands.o(.bss*)
1996		/*:rate.o(.bss*)*/
1997		*:vq.o(.bss*)
1998#endif
1999
2000#ifdef VOIP_ALG_ALI_TEST_IN_CP
2001		/* alg voip */
2002		*:audio_alg.o(.bss*)
2003#endif
2004
2005#ifdef EQ_DRC_IN_CP
2006		*:data_compressor.o(.bss*)
2007		*:floatlimiter.o(.bss*)
2008#endif
2009
2010#ifdef ALSA_RESAMPLE_IN_CP
2011		*:audio_resample_ex.o(.bss*)
2012		*:resample_coef.o(.bss*)
2013#endif
2014		. = ALIGN(4);
2015		__cp_bss_sram_end = .;
2016	} > RAMCP
2017
2018	__overlay_text_start_flash__ = __cp_sram_end_flash__;
2019#else
2020	__overlay_text_start_flash__ = __fast_sram_text_data_end_flash__;
2021#endif
2022
2023#ifdef OVERLAY_FOR_CP
2024	__overlay_text_start__ = __cp_text_sram_end;
2025#else
2026	__overlay_text_start__ = __fast_sram_text_data_end__;
2027#endif
2028	__overlay_text_exec_start__ = RAM_TO_RAMX(__overlay_text_start__);
2029
2030	OVERLAY (__overlay_text_exec_start__) : NOCROSSREFS AT (__overlay_text_start_flash__)
2031	{
2032#ifndef NO_OVERLAY
2033		.overlay_text0
2034		{
2035			LONG(0);
2036#if !defined(GLOBAL_SRAM_KISS_FFT)
2037			*:kiss_fft.o(.text*)
2038			*:kiss_fftr.o(.text*)
2039			*:fftwrap.o(.text*)
2040#endif
2041
2042#if !defined(GLOBAL_SRAM_CMSIS_FFT)
2043			*:cmsis_fftwrap.o(.text*)
2044			*:arm_rfft_fast_f32.o(.text*)
2045			*:arm_cfft_f32.o(.text*)
2046#endif
2047
2048#if defined(SCO_OPTIMIZE_FOR_RAM)
2049			*:arm_biquad_cascade_df1_f32.o(.text*)
2050			*:integer_delay.o(.text*)
2051			*:lc_mmse_ns_float.o(.text*.speech_ns2float_process)
2052			*:coherence.o(.text*)
2053			*:echo_suppression.o(.text*.float_cmp)
2054			*:echo_suppression.o(.text*.es_process)
2055			*:lcmmse.o(.text*.lcmmse_noise_estimate)
2056			*:lcmmse.o(.text*.lcmmse_get_speech_prob)
2057			*:logmmse.o(.text*.filterbank_compute_bank_pflt)
2058			*:logmmse.o(.text*.filterbank_compute_psd_pflt)
2059			*:logmmse.o(.text*.logmmse_analysis)
2060			*:logmmse.o(.text*.logmmse_process)
2061#if defined(CHIP_BEST1402) || defined(CHIP_BEST1400)
2062			*:lpc_plc.o(.text*.WB_PLC_common)
2063			*:lpc_plc.o(.text*.WB_PLC_erasure)
2064			*:lpc_plc.o(.text*.apfilterQ1_Q0)
2065			*:lpc_plc.o(.text*.apfilterQ0_Q0)
2066			*:lpc_plc.o(.text*.azfilterQ0_Q1)
2067			*:lpc_plc.o(.text*.decim)
2068			*:lpc_plc.o(.text*.merit)
2069#endif
2070#else
2071			/* common */
2072#if !defined(AUDIO_ANC_FB_ADJ_MC)
2073			*:ae_common.o(.text*)
2074			*:ae_rand.o(.text*)
2075			*:fastmath.o(.text*)
2076			*:integer_delay.o(.text*)
2077			*:iirfilt.o(.text*)
2078			*:ringbuf.o(.text*)
2079#endif
2080			*:scale_int16.o(.text*)
2081			*:speech_conv.o(.text*)
2082			*:speech_trans_buf.o(.text*)
2083
2084#if !defined(SCO_CP_ACCEL)
2085			*:frame_resize.o(.text*)
2086			*:buffer_manager.o(.text*)
2087			*:plc_8000.o(.text*)
2088#if defined(_CVSD_BYPASS_) || defined(CVSD_BYPASS)
2089			*:Pcm8k_Cvsd.o(.text*)
2090			*:cvsd_codec.o(.text*)
2091#endif
2092			*:dspfns.o(.text*)
2093			*:lpc_plc.o(.text*)
2094			*:plc_16000.o(.text*)
2095			*:sbc_filter.o(.text*)
2096#endif
2097			*:preprocess.o(.text*)
2098			*:filterbank.o(.text*)
2099			*:mdf.o(.text*)
2100#if defined(SPEECH_TX_2MIC_NS)
2101			*:webrtc_vad.o(.text*.WebRtcVad_Process)
2102			*:webrtc_vad.o(.text*.WebRtcVad_ValidRateAndFrameLength)
2103			*:webrtc_vad.o(.text*.WebRtcVad_CalcVad16khz)
2104			*:webrtc_vad.o(.text*.WebRtcVad_Downsampling)
2105			*:webrtc_vad.o(.text*.WebRtcVad_CalcVad8khz)
2106			*:vad_filterbank.o(.text*)
2107			*:energy.o(.text*)
2108			*:get_scaling_square.o(.text*)
2109			*:dual_mic_denoise.o(.text*)
2110			*:cross_correlation.o(.text*)
2111			*:min_max_operations.o(.text*)
2112			*:resample_by_2_internal.o(.text*)
2113			*:division_operations.o(.text*)
2114			*:downsample_fast.o(.text*)
2115			*:resample_fractional.o(.text*)
2116			*:resample_48khz.o(.text*)
2117			*:vad_sp.o(.text*)
2118			*:vad_core.o(.text*)
2119			*:webrtc_vad.o(.text*)
2120			*:vad_gmm.o(.text*)
2121#endif
2122#if defined(SPEECH_TX_2MIC_NS2)
2123			*:speech_2mic_ns2_denoise.o(.text*)
2124			*:speech_2mic_ns2_denoise_float.o(.text*)
2125#endif
2126#if defined(SPEECH_TX_2MIC_NS4)
2127			*:sensormic_denoise.o(.text*)
2128#endif
2129#if defined(SPEECH_TX_2MIC_NS5)
2130            *:leftright_denoise.o(.text*)
2131#endif
2132#if defined(SPEECH_TX_NS2) || defined(SPEECH_RX_NS2)
2133			*:lc_mmse_ns.o(.text*)
2134#endif
2135#if defined(SPEECH_TX_NS2FLOAT) || defined(SPEECH_RX_NS2FLOAT)
2136			*:lc_mmse_ns_float.o(.text*)
2137#endif
2138#if defined(SPEECH_TX_NS3) || defined(SPEECH_RX_NS3)
2139			*:ns3.o(.text*)
2140			*:noise_suppression_x.o(.text*)
2141			*:nsx_core.o(.text*)
2142			*:nsx_core_c.o(.text*)
2143			*:copy_set_operations.o(.text*)
2144			*:cross_correlation.o(.text*)
2145			*:division_operations.o(.text*)
2146			*:dot_product_with_scale.o(.text*)
2147			*:downsample_fast.o(.text*)
2148			*:energy.o(.text*)
2149			*:get_scaling_square.o(.text*)
2150			*:min_max_operations.o(.text*)
2151			*:real_fft.o(.text*)
2152			*:resample_by_2.o(.text*)
2153			*:resample_by_2_internal.o(.text*)
2154			*:spl_init.o(.text*)
2155			*:spl_sqrt.o(.text*)
2156			*:spl_sqrt_floor.o(.text*)
2157			*:vector_scaling_operations.o(.text*)
2158#endif
2159#if defined(SPEECH_TX_AEC2FLOAT) && !defined(AUDIO_ANC_FB_ADJ_MC)
2160			*:coherence.o(.text*)
2161			*:echo_canceller.o(.text*)
2162			*:echo_suppression.o(.text*)
2163			*:lcmmse.o(.text*)
2164			*:logmmse.o(.text*)
2165			*:mdf2.o(.text*)
2166			*:noise_generator.o(.text*)
2167			*:pink_noise_gen.o(.text*)
2168			*:white_noise_gen.o(.text*)
2169#endif
2170#if defined(SPEECH_TX_AEC3)
2171			*:SubBandBasedAEC.o(.text*)
2172#endif
2173#if defined(SPEECH_TX_3MIC_NS)
2174			*:speech_3mic_ns.o(.text*)
2175#endif
2176#if defined(SPEECH_CODEC_FIXED_SAMPLE_RATE)
2177			*:iir_resample.o(.text*)
2178#endif
2179#if defined(SPEECH_TX_COMPEXP)
2180			*:compexp.o(.text*)
2181#endif
2182#if defined(SPEECH_TX_EQ) || defined(SPEECH_RX_EQ) || defined(SPEECH_CODEC_FIXED_SAMPLE_RATE)
2183			*:speech_eq.o(.text*)
2184			*:speech_arm_eq.o(.text*)
2185			*:arm_biquad_cascade_df1_f32.o(.text*)
2186			*:arm_biquad_cascade_df1_ex_f32.o(.text*)
2187#endif
2188#if defined(SPEECH_TX_POST_GAIN) || defined(SPEECH_RX_POST_GAIN)
2189			*:speech_gain.o(.text*)
2190#endif
2191#if defined(__SMARTVOICE__)
2192#if defined(SPEECH_TX_2MIC_NS2) || defined(SPEECH_TX_NS2)
2193			*:app_smartvoice.o(.text*._Z23mic_data_process_deinitv)
2194			*:app_smartvoice.o(.text*._Z21mic_data_process_initv)
2195			*:app_smartvoice.o(.text*._Z20mic_data_process_runPsm)
2196#endif
2197#endif
2198
2199#endif // #if !defined(SCO_OPTIMIZE_FOR_RAM)
2200			*(.overlay_text0)
2201			. = ALIGN(4);
2202		}
2203		.overlay_text1
2204		{
2205			LONG(0);
2206#if !defined(RB_CODEC)
2207			*:fixedpoint.o(.text*)
2208			*:replaygain.o(.text*)
2209			*:dsp_core.o(.text*)
2210			*:dsp_misc.o(.text*)
2211			*:dsp_filter.o(.text*)
2212			*:dsp_sample_input.o(.text*)
2213			*:dsp_sample_output.o(.text*)
2214			*:eq.o(.text*)
2215			*:pga.o(.text*)
2216#if !defined(A2DP_AAC_ON) && !defined(A2DP_LHDC_ON)
2217			*:fir_process.o(.text*)
2218			*:iir_process.o(.text*.iir_run .text*.*iir_run_per_*)
2219#endif
2220#endif
2221#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2222#endif
2223			*(.overlay_a2dp_sbc*)
2224			*(.overlay_text1)
2225			. = ALIGN(4);
2226		}
2227		.overlay_text2
2228		{
2229			LONG(0);
2230			*:fmdec.o(.text* .data* .rodata* .bss*)
2231			*(.overlay_text2)
2232			. = ALIGN(4);
2233		}
2234		.overlay_text3
2235		{
2236			LONG(0);
2237			*:fft128dot.o(.text*)
2238			*(.overlay_text3)
2239			. = ALIGN(4);
2240		}
2241		.overlay_text4
2242		{
2243			LONG(0);
2244#ifdef A2DP_SOURCE_AAC_ON
2245            *:adj_thr.o(.text.*FDKaacEnc_AdjThrClose*)
2246            *:bit_cnt.o(.text*)
2247            *:quantize.o(.text*FDKaacEnc_quantizeLines*)
2248            *:adj_thr.o(.text*CalcRedValPower*)
2249            *:tpenc_lib.o(.text.*transportEnc_GetStaticBits*)
2250            *:tpenc_latm.o(.text.*transportEnc_LatmCountTotalBitDemandHeader*)
2251            *:tpenc_lib.o(.text.*transportEnc_GetBitstream*)
2252            *:line_pe.o(.text.*FDKaacEnc_calcSfbPe*)
2253            *:adj_thr.o(.text.*FDKaacEnc_calcPe*)
2254            *:spreading.o(.text.*FDKaacEnc_SpreadingMax*)
2255            *:bitenc.o(.text.*FDKaacEnc_writeExtensionData*)
2256            *:bitenc.o(.text.*FDKaacEnc_ChannelElementWrite*)
2257            *:qc_main.o(.text.*FDKaacEnc_getTotalConsumedBits*)
2258            *:adj_thr.o(.text.*FDKaacEnc_reduceThresholdsCBR*)
2259            *:band_nrg.o(.text.*FDKaacEnc_CalcSfbMaxScaleSpec*)
2260            *:aacenc_tns.o(.text.*FDKaacEnc_AutoToParcor*)
2261            *:aacenc_tns.o(.text.*FDKaacEnc_Parcor2Index*)
2262            *:aacenc_tns.o(.text.*FDKaacEnc_TnsDetect*)
2263            *:aacenc_tns.o(.text.*FDKaacEnc_TnsEncode*)
2264            *:pre_echo_control.o(.text.*FDKaacEnc_PreEchoControl*)
2265            *:transform.o(.text.*FDKaacEnc_Transform_Real*)
2266            *:band_nrg.o(.text.*FDKaacEnc_CheckBandEnergyOptim*)
2267            *:tpenc_latm.o(.text.*AdvanceAudioMuxElement*)
2268            *:aacenc.o(.text.*FDKaacEnc_EncodeFrame*)
2269            *:aacenc_pns.o(.text.*FDKaacEnc_PnsDetect*)
2270#else
2271#if defined(A2DP_AAC_ON)
2272			*:block.o(.text*.*CBlock_GetEscape*)
2273			*:tpdec_lib.o(.text*.*transportDec_GetBitstream*)
2274			*:tpdec_lib.o(.text*.*transportDec_GetAuBitsRemaining*)
2275			*:tpdec_latm.o(.text*.*CLatmDemux_GetValue*)
2276			*:tpdec_latm.o(.text*.*CLatmDemux_Read*)
2277			*:tpdec_lib.o(.text*.*transportDec_FillData*)
2278			*:tpdec_lib.o(.text*.*transportDec_ReadAccessUnit*)
2279			*:tpdec_lib.o(.text*.*transportDec_readHeader*)
2280			*:block.o(.text*.*ApplyTools*)
2281			*:aacdec_pns.o(.text*.*CPns_Apply*)
2282			*:aacdec_tns.o(.text*.*CTns_Apply*)
2283			*:aacdec_tns.o(.text*.*CTns_Reset*)
2284			*:aacdec_pns.o(.text*.*CPns_ResetData*)
2285			*:pulsedata.o(.text*.*CPulseData_Read*)
2286#if !defined(AAC_TEXT_PARTIAL_IN_FLASH)
2287			*:channel.o(.text*.*CChannelElement_Read*)
2288			*:tpdec_asc.o(.text*.*CProgramConfig_Reset*)
2289			*:tpdec_lib.o(.text*.*transportDec_CrcCheck*)
2290			*:block.o(.text*.*CBlock_FrequencyToTime*)
2291			*:block.o(.text*.*CBlock_ReadSectionData*)
2292			*:channel.o(.text*.*CChannelElement_Decode*)
2293			*:tpdec_lib.o(.text*.*transportDec_CrcEndReg*)
2294			*:aacdecoder.o(.text*.*CAacDecoder_DecodeFrame*)
2295			*:aac_mdct.o(.text*)
2296#endif
2297
2298#if !defined(__SBC_FUNC_IN_ROM_VBEST2000__) && !defined(AAC_TEXT_PARTIAL_IN_FLASH)
2299			*:block.o(.text*.*CBlock_ReadSpectralData*)
2300			*:block.o(.text*.*CBlock_ScaleSpectralData*)
2301			*:aacdec_tns.o(.text*.*CTns_ReadDataPresentFlag*)
2302			*:tpdec_lib.o(.text*.*transportDec_CrcStartReg*)
2303			*:block.o(.text*.*CBlock_ReadScaleFactorData*)
2304			*:tpdec_lib.o(.text*.*transportDec_EndAccessUnit*)
2305			*:tpdec_latm.o(.text*.*CLatmDemux_GetNrOfSubFrames*)
2306			*:tpdec_lib.o(.text*.*transportDec_GetAuBitsTotal*)
2307			*:tpdec_asc.o(.text*.*CProgramConfig_LookupElement*)
2308			*:tpdec_latm.o(.text*.*CLatmDemux_GetFrameLengthInBits*)
2309			*:tpdec_latm.o(.text*.*CLatmDemux_ReadPayloadLengthInfo*)
2310			*:block.o(.text*.*CBlock_InverseQuantizeSpectralData*)
2311			*:channelinfo.o(.text*.*IcsRead*)
2312			*:aacdec_tns.o(.text*.*CTns_Read*)
2313			*:tpdec_lib.o(.text*.*transportDec_AdjustEndOfAccessUnit*)
2314			*:pulsedata.o(.text*.*CPulseData_Apply*)
2315			*:tpdec_asc.o(.text*.*AudioSpecificConfig_Init*)
2316			*:tpdec_asc.o(.text*.*AudioSpecificConfig_Parse*)
2317			*:tpdec_latm.o(.text*.*CLatmDemux_ReadStreamMuxConfig*)
2318			*:tpdec_asc.o(.text*.*getSampleRate*)
2319			*:tpdec_asc.o(.text*.*getAOT*)
2320			*:aacdecoder.o(.text*.*CAacDecoder_Init*)
2321			*:tpdec_asc.o(.text*.*CProgramConfig_Init*)
2322			*:aacdecoder_lib.o(.text*.*aacDecoder_ConfigCallback*)
2323			*:aacdecoder.o(.text*.*CAacDecoder_ExtPayloadParse*)
2324			*:stereo.o(.text*.*CJointStereo_Read*)
2325#endif
2326#endif
2327#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2328			*:a2dp_decoder_aac_lc.o(.text*)
2329			*:fdkaac_codec.o(.text*)
2330#endif
2331			*(.overlay_a2dp_aac*)
2332#endif
2333			*(.overlay_text4)
2334			. = ALIGN(4);
2335		}
2336		.overlay_text5
2337		{
2338			LONG(0);
2339			*:mpa.o(.text*)
2340			*:bit.o(.text*)
2341			*:frame.o(.text*)
2342			*:huffman.o(.text*)
2343			*:layer12.o(.text*)
2344			*:layer3.o(.text*)
2345			*:stream.o(.text*)
2346			*:synth.o(.text*)
2347			*(.overlay_text5)
2348			. = ALIGN(4);
2349		}
2350		.overlay_text6
2351		{
2352			LONG(0);
2353#if defined(A2DP_SCALABLE_ON)
2354			*:rc_decode.o(.text*)
2355			*:audio_int32.o(.text*)
2356			*:ssc_ifft.o(.text*)
2357			*:vector_quant.o(.text*)
2358			*:ssc_quant.o(.text*)
2359			*:ssc_pulsealloc.o(.text*)
2360			*:audio.o(.text*)
2361			*:set_sbm.o(.text*)
2362			*:rc_code.o(.text*)
2363			*:SBM_pitchBased.o(.text*)
2364			*:ssc_imdct.o(.text*)
2365			*:audio_decoder.o(.text*)
2366			*:SoundBooster_DRC_classic.o(.text*)
2367			*:ssc_cwrs.o(.text*)
2368			*:ssc_mode.o(.text*)
2369			*:ssc_math.o(.text*)
2370			*:ssc_lap.o(.text*)
2371			*:SeamlessBufferManagement.o(.text*)
2372#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2373			*:a2dp_decoder_scalable.o(.text*)
2374#endif
2375			*(.overlay_a2dp_ssc*)
2376#endif
2377
2378#if defined(A2DP_LHDC_ON)
2379			*(.overlay_a2dp_lhdc*)
2380			*:a2dp_decoder_lhdc.o(.text*)
2381			*:testkey.o(.text*)
2382			*:lhdcUtil.o(.text*)
2383			*:lzh_dec.o(.text*)
2384			*:licdecrypt.o(.text*)
2385			*:lic_check.o(.text*)
2386			*:fast_upsampling_2x.o(.text*)
2387			*:encdec.o(.text*)
2388			*:dec.o(.text*)
2389			*:cirbuf.o(.text*)
2390			*:DecodeUps2xLPF.o(.text*)
2391			*:Arc.o(.text*)
2392#endif
2393#if defined(A2DP_LDAC_ON)
2394			*:a2dp_decoder_ldac.o(.text*)
2395			*:bitalloc_ldac.o(.text*)
2396			*:bitalloc_sub_ldac.o(.text*)
2397			*:encode_ldac.o(.text*)
2398			*:ldacBT.o(.text*)
2399			*:ldaclib.o(.text*)
2400			*:pack_ldac.o(.text*)
2401			*:quant_ldac.o(.text*)
2402			*:mdct_ldac.o(.text*)
2403			*:ldacBT_api.o(.text*)
2404			*:decode_ldac.o(.text*)
2405			*:dequant_ldac.o(.text*)
2406			*:imdct_ldac.o(.text*)
2407			*:ldacBT_internal.o(.text*)
2408			*:ldaclib_api.o(.text*)
2409			*:memory_ldac.o(.text*)
2410			*:setpcm_ldac.o(.text*)
2411			*:sigana_ldac.o(.text*)
2412			*:tables_ldac.o(.text*)
2413			*:tables_sigproc_ldac.o(.text*)
2414			*:unpack_ldac.o(.text*)
2415			*(.overlay_a2dp_ldac*)
2416#endif
2417
2418			*(.overlay_text6)
2419			. = ALIGN(4);
2420		}
2421		.overlay_text7
2422		{
2423			LONG(0);
2424#if defined(OPUS_IN_OVERLAY)
2425			/**:voice_opus.o(.text*)*/
2426			*:opus_encoder.o(.text*)
2427			*:analysis.o(.text*)
2428			/**:celt_encoder.o(.text*)*/
2429			*:celt_encoder.o(.text*.opus_custom_encoder_ctl)
2430			*:celt_encoder.o(.text*.celt_encoder_get_size)
2431			*:celt_encoder.o(.text*.opus_custom_encoder_get_size)
2432			*:celt_encoder.o(.text*.celt_encoder_init)
2433			*:celt_encoder.o(.text*.opus_custom_encoder_init_arch)
2434			*:celt_encoder.o(.text*.transient_analysis)
2435			*:celt_encoder.o(.text*.patch_transient_decision)
2436			*:celt_encoder.o(.text*.celt_preemphasis)
2437			*:celt_encoder.o(.text*.l1_metric)
2438			*:celt_encoder.o(.text*.tf_analysis)
2439			*:celt_encoder.o(.text*.tf_encode)
2440			*:celt_encoder.o(.text*.alloc_trim_analysis)
2441			*:celt_encoder.o(.text*.stereo_analysis)
2442			*:celt_encoder.o(.text*.median_of_5)
2443			*:celt_encoder.o(.text*.median_of_3)
2444			*:celt_encoder.o(.text*.dynalloc_analysis)
2445			*:celt_encoder.o(.text*.run_prefilter)
2446			*:celt_encoder.o(.text*.compute_vbr)
2447			*:celt_encoder.o(.text*.celt_encode_with_ec)
2448			*:celt_encoder.o(.text*.opus_custom_encoder_ctl)
2449			*:repacketizer.o(.text*)
2450			*:opus.o(.text*)
2451			*:enc_API.o(.text*)
2452			*:entenc.o(.text*)
2453			*:control_audio_bandwidth.o(.text*)
2454			*:encode_pulses.o(.text*)
2455			*:LPC_analysis_filter.o(.text*)
2456			*:burg_modified_FIX.o(.text*)
2457			*:vector_ops_FIX.o(.text*)
2458			*:NLSF_del_dec_quant.o(.text*)
2459			*:encode_frame_FIX.o(.text*)
2460			*:pitch.o(.text*)
2461			*:resampler.o(.text*)
2462			*:VAD.o(.text*)
2463			*:encode_indices.o(.text*)
2464			*:control_codec.o(.text*)
2465			*:celt_lpc.o(.text*)
2466			*:shell_coder.o(.text*)
2467			*:init_encoder.o(.text*)
2468			*:log2lin.o(.text*)
2469			*:biquad_alt.o(.text*)
2470			*:stereo_encode_pred.o(.text*)
2471			*:NLSF_unpack.o(.text*)
2472			*:code_signs.o(.text*)
2473			*:lin2log.o(.text*)
2474			*:HP_variable_cutoff.o(.text*)
2475			*:sum_sqr_shift.o(.text*)
2476			*:inner_prod_aligned.o(.text*)
2477			*:stereo_quant_pred.o(.text*)
2478			*:entcode.o(.text*)
2479			*:celt.o(.text*)
2480			*:laplace.o(.text*)
2481			*:NSQ.o(.text*) /*complexity 1*/
2482			*:NSQ_del_dec.o(.text*) /*complexity 2*/
2483#endif
2484			*(.overlay_text7)
2485			. = ALIGN(4);
2486		}
2487#endif
2488		.overlay_text_last
2489		{
2490#ifndef NO_OVERLAY
2491			LONG(0);
2492#endif
2493			. = ALIGN(4);
2494		}
2495	} > REGION_OVERLAY_TEXT
2496
2497	.dummy_overlay_text_end (.) (NOLOAD) : AT (ADDR(.dummy_overlay_text_end))
2498	{
2499		__overlay_text_exec_end__ = .;
2500	} > REGION_OVERLAY_TEXT
2501
2502#ifdef OVERLAY_FOR_CP
2503	__fast_sram_end__ = __fast_sram_text_data_end__;
2504#else
2505	__fast_sram_end__ = RAMX_TO_RAM(__overlay_text_exec_end__);
2506#endif
2507
2508	ASSERT(__fast_sram_end__ - __fast_sram_text_data_start__ <= FAST_XRAM_SECTION_SIZE, "fast xram sections too large")
2509	__free_fram = FAST_XRAM_SECTION_SIZE - (__fast_sram_end__ - __fast_sram_text_data_start__);
2510
2511#ifdef OVERLAY_FOR_CP
2512	__overlay_data_start__ = __cp_bss_sram_end;
2513#else
2514	__overlay_data_start__ = __sram_bss_end__;
2515#endif
2516
2517	OVERLAY (__overlay_data_start__) : NOCROSSREFS AT (__load_stop_overlay_text_last)
2518	{
2519#ifndef NO_OVERLAY
2520		.overlay_data0
2521		{
2522			/* Explicitly place 4 bytes at section start to avoid "section type changed to PROGBITS" warnings */
2523			LONG(0);
2524#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2525			*:bt_sco_chain.o(.data* .rodata*)
2526			*:bt_sco_chain_cp.o(.data* .rodata*)
2527#endif
2528#if !defined(SCO_OPTIMIZE_FOR_RAM)
2529#if !defined(GLOBAL_SRAM_KISS_FFT)
2530			*:fftwrap.o(.data* .rodata*)
2531			*:kiss_fft.o(.data* .rodata*)
2532			*:kiss_fftr.o(.data* .rodata*)
2533#endif
2534
2535#if !defined(GLOBAL_SRAM_CMSIS_FFT)
2536			*:CommonTables.o(.rodata.armBitRevIndexTable256)
2537			*:CommonTables.o(.rodata.twiddleCoef_256)
2538			*:CommonTables.o(.rodata.twiddleCoef_rfft_512)
2539			*:CommonTables.o(.rodata.armBitRevIndexTable128)
2540			*:CommonTables.o(.rodata.twiddleCoef_128)
2541			*:CommonTables.o(.rodata.twiddleCoef_rfft_256)
2542#endif
2543
2544			/* common */
2545			*:fastmath_const.o(.data* .rodata*)
2546
2547			*:preprocess.o(.data* .rodata*)
2548			*:filterbank.o(.data* .rodata*)
2549
2550#if !defined(SCO_CP_ACCEL)
2551			*:plc_8000.o(.data* .rodata*)
2552#if defined(_CVSD_BYPASS_) || defined(CVSD_BYPASS)
2553			*:Pcm8k_Cvsd.o(.data* .rodata* .bss*)
2554			*:cvsd_codec.o(.data* .rodata* .bss*)
2555#endif
2556			*:table.o(.data* .rodata*)
2557			*:plc_16000.o(.data* .rodata*)
2558#endif
2559#if !defined(AUDIO_ANC_FB_ADJ_MC)
2560			*:mdf.o(.data* .rodata*)
2561#endif
2562#if defined(SPEECH_TX_2MIC_NS)
2563			*:dual_mic_denoise.o(.data* .rodata*)
2564			*:vad_filterbank.o(.data* .rodata*)
2565			*:energy.o(.data* .rodata*)
2566			*:get_scaling_square.o(.data* .rodata*)
2567
2568			*:cross_correlation.o(.data* .rodata*)
2569			*:min_max_operations.o(.data* .rodata*)
2570			*:resample_by_2_internal.o(.data* .rodata*)
2571			*:division_operations.o(.data* .rodata*)
2572			*:downsample_fast.o(.data* .rodata*)
2573			*:resample_fractional.o(.data* .rodata*)
2574			*:resample_48khz.o(.data* .rodata*)
2575			*:vad_sp.o(.data* .rodata*)
2576			*:vad_core.o(.data* .rodata*)
2577			*:webrtc_vad.o(.data* .rodata*)
2578			*:vad_gmm.o(.data* .rodata*)
2579#endif
2580#if defined(SPEECH_TX_2MIC_NS2)
2581			*:speech_2mic_ns2_denoise.o(.data* .rodata*)
2582			*:speech_2mic_ns2_denoise_float.o(.data* .rodata*)
2583#endif
2584#if defined(SPEECH_TX_2MIC_NS4)
2585			*:sensormic_denoise.o(.data* .rodata*)
2586#endif
2587#if defined(SPEECH_TX_2MIC_NS5)
2588            *:leftright_denoise.o(.data* .rodata*)
2589#endif
2590#if defined(SPEECH_TX_NS2) || defined(SPEECH_RX_NS2)
2591			*:lc_mmse_ns.o(.data* .rodata*)
2592#endif
2593#if defined(SPEECH_TX_NS3) || defined(SPEECH_RX_NS3)
2594			*:nsx_core.o(.data* .rodata*)
2595#endif
2596#if defined(SPEECH_TX_NS2FLOAT) || defined(SPEECH_RX_NS2FLOAT)
2597			*:lc_mmse_ns_float.o(.data* .rodata*)
2598#endif
2599#if defined(SPEECH_TX_3MIC_NS)
2600			*:speech_3mic_ns.o(.data* .rodata*)
2601#endif
2602#if defined(SPEECH_TX_AEC3)
2603			*:SubBandBasedAEC.o(.data* .rodata*)
2604#endif
2605#if defined(SPEECH_CODEC_FIXED_SAMPLE_RATE)
2606			*:iir_resample.o(.data* .rodata*)
2607#endif
2608
2609#endif // #if !defined(SCO_OPTIMIZE_FOR_RAM)
2610
2611#if defined(SCO_CP_ACCEL)
2612			*:speech_win.o(.rodata.conj_fwin_60_128_cp)
2613			*:speech_win.o(.rodata.conj_fwin_120_256_cp)
2614			*:speech_win.o(.rodata.conj_fwin_128_256_cp)
2615			*:speech_win.o(.rodata.conj_fwin_240_512_cp)
2616			*:speech_win.o(.rodata.conj_fwin_256_512_cp)
2617#endif
2618			*(.overlay_data0 .overlay_rodata0)
2619			. = ALIGN(4);
2620			*(.overlay_sco_cache*)
2621			. = ALIGN(4);
2622		}
2623		.overlay_data1
2624		{
2625			LONG(0);
2626#if !defined(RB_CODEC)
2627			*:fixedpoint.o(.data* .rodata*)
2628			*:replaygain.o(.data* .rodata*)
2629			*:dsp_core.o(.data* .rodata*)
2630			*:dsp_misc.o(.data* .rodata*)
2631			*:dsp_filter.o(.data* .rodata*)
2632			*:dsp_sample_input.o(.data* .rodata*)
2633			*:dsp_sample_output.o(.data* .rodata*)
2634			*:eq.o(.data* .rodata*)
2635			*:pga.o(.data* .rodata*)
2636#if !defined(A2DP_AAC_ON)
2637			*:fir_process.o(.data* .rodata*)
2638#endif
2639#endif
2640#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2641		*:a2dp_decoder_sbc.o(.rodata*)
2642#endif
2643			*(.overlay_data1 .overlay_rodata1)
2644			. = ALIGN(4);
2645		}
2646		.overlay_data2
2647		{
2648			LONG(0);
2649			*(.overlay_data2 .overlay_rodata2)
2650			. = ALIGN(4);
2651		}
2652		.overlay_data3
2653		{
2654			LONG(0);
2655			*:fft128dot.o(.data* .rodata*)
2656			*(.overlay_data3 .overlay_rodata3)
2657			. = ALIGN(4);
2658		}
2659		.overlay_data4
2660		{
2661			LONG(0);
2662#ifdef A2DP_SOURCE_AAC_ON
2663			*:aacenc_lib.o(.data* .rodata*)
2664            *:aacenc.o(.data* .rodata*)
2665            *:adj_thr.o(.data* .rodata*)
2666            *:bit_cnt.o(.data* .rodata*)
2667            *:quantize.o(.data* .rodata*)
2668            *:tpenc_lib.o(.data* .rodata*)
2669            *:tpenc_latm.o(.data* .rodata*)
2670            *:line_pe.o(.data* .rodata*)
2671            *:spreading.o(.data* .rodata*)
2672            *:bitenc.o(.data* .rodata*)
2673            *:qc_main.o(.data* .rodata*)
2674            *:band_nrg.o(.data* .rodata*)
2675            *:aacenc_tns.o(.data* .rodata*)
2676            *:pre_echo_control.o(.data* .rodata*)
2677
2678            *:transform.o(.data* .rodata*)
2679            *:dyn_bits.o(.data* .rodata*)
2680            *:aacenc_pns.o(.data* .rodata*)
2681            *:aacEnc_ram.o(.data* .rodata*)
2682            *:aacEnc_rom.o(.data* .rodata*)
2683            *:bandwidth.o(.data* .rodata*)
2684            *:block_switch.o(.data* .rodata*)
2685            *:channel_map.o(.data* .rodata*)
2686            *:chaosmeasure.o(.data* .rodata*)
2687            *:grp_data.o(.data* .rodata*)
2688            *:intensity.o(.data* .rodata*)
2689            *:metadata_compressor.o(.data* .rodata*)
2690            *:metadata_main.o(.data* .rodata*)
2691            *:ms_stereo.o(.data* .rodata*)
2692            *:noisedet.o(.data* .rodata*)
2693            *:pnsparam.o(.data* .rodata*)
2694            *:psy_configuration.o(.data* .rodata*)
2695            *:psy_main.o(.data* .rodata*)
2696            *:sf_estim.o(.data* .rodata*)
2697            *:tonality.o(.data* .rodata*)
2698#else
2699#if defined(A2DP_AAC_ON)
2700			*:block.o(.data* .rodata*)
2701			*:tpdec_lib.o(.data* .rodata*)
2702			*:tpdec_latm.o(.data* .rodata*)
2703			*:aacdec_pns.o(.data* .rodata*)
2704			*:aacdec_tns.o(.data* .rodata*)
2705			*:pulsedata.o(.data* .rodata*)
2706			*:channel.o(.data* .rodata*)
2707			*:tpdec_asc.o(.data* .rodata*)
2708			*:aacdecoder.o(.data* .rodata*)
2709			*:channelinfo.o(.data* .rodata*)
2710			*:aacdecoder_lib.o(.data* .rodata*)
2711			*:stereo.o(.data* .rodata*)
2712			*:fixpoint_math.o(.data* .rodata*)
2713			*:FDK_bitbuffer.o(.data* .rodata*)
2714#endif
2715#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2716			*:a2dp_decoder_aac_lc.o(.rodata*)
2717			*:fdkaac_codec.o(.rodata*)
2718#endif
2719#endif
2720			*(.overlay_data4 .overlay_rodata4)
2721			. = ALIGN(4);
2722		}
2723		.overlay_data5
2724		{
2725			LONG(0);
2726			*:mpa.o(.data* .bss*)
2727			*:bit.o(.data* .bss*)
2728			*:frame.o(.data* .bss*)
2729			*:huffman.o(.data* .bss*)
2730			*:layer12.o(.data* .bss*)
2731			*:layer3.o(.data* .bss*)
2732			*:stream.o(.data* .bss*)
2733			*:synth.o(.data* .bss*)
2734			*(.overlay_data5 .overlay_rodata5)
2735			. = ALIGN(4);
2736		}
2737		.overlay_data6
2738		{
2739			LONG(0);
2740#if defined(A2DP_SCALABLE_ON)
2741			*:rc_decode.o(.data* .rodata*)
2742			*:audio_int32.o(.data* .rodata*)
2743			*:ssc_ifft.o(.data* .rodata*)
2744			*:vector_quant.o(.data* .rodata*)
2745			*:ssc_quant.o(.data* .rodata*)
2746			*:ssc_pulsealloc.o(.data* .rodata*)
2747			*:audio.o(.data* .rodata*)
2748			*:set_sbm.o(.data* .rodata*)
2749			*:rc_code.o(.data* .rodata*)
2750			*:SBM_pitchBased.o(.data* .rodata*)
2751			*:ssc_imdct.o(.data* .rodata*)
2752			*:audio_decoder.o(.data* .rodata*)
2753			*:SoundBooster_DRC_classic.o(.data* .rodata*)
2754			*:ssc_cwrs.o(.data* .rodata*)
2755			*:ssc_mode.o(.data* .rodata*)
2756			*:ssc_math.o(.data* .rodata*)
2757			*:ssc_lap.o(.data* .rodata*)
2758			*:SeamlessBufferManagement.o(.data* .rodata*)
2759#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2760			*:a2dp_decoder_scalable.o(.rodata*)
2761#endif
2762#endif
2763#if defined(A2DP_LHDC_ON)
2764			*:a2dp_decoder_lhdc.o(.data* .rodata*)
2765			*:testkey.o(.data* .rodata*)
2766			*:lhdcUtil.o(.data* .rodata*)
2767			*:lzh_dec.o(.data* .rodata*)
2768			*:licdecrypt.o(.data* .rodata*)
2769			*:lic_check.o(.data* .rodata*)
2770			*:fast_upsampling_2x.o(.data* .rodata*)
2771			*:encdec.o(.data* .rodata*)
2772			*:dec.o(.data* .rodata*)
2773			*:cirbuf.o(.data* .rodata*)
2774			*:DecodeUps2xLPF.o(.data* .rodata*)
2775			*:Arc.o(.data* .rodata*)
2776#endif
2777#if defined(A2DP_LDAC_ON)
2778			*:a2dp_decoder_ldac.o(.data* .rodata*)
2779			*:bitalloc_ldac.o(.data* .rodata*)
2780			*:bitalloc_sub_ldac.o(.data* .rodata*)
2781			*:encode_ldac.o(.data* .rodata*)
2782			*:ldacBT.o(.data* .rodata*)
2783			*:ldaclib.o(.data* .rodata*)
2784			*:pack_ldac.o(.data* .rodata*)
2785			*:quant_ldac.o(.data* .rodata*)
2786			*:mdct_ldac.o(.data* .rodata*)
2787			*:ldacBT_api.o(.data* .rodata*)
2788			*:decode_ldac.o(.data* .rodata*)
2789			*:dequant_ldac.o(.data* .rodata*)
2790			*:imdct_ldac.o(.data* .rodata*)
2791			*:ldacBT_internal.o(.data* .rodata*)
2792			*:ldaclib_api.o(.data* .rodata*)
2793			*:memory_ldac.o(.data* .rodata*)
2794			*:setpcm_ldac.o(.data* .rodata*)
2795			*:sigana_ldac.o(.data* .rodata*)
2796			*:tables_ldac.o(.data* .rodata*)
2797			*:tables_sigproc_ldac.o(.data* .rodata*)
2798			*:unpack_ldac.o(.data* .rodata*)
2799#endif
2800			*(.overlay_data6 .overlay_rodata6)
2801			. = ALIGN(4);
2802		}
2803		.overlay_data7
2804		{
2805			LONG(0);
2806#if defined(OPUS_IN_OVERLAY)
2807			*:voice_opus.o(.data* .rodata*)
2808			*:opus_encoder.o(.data* .rodata*)
2809			*:analysis.o(.data* .rodata*)
2810			*:celt_encoder.o(.data* .rodata*)
2811			*:repacketizer.o(.data* .rodata*)
2812			*:opus.o(.data* .rodata*)
2813			*:enc_API.o(data* .rodata)
2814			*:entenc.o(.data* .rodata*)
2815			*:control_audio_bandwidth.o(.data* .rodata*)
2816			*:encode_pulses.o(.data* .rodata*)
2817			*:LPC_analysis_filter.o(.data* .rodata*)
2818			*:burg_modified_FIX.o(.data* .rodata*)
2819			*:vector_ops_FIX.o(.data* .rodata*)
2820			*:NLSF_del_dec_quant.o(.data* .rodata*)
2821			*:encode_frame_FIX.o(.data* .rodata*)
2822			*:pitch.o(.data* .rodata*)
2823			*:resampler.o(.data* .rodata*)
2824			*:VAD.o(.data* .rodata*)
2825			*:encode_indices.o(.data* .rodata*)
2826			*:control_codec.o(.data* .rodata*)
2827			*:celt_lpc.o(.data* .rodata*)
2828			*:shell_coder.o(.data* .rodata*)
2829			*:init_encoder.o(.data* .rodata*)
2830			*:log2lin.o(.data* .rodata*)
2831			*:biquad_alt.o(.data* .rodata*)
2832			*:stereo_encode_pred.o(.data* .rodata*)
2833			*:NLSF_unpack.o(.data* .rodata*)
2834			*:code_signs.o(.data* .rodata*)
2835			*:lin2log.o(.data* .rodata*)
2836			*:HP_variable_cutoff.o(.data* .rodata*)
2837			*:sum_sqr_shift.o(.data* .rodata*)
2838			*:inner_prod_aligned.o(.data* .rodata*)
2839			*:stereo_quant_pred.o(.data* .rodata*)
2840			*:entcode.o(.data* .rodata*)
2841			*:celt.o(.data* .rodata*)
2842			*:laplace.o(.data* .rodata*)
2843			*:NSQ.o(.data* .rodata*) /*complexity 1*/
2844			*:NSQ_del_dec.o(.data* .rodata*) /*complexity 2*/
2845#endif
2846			*(.overlay_data7 .overlay_rodata7)
2847			. = ALIGN(4);
2848		}
2849#endif
2850		.overlay_data_last
2851		{
2852#ifndef NO_OVERLAY
2853			LONG(0);
2854#endif
2855			. = ALIGN(4);
2856		}
2857	} > REGION_OVERLAY_DATA
2858
2859	.dummy_overlay_data_end (.) (NOLOAD) : AT (ADDR(.dummy_overlay_data_end))
2860	{
2861		__overlay_data_end__ = .;
2862	} > REGION_OVERLAY_DATA
2863
2864	ASSERT(__overlay_data_end__ - __overlay_data_start__ <= OVERLAY_DATA_SECTION_SIZE, "overlay data sections too large")
2865
2866#if defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0)
2867	.cp_ramx_last_dummy (NOLOAD) : AT (ADDR(.cp_ramx_last_dummy))
2868	{
2869		__cp_ramx_last_dummy_start = .;
2870	} > RAMCPX
2871
2872	.cp_ram_last_dummy (NOLOAD) : AT (ADDR(.cp_ram_last_dummy))
2873	{
2874		. = ALIGN(8);
2875		__cp_ram_last_dummy_start = .;
2876	} > RAMCP
2877
2878	__cp_stack_top = ORIGIN(RAMCP) + LENGTH(RAMCP);
2879	__cp_stack_limit = __cp_stack_top - CP_STACK_SECTION_SIZE;
2880
2881	/* LD v2.24 (GCC 4.9) cannot handle address conversion correctly if involving immediate value.
2882	   E.g., <absolute_addr> + <immediate_val> + <relative_addr> */
2883	__free_ramcpx = ORIGIN(RAMCPX) + LENGTH(RAMCPX) - ABSOLUTE(__cp_ramx_last_dummy_start);
2884	ASSERT(__cp_stack_limit >= __cp_ram_last_dummy_start, "region RAMCP overflowed with stack")
2885	__free_ramcp = __cp_stack_limit - __cp_ram_last_dummy_start;
2886
2887#ifdef MEM_POOL_IN_CP_RAM
2888	__cp_mem_pool_start__ = __cp_ram_last_dummy_start;
2889	__cp_mem_pool_end__ = __cp_ram_last_dummy_start;
2890	__mem_pool_start__ = __cp_ram_last_dummy_start;
2891	__mem_pool_end__ = __cp_stack_limit;
2892#else
2893	__cp_mem_pool_start__ = __cp_ram_last_dummy_start;
2894	__cp_mem_pool_end__ = __cp_stack_limit;
2895#endif
2896#endif
2897
2898	__flash_text_data_start__ = __load_stop_overlay_data_last;
2899
2900	.flashx_text (FLASH_TO_FLASHX(__flash_text_data_start__)) : AT (__flash_text_data_start__)
2901	{
2902		__flashx_text_start__ = .;
2903		*:notify.o(.text*)
2904		*:scan.o(.text*)
2905		*:wifi_conf_nvrecord.o(.text*)
2906		*:blacklist.o(.text*)
2907		*:ap.o(.text*)
2908		*:wpa_sme.o(.text*)
2909		*:wpas_glue.o(.text*)
2910		*:offchannel.o(.text*)
2911		*:wpa_supplicant.o(.text*)
2912		*:eap_register.o(.text*)
2913		*:wpa_interface.o(.text*)
2914		*:p2p_supplicant.o(.text*)
2915		*:config.o(.text*)
2916		*:sme.o(.text*)
2917		*:wps_supplicant.o(.text*)
2918		*:bss.o(.text*)
2919		*:trace.o(.text*)
2920		*:wpa_debug.o(.text*)
2921		*:wpabuf.o(.text*)
2922		*:common.o(.text*)
2923		*:bitfield.o(.text*)
2924		*:eloop.o(.text*)
2925		*:wpa_os.o(.text*)
2926		*:uuid.o(.text*)
2927		*:ieee802_11_common.o(.text*)
2928		*:wpa_common.o(.text*)
2929		*:ieee802_11_auth.o(.text*)
2930		*:wpa_auth_glue.o(.text*)
2931		*:eap_user_db.o(.text*)
2932		*:wnm_ap.o(.text*)
2933		*:sta_info.o(.text*)
2934		*:ieee802_1x.o(.text*)
2935		*:ctrl_iface_ap.o(.text*)
2936		*:wpa_auth_ft.o(.text*)
2937		*:wpa_auth_ie.o(.text*)
2938		*:preauth_auth.o(.text*)
2939		*:ieee802_11_ht.o(.text*)
2940		*:wpa_auth.o(.text*)
2941		*:ap_mlme.o(.text*)
2942		*:wmm.o(.text*)
2943		*:ieee802_11.o(.text*)
2944		*:dfs.o(.text*)
2945		*:hostapd.o(.text*)
2946		*:ieee802_11_vht.o(.text*)
2947		*:wps_hostapd.o(.text*)
2948		*:p2p_hostapd.o(.text*)
2949		*:drv_callbacks.o(.text*)
2950		*:ap_config.o(.text*)
2951		*:ieee802_11_shared.o(.text*)
2952		*:ap_drv_ops.o(.text*)
2953		*:tkip_countermeasures.o(.text*)
2954		*:peerkey_auth.o(.text*)
2955		*:hw_features.o(.text*)
2956		*:beacon.o(.text*)
2957		*:pmksa_cache_auth.o(.text*)
2958		*:utils.o(.text*)
2959		*:p2p_parse.o(.text*)
2960		*:p2p_utils.o(.text*)
2961		*:p2p_invitation.o(.text*)
2962		*:p2p.o(.text*)
2963		*:p2p_build.o(.text*)
2964		*:p2p_group.o(.text*)
2965		*:p2p_pd.o(.text*)
2966		*:p2p_dev_disc.o(.text*)
2967		*:p2p_go_neg.o(.text*)
2968		*:pmksa_cache.o(.text*)
2969		*:wpa_ie.o(.text*)
2970		*:wpa.o(.text*)
2971		*:preauth.o(.text*)
2972		*:driver_nl80211.o(.text*)
2973		*:nl80211.o(.text*)
2974		*:wpa_events.o(.text*)
2975		*:eap_common.o(.text*)
2976		*:eap_wsc_common.o(.text*)
2977		*:eap.o(.text*)
2978		*:eap_wsc.o(.text*)
2979		*:eap_methods.o(.text*)
2980		*:eapol_auth_sm.o(.text*)
2981		*:eapol_auth_dump.o(.text*)
2982		*:eapol_supp_sm.o(.text*)
2983		*:wps_attr_process.o(.text*)
2984		*:ndef.o(.text*)
2985		*:wps_validate.o(.text*)
2986		*:wps_attr_parse.o(.text*)
2987		*:wps_dev_attr.o(.text*)
2988		*:wps.o(.text*)
2989		*:wps_common.o(.text*)
2990		*:wps_registrar.o(.text*)
2991		*:wps_attr_build.o(.text*)
2992		*:wps_enrollee.o(.text*)
2993		*:tlsv1_server.o(.text*)
2994		*:pkcs8.o(.text*)
2995		*:x509v3.o(.text*)
2996		*:tlsv1_cred.o(.text*)
2997		*:tlsv1_client_read.o(.text*)
2998		*:tlsv1_client.o(.text*)
2999		*:rsa.o(.text*)
3000		*:tlsv1_client_write.o(.text*)
3001		*:asn1.o(.text*)
3002		*:tlsv1_server_read.o(.text*)
3003		*:pkcs1.o(.text*)
3004		*:pkcs5.o(.text*)
3005		*:tlsv1_record.o(.text*)
3006		*:bignum.o(.text*)
3007		*:tlsv1_server_write.o(.text*)
3008		*:tlsv1_common.o(.text*)
3009		*:eap_server.o(.text*)
3010		*:eap_server_identity.o(.text*)
3011		*:eap_server_methods.o(.text*)
3012		*:eap_server_wsc.o(.text*)
3013		*:hostapd_interface.o(.text*)
3014		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o *bpabi.o *div*.o *_dvmd_tls.o *best*.o wifi_drv*.o) .text*)
3015		. = ALIGN(4);
3016		__flashx_text_end__ = .;
3017	}
3018	__flash_text_data_start__ += SIZEOF(.flashx_text);
3019
3020#if defined(PSRAM_BASE) && (PSRAM_SIZE > 0)
3021	__psram_text_data_start__ = ORIGIN(PSRAM);
3022	__psram_text_data_start_flash__ = __flash_text_data_start__;
3023	.psram_text (PSRAM_TO_PSRAMX(__psram_text_data_start__)) : AT (__psram_text_data_start_flash__)
3024	{
3025/*
3026		__psramx_text_start__ .;
3027
3028		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o  *bpabi.o *div*.o *_dvmd_tls.o *best*.o) .text*)
3029		*(.psram_text*)
3030		. = ALIGN(4);
3031		__psramx_text_end__ = .;
3032*/
3033	} > PSRAMX
3034
3035	.psram_data (__psram_text_data_start__ + SIZEOF(.psram_text)) :
3036				AT (__psram_text_data_start_flash__ + SIZEOF(.psram_text))
3037	{
3038		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o *bpabi.o *div*.o *_dvmd_tls.o *best*.o ) .data*)
3039		*(.psram_data*)
3040		. = ALIGN(4);
3041	} > PSRAM
3042
3043	__psram_text_data_end_flash__ = __psram_text_data_start_flash__ + SIZEOF(.psram_text)+ SIZEOF(.psram_data);
3044
3045	.psram_bss (.) (NOLOAD) : AT (ADDR(.psram_bss))
3046	{
3047		__psram_bss_start__ = .;
3048		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o *bpabi.o *div*.o *_dvmd_tls.o *best*.o ) .bss*)
3049		*:*ffmpeg*.o(COMMON)
3050		*(.psram_bss*)
3051		*(.bss*)
3052#ifdef __BT_RAMRUN__
3053		. = ALIGN(4);
3054		__mem_pool_start__ = .;
3055		. += 128*1000;
3056		__mem_pool_end__ = .;
3057#endif
3058#ifdef BLE_AUDIO_ENABLED
3059		. = ALIGN(4);
3060		__le_audio_mem_pool_start__ = .;
3061		. += 160*1024;
3062		__le_audio_mem_pool_end__ = .;
3063#endif
3064#ifdef OS_HEAP_LINK_NAME
3065		. = ALIGN(64);
3066		__os_heap_start__ = .;
3067		OS_HEAP_LINK_NAME = .;
3068		. += OS_HEAP_SIZE;
3069		__os_heap_end__ = .;
3070#endif
3071		. = ALIGN(4);
3072		__psram_bss_end__ = .;
3073#if defined(NUTTX_BUILD)
3074		. = ALIGN(8);
3075		_nuttx_heap_start = .;
3076		_nuttx_heap_end = ABSOLUTE(PSRAM_BASE+PSRAM_SIZE);
3077#endif
3078	} > PSRAM
3079	__flash_text_data_start__ = __psram_text_data_end_flash__;
3080#endif
3081
3082#if defined(PSRAMUHS_BASE) && (MCU_PSRAMUHS_SIZE > 0)
3083	__psramuhs_text_data_start__ = ORIGIN(PSRAMUHS);
3084	__psramuhs_text_data_start_flash__ = __flash_text_data_start__;
3085	.psramuhs_text (PSRAMUHS_TO_PSRAMUHSX(__psramuhs_text_data_start__)) : AT (__psramuhs_text_data_start_flash__)
3086	{
3087		__psramux_text_start__ = .;
3088/*
3089		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o *bpabi.o *div*.o *_dvmd_tls.o *best*.o wifi_drv*.o) .text*)
3090*/
3091		*(.psramuhs_text*)
3092		. = ALIGN(4);
3093		__psramux_text_end__ = .;
3094	} > PSRAMUHSX
3095
3096	.psramuhs_data (__psramuhs_text_data_start__ + SIZEOF(.psramuhs_text)) :
3097				AT (__psramuhs_text_data_start_flash__ + SIZEOF(.psramuhs_text))
3098	{
3099/*
3100		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o *bpabi.o *div*.o *_dvmd_tls.o *best*.o wifi_drv*.o) .data*)
3101*/
3102		*(.psramuhs_data*)
3103		. = ALIGN(4);
3104	} > PSRAMUHS
3105
3106	__psramuhs_text_data_end_flash__ = __psramuhs_text_data_start_flash__ + SIZEOF(.psramuhs_text)+ SIZEOF(.psramuhs_data);
3107
3108	.psramuhs_bss (.) (NOLOAD) : AT (ADDR(.psramuhs_bss))
3109	{
3110		__psramuhs_bss_start__ = .;
3111/*
3112		*(EXCLUDE_FILE(*hal_*.o *cmsis_nvic.o *system_ARMCM4.o *system_utils.o *system_cp.o *cp_accel.o *bpabi.o *div*.o *_dvmd_tls.o *best*.o wifi_drv*.o) .bss*)
3113*/
3114		*(.psramuhs_bss*)
3115		. = ALIGN(4);
3116		__psramuhs_bss_end__ = .;
3117	} > PSRAMUHS
3118	__flash_text_data_start__ = __psramuhs_text_data_end_flash__;
3119#endif
3120
3121	.text (FLASH_TO_FLASHX(__flash_text_data_start__)) : AT (FLASHX_TO_FLASH(ADDR(.text)))
3122	{
3123		__text_start__ = .;
3124		*(.text*)
3125		*(.flash_text*)
3126
3127		KEEP(*(.init))
3128		KEEP(*(.fini))
3129		_sinit = ABSOLUTE(.);
3130
3131		/* .ctors */
3132		*crtbegin.o(.ctors)
3133		*crtbegin?.o(.ctors)
3134		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
3135		*(SORT(.ctors.*))
3136		*(.ctors)
3137		_einit = ABSOLUTE(.);
3138
3139		/* .dtors */
3140		*crtbegin.o(.dtors)
3141		*crtbegin?.o(.dtors)
3142		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
3143		*(SORT(.dtors.*))
3144		*(.dtors)
3145		__text_end__ = .;
3146	} > FLASHX
3147#if defined(ARM_CMNS) || defined(ARM_CMSE)
3148	. = ALIGN(32);
3149	__nsc_text_start__ = .;
3150	.gnu.sgstubs (.) : AT (FLASHX_TO_FLASH(ADDR(.gnu.sgstubs)))
3151	{
3152		. = ALIGN(4);
3153		*(.gnu.sgstubs.*)
3154	} > FLASHX
3155	. = ALIGN(32);
3156	__nsc_text_end__ = .;
3157#endif
3158	.ARM.extab (.) : AT (FLASHX_TO_FLASH(ADDR(.ARM.extab)))
3159	{
3160		*(.ARM.extab* .gnu.linkonce.armextab.*)
3161	} > FLASHX
3162
3163	__exidx_start = .;
3164	/* .ARM.exidx contains R_ARM_PREL31 (+-0x40000000) offset to functions, which means
3165	 * the session location cannot be too far away from the function addresses */
3166	.ARM.exidx (.) : AT (FLASHX_TO_FLASH(ADDR(.ARM.exidx)))
3167	{
3168		*(.ARM.exidx* .gnu.linkonce.armexidx.*)
3169		__flashx_text_end__ = .;
3170	} > FLASHX
3171	__exidx_end = .;
3172
3173#ifdef ARM_CMSE
3174	/* BEST2003 SAU set FLASH_BASE region as nonsecure region becase of the SAU region number limitation,
3175	CPU can't access FLASH_BASE region in secure state, so the rodata should be located in SRAM or FLASHX*/
3176	.sec_rodata (.) : AT (FLASHX_TO_FLASH(ADDR(.sec_rodata)))
3177	{
3178		*(.rodata*)
3179	} > FLASHX
3180#endif
3181	__flash_text_end__ = .;
3182
3183	. = FLASHX_TO_FLASH(.);
3184#ifdef TRACE_STR_SECTION
3185	.rodata_str (.):
3186	{
3187	    __rodata_str_start__ = .;
3188		*(.rodata.__func__.*)
3189		*(.rodata.*__func__)
3190		*(.rodata.str1*)
3191		*(.rodata.*.str1*)
3192		*(.rodata.__FUNCTION__.*)
3193		*(.rodata.*__FUNCTION__)
3194		__rodata_str_end__ = .;
3195	} > FLASH
3196
3197	RODATA_ADDRESS = .;
3198	. = 0xFFFC0000;
3199	.trc_str (.):
3200	{
3201		*(.rodata.__func__.*)
3202		*(.rodata.*__func__)
3203		*(.rodata.__FUNCTION__.*)
3204		*(.rodata.*__FUNCTION__)
3205		*(.trc_str*)
3206	}
3207	. = RODATA_ADDRESS;
3208#endif
3209	.rodata (.) :
3210	{
3211		*(.rodata*)
3212		*(.flash_rodata*)
3213		*(.constdata)
3214#ifdef CONFIG_HAVE_CXX
3215		. = ALIGN(4);
3216		/* preinit data */
3217		PROVIDE_HIDDEN (__preinit_array_start = .);
3218		KEEP(*(.preinit_array))
3219		PROVIDE_HIDDEN (__preinit_array_end = .);
3220
3221		. = ALIGN(4);
3222		/* init data */
3223		PROVIDE(__ctors_start__ = .);
3224		PROVIDE_HIDDEN (__init_array_start = .);
3225		KEEP(*(SORT(.init_array.*)))
3226		KEEP(*(.init_array))
3227		PROVIDE_HIDDEN (__init_array_end = .);
3228		PROVIDE(__ctors_end__ = .);
3229#endif
3230		. = ALIGN(4);
3231		/* finit data */
3232		PROVIDE_HIDDEN (__fini_array_start = .);
3233		KEEP(*(SORT(.fini_array.*)))
3234		KEEP(*(.fini_array))
3235		PROVIDE_HIDDEN (__fini_array_end = .);
3236
3237		. = ALIGN(4);
3238		__cust_cmd_hldr_tbl_start = .;
3239		KEEP(*(.cust_cmd_hldr_tbl))
3240		__cust_cmd_hldr_tbl_end = .;
3241		. = ALIGN(4);
3242		__ai_gatt_server_table_start = .;
3243		KEEP(*(.ai_gatt_server_table))
3244		__ai_gatt_server_table_end = .;
3245		. = ALIGN(4);
3246		__ai_ble_handler_table_start = .;
3247		KEEP(*(.ai_ble_handler_table))
3248		__ai_ble_handler_table_end = .;
3249		. = ALIGN(4);
3250		__ai_spp_register_table_start = .;
3251		KEEP(*(.ai_spp_register_table))
3252		__ai_spp_register_table_end = .;
3253		. = ALIGN(4);
3254		__tota_handler_table_start = .;
3255		KEEP(*(.tota_handler_table))
3256		__tota_handler_table_end = .;
3257		. = ALIGN(4);
3258		__ai_handler_function_table_start = .;
3259		KEEP(*(.ai_handler_function_table))
3260		__ai_handler_function_table_end = .;
3261		. = ALIGN(4);
3262		__custom_handler_table_start = .;
3263		KEEP(*(.custom_handler_table))
3264		__custom_handler_table_end = .;
3265		. = ALIGN(4);
3266		__mixprompt_property_table_start = .;
3267		KEEP(*(.mixprompt_property_table))
3268		__mixprompt_property_table_end = .;
3269		. = ALIGN(4);
3270		__core_bridge_task_cmd_table_start = .;
3271		KEEP(*(.core_bridge_task_cmd_table))
3272		__core_bridge_task_cmd_table_end = .;
3273		. = ALIGN(4);
3274		__core_bridge_instant_cmd_table_start = .;
3275		KEEP(*(.core_bridge_instant_cmd_table))
3276		__core_bridge_instant_cmd_table_end = .;
3277		__eshell_command_table_start = .;
3278		KEEP(*(.eshell_command_table))
3279		__eshell_command_table_end = .;
3280		. = ALIGN(4);
3281		__app_bt_sync_command_handler_table_start = .;
3282		KEEP(*(.app_bt_sync_command_handler_table))
3283		__app_bt_sync_command_handler_table_end = .;
3284		. = ALIGN(4);
3285		. = ALIGN(4);
3286	 	KEEP(*(.eh_frame*))
3287		*(.note.gnu.build-id)
3288
3289		. = ALIGN(4);
3290                __test_cases_table_start = .;
3291                KEEP(*(.test_cases_table))
3292                __test_cases_table_end = .;
3293                . = ALIGN(4);
3294		_etext = .;
3295	} > FLASH
3296
3297#if ALIOS_APP_SUPPORT > 0
3298	.FSymTab (.) :
3299	{
3300		_syscall_table_begin = .;
3301		KEEP(*(FSymTab))
3302		. = ALIGN(4);
3303		_syscall_table_end = .;
3304	} > FLASH
3305#endif
3306
3307#ifdef TRACE_STR_SECTION
3308	.trc_str (.) :
3309	{
3310		*(.trc_str*)
3311	} > FLASH
3312#endif
3313
3314#if defined(FIRMWARE_REV)
3315	.firmware_rev (.) :
3316	{
3317		. = ALIGN(64);
3318		*(.fw_rev)
3319	} > FLASH
3320#endif
3321/* zInit code and data - will be freed after init */
3322	.zInit (.) :
3323	{
3324		__zinitcall_bsp_start = .;
3325		KEEP (*(.zinitcall.bsp0.init))
3326		KEEP (*(.zinitcall.bsp1.init))
3327		KEEP (*(.zinitcall.bsp2.init))
3328		KEEP (*(.zinitcall.bsp3.init))
3329		KEEP (*(.zinitcall.bsp4.init))
3330		__zinitcall_bsp_end = .;
3331		. = ALIGN(4);
3332		__zinitcall_device_start = .;
3333		KEEP (*(.zinitcall.device0.init))
3334		KEEP (*(.zinitcall.device1.init))
3335		KEEP (*(.zinitcall.device2.init))
3336		KEEP (*(.zinitcall.device3.init))
3337		KEEP (*(.zinitcall.device4.init))
3338		__zinitcall_device_end = .;
3339		. = ALIGN(4);
3340		__zinitcall_core_start = .;
3341		KEEP (*(.zinitcall.core0.init))
3342		KEEP (*(.zinitcall.core1.init))
3343		KEEP (*(.zinitcall.core2.init))
3344		KEEP (*(.zinitcall.core3.init))
3345		KEEP (*(.zinitcall.core4.init))
3346		__zinitcall_core_end = .;
3347		. = ALIGN(4);
3348		__zinitcall_sys_service_start = .;
3349		KEEP (*(.zinitcall.sys.service0.init))
3350		KEEP (*(.zinitcall.sys.service1.init))
3351		KEEP (*(.zinitcall.sys.service2.init))
3352		KEEP (*(.zinitcall.sys.service3.init))
3353		KEEP (*(.zinitcall.sys.service4.init))
3354		__zinitcall_sys_service_end = .;
3355		. = ALIGN(4);
3356		__zinitcall_sys_feature_start = .;
3357		KEEP (*(.zinitcall.sys.feature0.init))
3358		KEEP (*(.zinitcall.sys.feature1.init))
3359		KEEP (*(.zinitcall.sys.feature2.init))
3360		KEEP (*(.zinitcall.sys.feature3.init))
3361		KEEP (*(.zinitcall.sys.feature4.init))
3362		__zinitcall_sys_feature_end = .;
3363		. = ALIGN(4);
3364		__zinitcall_run_start = .;
3365		KEEP (*(.zinitcall.run0.init))
3366		KEEP (*(.zinitcall.run1.init))
3367		KEEP (*(.zinitcall.run2.init))
3368		KEEP (*(.zinitcall.run3.init))
3369		KEEP (*(.zinitcall.run4.init))
3370		__zinitcall_run_end = .;
3371		. = ALIGN(4);
3372		__zinitcall_app_service_start = .;
3373		KEEP (*(.zinitcall.app.service0.init))
3374		KEEP (*(.zinitcall.app.service1.init))
3375		KEEP (*(.zinitcall.app.service2.init))
3376		KEEP (*(.zinitcall.app.service3.init))
3377		KEEP (*(.zinitcall.app.service4.init))
3378		__zinitcall_app_service_end = .;
3379		. = ALIGN(4);
3380		__zinitcall_app_feature_start = .;
3381		KEEP (*(.zinitcall.app.feature0.init))
3382		KEEP (*(.zinitcall.app.feature1.init))
3383		KEEP (*(.zinitcall.app.feature2.init))
3384		KEEP (*(.zinitcall.app.feature3.init))
3385     		  KEEP (*(.zinitcall.app.feature4.init))
3386		__zinitcall_app_feature_end = .;
3387		. = ALIGN(4);
3388		__zinitcall_test_start = .;
3389		KEEP (*(.zinitcall.test0.init))
3390		KEEP (*(.zinitcall.test1.init))
3391		KEEP (*(.zinitcall.test2.init))
3392		KEEP (*(.zinitcall.test3.init))
3393		KEEP (*(.zinitcall.test4.init))
3394		__zinitcall_test_end = .;
3395		. = ALIGN(4);
3396		__zinitcall_exit_start = .;
3397		KEEP (*(.zinitcall.exit0.init))
3398		KEEP (*(.zinitcall.exit1.init))
3399		KEEP (*(.zinitcall.exit2.init))
3400		KEEP (*(.zinitcall.exit3.init))
3401		KEEP (*(.zinitcall.exit4.init))
3402		__zinitcall_exit_end = .;
3403		. = ALIGN(4);
3404	} > FLASH
3405
3406
3407
3408	.interp (.) :
3409	{
3410		KEEP(*(interp))
3411		. = ALIGN(4);
3412	} > FLASH
3413
3414	.dynstr (.) :
3415	{
3416		KEEP(*(dynstr))
3417		. = ALIGN(4);
3418	} > FLASH
3419
3420	/* To copy multiple FLASH to RAM sections,
3421	 * uncomment .copy.table section and,
3422	 * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */
3423	/*
3424	.copy.table (.) :
3425	{
3426		. = ALIGN(4);
3427		__copy_table_start__ = .;
3428		LONG (__etext)
3429		LONG (__data_start__)
3430		LONG (__data_end__ - __data_start__)
3431		LONG (__etext2)
3432		LONG (__data2_start__)
3433		LONG (__data2_end__ - __data2_start__)
3434		__copy_table_end__ = .;
3435	} > FLASH
3436	*/
3437
3438	/* To clear multiple BSS sections,
3439	 * uncomment .zero.table section and,
3440	 * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */
3441	/*
3442	.zero.table (.) :
3443	{
3444		. = ALIGN(4);
3445		__zero_table_start__ = .;
3446		LONG (__bss_start__)
3447		LONG (__bss_end__ - __bss_start__)
3448		LONG (__bss2_start__)
3449		LONG (__bss2_end__ - __bss2_start__)
3450		__zero_table_end__ = .;
3451	} > FLASH
3452	*/
3453
3454	/* Location counter can end up 2byte aligned with narrow Thumb code but
3455	   __etext is assumed by startup code to be the LMA of a section in RAM
3456	   which must be 4byte aligned */
3457	__etext = ALIGN(4);
3458
3459	/* The VMA is either the end of overlay_data or the end of sram bss */
3460
3461	.data : AT (__etext)
3462	{
3463		__data_start__ = .;
3464		_sdata = .;
3465		*(vtable)
3466		. = ALIGN(4);
3467		*(.data*)
3468
3469		. = ALIGN(4);
3470		/* preinit data */
3471		PROVIDE_HIDDEN (__preinit_array_start = .);
3472		KEEP(*(.preinit_array))
3473		PROVIDE_HIDDEN (__preinit_array_end = .);
3474
3475		. = ALIGN(4);
3476		/* finit data */
3477		PROVIDE_HIDDEN (__fini_array_start = .);
3478		KEEP(*(SORT(.fini_array.*)))
3479		KEEP(*(.fini_array))
3480		PROVIDE_HIDDEN (__fini_array_end = .);
3481
3482		KEEP(*(.jcr*))
3483
3484		/* All data end */
3485		. = ALIGN(4);
3486		*(*.got*)
3487
3488		/* section information for finsh shell */
3489		. = ALIGN(4);
3490		__fsymtab_start = .;
3491		KEEP(*(FSymTab))
3492		__fsymtab_end = .;
3493
3494		. = ALIGN(4);
3495		__vsymtab_start = .;
3496		KEEP(*(VSymTab))
3497		__vsymtab_end = .;
3498
3499		/* section information for initial. */
3500		. = ALIGN(4);
3501		__rt_init_start = .;
3502		KEEP(*(SORT(.rti_fn*)))
3503		__rt_init_end = .;
3504
3505		_hdf_drivers_start = .;
3506		KEEP(*(.hdf.driver))
3507		_hdf_drivers_end = .;
3508
3509		__data_end__ = .;
3510		_edata = .;
3511        __shell_root_cmds_start = .;
3512        KEEP(*(SORT(.shell_root_cmd_*)));
3513        __shell_root_cmds_end = .;
3514	} > RAM
3515
3516	.bss (.) (NOLOAD) : AT (ADDR(.bss))
3517	{
3518		. = ALIGN(4);
3519		__bss_start__ = .;
3520		_sbss = .;
3521		*(COMMON)
3522		. = ALIGN(4);
3523		__bss_end__ = .;
3524#if defined(OS_HEAP_SIZE) && (!defined(PSRAM_BASE) || (PSRAM_SIZE == 0))
3525		__os_heap_start__ = .;
3526		OS_HEAP_LINK_NAME = .;
3527		. += OS_HEAP_SIZE;
3528		__os_heap_end__ = .;
3529#endif
3530		_ebss = .;
3531	} > RAM
3532#if defined(NUTTX_BUILD) && (!defined(PSRAM_BASE) || (PSRAM_SIZE == 0)) && defined(CONFIG_USE_BES_BT_STACK)
3533	.nuttx_heap (.) (NOLOAD) :
3534	{
3535		_nuttx_heap_start = .;
3536		. = ALIGN(8);
3537		. += NUTTX_HEAP_SECTION_SIZE;
3538		. = ALIGN(8);
3539		_nuttx_heap_end = .;
3540	} > RAM
3541#endif
3542	.reboot_custom_param (.) (NOLOAD) :
3543	{
3544		KEEP(*(.reboot_custom_param*))
3545		. = ALIGN(4);
3546#if defined(CUSTOM_REBOOT_DUMP_SIZE)
3547		__custom_reboot_dump_start__ = .;
3548		. += CUSTOM_REBOOT_DUMP_SIZE;
3549		__custom_reboot_dump_end__ = .;
3550#endif
3551		__reboot_custom_param_end__ = .;
3552	} > RAM
3553
3554	.heap (.) (NOLOAD) :
3555	{
3556		. = ALIGN(8);
3557		__HeapBase = .;
3558		__end__ = .;
3559		end = __end__;
3560		. += HEAP_SECTION_SIZE;
3561		. = ALIGN(8);
3562		__HeapLimit = .;
3563	} > RAM
3564
3565#ifdef ROM_IN_FLASH
3566	.scratch_buf (.) (NOLOAD) :
3567	{
3568		. = ALIGN(4);
3569		*(.scratch_buf)
3570		. = ALIGN(4);
3571	} > RAM
3572#endif
3573
3574    /* ramv will be occupied by nts heap of cp if WIFI_ON_CP defined */
3575#if defined(RAMV_BASE) && (RAMV_SIZE > 0) && !defined(WIFI_ON_CP)
3576	.cp_vram_bss (ORIGIN(RAMV)) (NOLOAD) : AT (ADDR(.cp_vram_bss))
3577	{
3578		. = ALIGN(4);
3579		*(.vram_bss*)
3580	} > RAMV
3581#endif
3582
3583	/* .stack_dummy section doesn't contains any symbols. It is only
3584	 * used for linker to calculate size of stack sections, and assign
3585	 * values to stack symbols later */
3586	.stack_dummy (.) (COPY) :
3587	{
3588		. = STACK_SECTION_SIZE;
3589		. = ALIGN(8);
3590	} > RAM
3591
3592	/* Set stack top to end of RAM, and stack limit move down by
3593	 * size of stack_dummy section */
3594#if defined(ROM_UTILS_ON)
3595	__StackTop = ORIGIN(RAM) + LENGTH(RAM) - ROM_UTILS_RESV_RAM_SIZE;
3596#else
3597	__StackTop = ORIGIN(RAM) + LENGTH(RAM);
3598#endif
3599	__StackLimit = __StackTop - SIZEOF(.stack_dummy);
3600	PROVIDE(__stack = __StackTop);
3601	_sstack = __StackLimit;
3602	_estack = __stack;
3603#if defined(NUTTX_BUILD) && (!defined(PSRAM_BASE) || (PSRAM_SIZE == 0)) && !defined(CONFIG_USE_BES_BT_STACK)
3604	_nuttx_heap_start = __HeapLimit;
3605	_nuttx_heap_end = __StackLimit - 4;
3606#endif
3607	/* Check if data + heap + stack exceeds RAM limit */
3608	ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
3609	__free_ram = __StackLimit - __HeapLimit;
3610
3611#ifndef __BT_RAMRUN__
3612#ifdef MEM_POOL_BASE
3613	.mem_pool (ORIGIN(MEM_POOL)) (NOLOAD) :
3614	{
3615		__mem_pool_start__ = .;
3616		. = LENGTH(MEM_POOL);
3617		__mem_pool_end__ = .;
3618	} > MEM_POOL
3619#elif !(defined(CHIP_HAS_CP) && (RAMCP_SIZE > 0) && defined(MEM_POOL_IN_CP_RAM))
3620	__mem_pool_start__ = __HeapLimit;
3621	__mem_pool_end__ = __StackLimit;
3622#endif
3623#endif
3624
3625	. = __etext + SIZEOF(.data);
3626
3627	.system_info (.) :
3628	{
3629		KEEP(*(.system_info_list_size))
3630		KEEP(*(.system_info_list))
3631		. = ALIGN(4);
3632	}  > FLASH
3633
3634	.build_info (.) :
3635	{
3636		KEEP(*(.build_info))
3637		. = ALIGN(4);
3638	} > FLASH = 0x00000000
3639
3640#ifdef SLAVE_BIN_FLASH_OFFSET
3641	.slave_code (ORIGIN(FLASH) + SLAVE_BIN_FLASH_OFFSET):
3642	{
3643		KEEP(*(.slave_code_flash_rodata))
3644	} > FLASH
3645#endif
3646
3647	/* The following section MUST be the last loaded section */
3648	.code_start_addr (.) :
3649	{
3650#ifdef TRACE_STR_SECTION
3651		LONG(ABSOLUTE(__rodata_str_start__));
3652#else
3653		LONG(0);
3654#endif
3655		LONG(BUILD_INFO_MAGIC);
3656		LONG(ABSOLUTE(__flash_start));
3657	} > FLASH
3658
3659	__flash_end = .;
3660
3661#if 0
3662	/* file system fixed to 0x4B8000 space, start addr:0xB38000 */
3663	.filesystem (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC)- 0x4C8000) :
3664	{
3665		__file_system_flash_start = .;
3666		. = FILE_SYSTEM_SECTION_SIZE;
3667		__file_system_flash_stop = .;
3668	} > FLASH_NC
3669#endif
3670	.combo (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3671		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3672		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE - LOG_DUMP_SECTION_SIZE -
3673		OTA_UPGRADE_LOG_SIZE - CORE_DUMP_SECTION_SIZE - HOTWORD_SECTION_SIZE - PROMPT_SECTION_SIZE -
3674		COMBO_SECTION_SIZE) (NOLOAD):
3675	{
3676		__combo_start = .;
3677		. = COMBO_SECTION_SIZE;
3678		__combo_end = .;
3679	} > FLASH_NC
3680
3681	.prompt (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3682		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3683		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE - LOG_DUMP_SECTION_SIZE -
3684		OTA_UPGRADE_LOG_SIZE - CORE_DUMP_SECTION_SIZE -	HOTWORD_SECTION_SIZE - PROMPT_SECTION_SIZE) (NOLOAD):
3685	{
3686		__prompt_start = .;
3687		. = PROMPT_SECTION_SIZE;
3688		__prompt_end = .;
3689	} > FLASH_NC
3690
3691	.hotword_model (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3692		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3693		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE - LOG_DUMP_SECTION_SIZE -
3694		OTA_UPGRADE_LOG_SIZE - CORE_DUMP_SECTION_SIZE -	HOTWORD_SECTION_SIZE) (NOLOAD):
3695	{
3696		__hotword_model_start = .;
3697		. = HOTWORD_SECTION_SIZE;
3698		__hotword_model_end = .;
3699	} > FLASH_NC
3700
3701	.coredump_section (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3702		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3703		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE - LOG_DUMP_SECTION_SIZE -
3704		OTA_UPGRADE_LOG_SIZE - CORE_DUMP_SECTION_SIZE) (NOLOAD) :
3705	{
3706		__coredump_section_start = .;
3707		. = CORE_DUMP_SECTION_SIZE;
3708		__coredump_section_end = .;
3709	} > FLASH_NC
3710
3711	.ota_upgrade_log (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3712		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3713		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE - LOG_DUMP_SECTION_SIZE -
3714		OTA_UPGRADE_LOG_SIZE) (NOLOAD) :
3715	{
3716		__ota_upgrade_log_start = .;
3717		. = OTA_UPGRADE_LOG_SIZE;
3718		__ota_upgrade_log_end = .;
3719	} > FLASH_NC
3720
3721	.log_dump (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3722		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3723		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE - LOG_DUMP_SECTION_SIZE) (NOLOAD) :
3724	{
3725		__log_dump_start = .;
3726		. = LOG_DUMP_SECTION_SIZE;
3727		__log_dump_end = .;
3728	} > FLASH_NC
3729
3730	.crash_dump (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3731		AUD_SECTION_SIZE -  USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3732		LHDC_LICENSE_SECTION_SIZE - CRASH_DUMP_SECTION_SIZE) (NOLOAD) :
3733	{
3734		__crash_dump_start = .;
3735		. = CRASH_DUMP_SECTION_SIZE;
3736		__crash_dump_end = .;
3737	} > FLASH_NC
3738
3739	.custom_parameter (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3740		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE -
3741		LHDC_LICENSE_SECTION_SIZE) (NOLOAD) :
3742	{
3743		__custom_parameter_start = .;
3744		. = CUSTOM_PARAMETER_SECTION_SIZE;
3745		__custom_parameter_end = .;
3746	} > FLASH_NC
3747
3748	.lhdc_license (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3749		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2 - CUSTOM_PARAMETER_SECTION_SIZE) (NOLOAD) :
3750	{
3751		__lhdc_license_start = .;
3752		. = LHDC_LICENSE_SECTION_SIZE;
3753		__lhdc_license_end = .;
3754	} > FLASH_NC
3755
3756	.userdata (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE  - RESERVED_SECTION_SIZE -
3757		AUD_SECTION_SIZE - USERDATA_SECTION_SIZE*2) (NOLOAD) :
3758	{
3759		__userdata_start = .;
3760		. = USERDATA_SECTION_SIZE*2;
3761		__userdata_end = .;
3762	} > FLASH_NC
3763
3764	.audio (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE - RESERVED_SECTION_SIZE -
3765		AUD_SECTION_SIZE) (NOLOAD) :
3766	{
3767		__aud_start = .;
3768		. = AUD_SECTION_SIZE;
3769		__aud_end = .;
3770	} > FLASH_NC
3771
3772	.reserved (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE - RESERVED_SECTION_SIZE) (NOLOAD) :
3773	{
3774		__reserved_start = .;
3775		. = RESERVED_SECTION_SIZE;
3776		__reserved_end = .;
3777	} > FLASH_NC
3778
3779	.factory (ORIGIN(FLASH_NC) + LENGTH(FLASH_NC) - FACTORY_SECTION_SIZE) (NOLOAD) :
3780	{
3781		__factory_start = .;
3782		. = FACTORY_SECTION_SIZE;
3783		__factory_end = .;
3784	} > FLASH_NC
3785
3786#ifdef OTA_BOOT_SIZE
3787#ifndef OTA_BOOT_OFFSET
3788#error "OTA_BOOT_OFFSET should be set along with OTA_BOOT_SIZE"
3789#endif
3790#if (OTA_BOOT_SIZE > FLASH_REGION_SIZE)
3791#error "OTA_BOOT_SIZE should <= FLASH_REGION_SIZE"
3792#endif
3793#if defined(OTA_CODE_OFFSET) && ((OTA_BOOT_OFFSET + OTA_BOOT_SIZE) > OTA_CODE_OFFSET)
3794#error "(OTA_BOOT_OFFSET + OTA_BOOT_SIZE) should <= OTA_CODE_OFFSET"
3795#endif
3796	__tail_section_start = FLASH_NC_BASE + OTA_BOOT_OFFSET + OTA_BOOT_SIZE;
3797#else
3798	__tail_section_start = __prompt_start;
3799#endif
3800
3801	ASSERT(FLASH_NC_TO_C(__tail_section_start) >= __flash_end, "region FLASH overflowed")
3802	__free_flash = FLASH_NC_TO_C(__tail_section_start) - __flash_end;
3803
3804#ifdef OTA_REMAP_OFFSET
3805#ifndef OTA_CODE_OFFSET
3806#error "OTA_CODE_OFFSET should be set along with OTA_REMAP_OFFSET"
3807#endif
3808#ifndef OTA_BOOT_SIZE
3809	/* This is not an OTA booting code, but a normal working code */
3810	ASSERT((FLASH_BASE & 0x03FFFFFF) == 0, "bad FLASH_BASE")
3811#ifdef CHIP_BEST2300P
3812	ASSERT((FLASH_SIZE & (FLASH_SIZE - 1)) == 0, "bad FLASH_SIZE")
3813	ASSERT(__flash_end <= FLASH_BASE + OTA_REMAP_OFFSET, "flash code size too large to remap")
3814	ASSERT(__flash_start - FLASH_BASE >= FLASH_NC_BASE + FLASH_SIZE - __tail_section_start, "flash code conflicted with tail sections in remap")
3815	ASSERT(__flash_start - FLASH_BASE >= FLASH_SIZE / (1 << (4 + 1)), "flash code cannot remap within 4 regions (max code size is half of flash size)")
3816	ASSERT((__flash_start - FLASH_BASE) % (FLASH_SIZE / (1 << (4 + 1))) == 0, "flash code start address not aligned with remap region boundary")
3817#else
3818	ASSERT(((OTA_REMAP_OFFSET) & (0x8000 - 1)) == 0, "OTA_REMAP_OFFSET not aligned with 32K sector boundary")
3819	ASSERT(__flash_end <= FLASH_BASE + (OTA_CODE_OFFSET + OTA_REMAP_OFFSET), "flash code size too large to remap")
3820	ASSERT((__tail_section_start & (0x1000 - 1)) == 0, "__tail_section_start not aligned with 4K sector boundary")
3821	ASSERT(__flash_end + (OTA_REMAP_OFFSET) <= FLASH_NC_TO_C(__tail_section_start), "flash code conflicted with tail sections in remap")
3822#endif
3823#endif
3824#endif
3825}
3826
3827