1/*
2 * Linker Script for Baytrail.
3 *
4 * This script is run through the GNU C preprocessor to align the memory
5 * offsets with headers.
6 *
7 * Use spaces for formatting as cpp ignore tab sizes.
8 */
9
10
11#include <sof/lib/memory.h>
12#include <xtensa/config/core-isa.h>
13
14OUTPUT_ARCH(xtensa)
15
16MEMORY
17{
18  vector_reset_text :
19        org = XCHAL_RESET_VECTOR_PADDR,
20        len = SOF_MEM_RESET_TEXT_SIZE
21  vector_reset_lit :
22        org = XCHAL_RESET_VECTOR_PADDR + SOF_MEM_RESET_TEXT_SIZE,
23        len = SOF_MEM_RESET_LIT_SIZE
24  vector_base_text :
25        org = SOF_MEM_VECBASE_TEXT_BASE,
26        len = SOF_MEM_VECBASE_LIT_SIZE
27  vector_int2_lit :
28        org = XCHAL_INTLEVEL2_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
29        len = SOF_MEM_VECT_LIT_SIZE
30  vector_int2_text :
31        org = XCHAL_INTLEVEL2_VECTOR_PADDR,
32        len = SOF_MEM_VECT_TEXT_SIZE
33  vector_int3_lit :
34        org = XCHAL_INTLEVEL3_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
35        len = SOF_MEM_VECT_LIT_SIZE
36  vector_int3_text :
37        org = XCHAL_INTLEVEL3_VECTOR_PADDR,
38        len = SOF_MEM_VECT_TEXT_SIZE
39  vector_int4_lit :
40        org = XCHAL_INTLEVEL4_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
41        len = SOF_MEM_VECT_LIT_SIZE
42  vector_int4_text :
43        org = XCHAL_INTLEVEL4_VECTOR_PADDR,
44        len = SOF_MEM_VECT_TEXT_SIZE
45  vector_int5_lit :
46        org = XCHAL_INTLEVEL5_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
47        len = SOF_MEM_VECT_LIT_SIZE
48  vector_int5_text :
49        org = XCHAL_INTLEVEL5_VECTOR_PADDR,
50        len = SOF_MEM_VECT_TEXT_SIZE
51  vector_int6_lit :
52        org = XCHAL_INTLEVEL6_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
53        len = SOF_MEM_VECT_LIT_SIZE
54  vector_int6_text :
55        org = XCHAL_INTLEVEL6_VECTOR_PADDR,
56        len = SOF_MEM_VECT_TEXT_SIZE
57  vector_int7_lit :
58        org = XCHAL_INTLEVEL7_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
59        len = SOF_MEM_VECT_LIT_SIZE
60  vector_int7_text :
61        org = XCHAL_INTLEVEL7_VECTOR_PADDR,
62        len = SOF_MEM_VECT_TEXT_SIZE
63  vector_kernel_lit :
64        org = XCHAL_KERNEL_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
65        len = SOF_MEM_VECT_LIT_SIZE
66  vector_kernel_text :
67        org = XCHAL_KERNEL_VECTOR_PADDR,
68        len = SOF_MEM_VECT_TEXT_SIZE
69  vector_user_lit :
70        org = XCHAL_USER_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
71        len = SOF_MEM_VECT_LIT_SIZE
72  vector_user_text :
73        org = XCHAL_USER_VECTOR_PADDR,
74        len = SOF_MEM_VECT_TEXT_SIZE
75  vector_double_lit :
76        org = XCHAL_DOUBLEEXC_VECTOR_PADDR - SOF_MEM_VECT_LIT_SIZE,
77        len = SOF_MEM_VECT_LIT_SIZE
78  vector_double_text :
79        org = XCHAL_DOUBLEEXC_VECTOR_PADDR,
80        len = SOF_MEM_VECT_TEXT_SIZE
81  sof_text_start :
82        org = XCHAL_NMI_VECTOR_VADDR + SOF_MEM_VECT_SIZE,
83        len = (IRAM_BASE + IRAM_SIZE) - (XCHAL_NMI_VECTOR_VADDR + SOF_MEM_VECT_SIZE)
84  sof_data_ro :
85        org = DRAM0_BASE,
86        len = SOF_MEM_RO_SIZE
87  sof_data :
88        org = DRAM0_BASE + SOF_MEM_RO_SIZE,
89        len = HEAP_SYSTEM_BASE - (DRAM0_BASE + SOF_MEM_RO_SIZE)
90  system_heap :
91        org = HEAP_SYSTEM_BASE,
92        len = HEAP_SYSTEM_SIZE
93  system_runtime_heap :
94        org = HEAP_SYS_RUNTIME_BASE,
95        len = HEAP_SYS_RUNTIME_SIZE
96  runtime_heap :
97        org = HEAP_RUNTIME_BASE,
98        len = HEAP_RUNTIME_SIZE
99  buffer_heap :
100        org = HEAP_BUFFER_BASE,
101        len = HEAP_BUFFER_SIZE
102  sof_stack :
103        org = SOF_STACK_END,
104        len = SOF_STACK_BASE - SOF_STACK_END
105  mailbox :
106        org = MAILBOX_BASE,
107        len = MAILBOX_SIZE
108  virtual_thread :
109        org = SOF_VIRTUAL_THREAD_BASE,
110        len = SOF_VIRTUAL_THREAD_SIZE
111  static_uuid_entries_seg (!ari) :
112        org = UUID_ENTRY_ELF_BASE,
113        len = UUID_ENTRY_ELF_SIZE
114  static_log_entries_seg (!ari) :
115        org = LOG_ENTRY_ELF_BASE,
116        len = LOG_ENTRY_ELF_SIZE
117  fw_metadata_seg (!ari) :
118        org = EXT_MANIFEST_ELF_BASE,
119        len = EXT_MANIFEST_ELF_SIZE
120}
121
122PHDRS
123{
124  vector_reset_text_phdr PT_LOAD;
125  vector_reset_lit_phdr PT_LOAD;
126  vector_base_text_phdr PT_LOAD;
127  vector_base_lit_phdr PT_LOAD;
128  vector_int2_text_phdr PT_LOAD;
129  vector_int2_lit_phdr PT_LOAD;
130  vector_int3_text_phdr PT_LOAD;
131  vector_int3_lit_phdr PT_LOAD;
132  vector_int4_text_phdr PT_LOAD;
133  vector_int4_lit_phdr PT_LOAD;
134  vector_int5_text_phdr PT_LOAD;
135  vector_int5_lit_phdr PT_LOAD;
136  vector_int6_text_phdr PT_LOAD;
137  vector_int6_lit_phdr PT_LOAD;
138  vector_int7_text_phdr PT_LOAD;
139  vector_int7_lit_phdr PT_LOAD;
140  vector_kernel_text_phdr PT_LOAD;
141  vector_kernel_lit_phdr PT_LOAD;
142  vector_user_text_phdr PT_LOAD;
143  vector_user_lit_phdr PT_LOAD;
144  vector_double_text_phdr PT_LOAD;
145  vector_double_lit_phdr PT_LOAD;
146  sof_text_start_phdr PT_LOAD;
147  sof_data_ro_phdr PT_LOAD;
148  sof_data_phdr PT_LOAD;
149  sof_data_bss_phdr PT_LOAD;
150  system_heap_phdr PT_LOAD;
151  system_runtime_heap_phdr PT_LOAD;
152  runtime_heap_phdr PT_LOAD;
153  buffer_heap_phdr PT_LOAD;
154  mailbox_phdr PT_LOAD;
155  virtual_thread_phdr PT_LOAD;
156  sof_stack_phdr PT_LOAD;
157  static_uuid_entries_phdr PT_NOTE;
158  static_log_entries_phdr PT_NOTE;
159  metadata_entries_phdr PT_NOTE;
160}
161
162/*  Default entry point:  */
163ENTRY(_ResetVector)
164_rom_store_table = 0;
165
166/* ABI0 does not use Window base */
167PROVIDE(_memmap_vecbase_reset = SOF_MEM_VECBASE_TEXT_BASE);
168
169/* Various memory-map dependent cache attribute settings: */
170_memmap_cacheattr_wb_base = 0x44024000;
171_memmap_cacheattr_wt_base = 0x11021000;
172_memmap_cacheattr_bp_base = 0x22022000;
173_memmap_cacheattr_unused_mask = 0x00F00FFF;
174_memmap_cacheattr_wb_trapnull = 0x4422422F;
175_memmap_cacheattr_wba_trapnull = 0x4422422F;
176_memmap_cacheattr_wbna_trapnull = 0x25222222;
177_memmap_cacheattr_wt_trapnull = 0x1122122F;
178_memmap_cacheattr_bp_trapnull = 0x2222222F;
179_memmap_cacheattr_wb_strict = 0x44F24FFF;
180_memmap_cacheattr_wt_strict = 0x11F21FFF;
181_memmap_cacheattr_bp_strict = 0x22F22FFF;
182_memmap_cacheattr_wb_allvalid = 0x44224222;
183_memmap_cacheattr_wt_allvalid = 0x11221222;
184_memmap_cacheattr_bp_allvalid = 0x22222222;
185PROVIDE(_memmap_cacheattr_reset = _memmap_cacheattr_wbna_trapnull);
186
187_EXT_MAN_ALIGN_ = 16;
188EXTERN(ext_man_fw_ver)
189
190SECTIONS
191{
192  .ResetVector.text : ALIGN(4)
193  {
194    _ResetVector_text_start = ABSOLUTE(.);
195    KEEP (*(.ResetVector.text))
196    _ResetVector_text_end = ABSOLUTE(.);
197  } >vector_reset_text :vector_reset_text_phdr
198
199  .ResetVector.literal : ALIGN(4)
200  {
201    _ResetVector_literal_start = ABSOLUTE(.);
202    *(.ResetVector.literal)
203    _ResetVector_literal_end = ABSOLUTE(.);
204  } >vector_reset_lit :vector_reset_lit_phdr
205
206  .WindowVectors.text : ALIGN(4)
207  {
208    _WindowVectors_text_start = ABSOLUTE(.);
209    KEEP (*(.WindowVectors.text))
210    _WindowVectors_text_end = ABSOLUTE(.);
211  } >vector_base_text :vector_base_text_phdr
212
213  .Level2InterruptVector.literal : ALIGN(4)
214  {
215    _Level2InterruptVector_literal_start = ABSOLUTE(.);
216    *(.Level2InterruptVector.literal)
217    _Level2InterruptVector_literal_end = ABSOLUTE(.);
218  } >vector_int2_lit :vector_int2_lit_phdr
219
220  .Level2InterruptVector.text : ALIGN(4)
221  {
222    _Level2InterruptVector_text_start = ABSOLUTE(.);
223    KEEP (*(.Level2InterruptVector.text))
224    _Level2InterruptVector_text_end = ABSOLUTE(.);
225  } >vector_int2_text :vector_int2_text_phdr
226
227  .Level3InterruptVector.literal : ALIGN(4)
228  {
229    _Level3InterruptVector_literal_start = ABSOLUTE(.);
230    *(.Level3InterruptVector.literal)
231    _Level3InterruptVector_literal_end = ABSOLUTE(.);
232  } >vector_int3_lit :vector_int3_lit_phdr
233
234  .Level3InterruptVector.text : ALIGN(4)
235  {
236    _Level3InterruptVector_text_start = ABSOLUTE(.);
237    KEEP (*(.Level3InterruptVector.text))
238    _Level3InterruptVector_text_end = ABSOLUTE(.);
239  } >vector_int3_text :vector_int3_text_phdr
240
241  .Level4InterruptVector.literal : ALIGN(4)
242  {
243    _Level4InterruptVector_literal_start = ABSOLUTE(.);
244    *(.Level4InterruptVector.literal)
245    _Level4InterruptVector_literal_end = ABSOLUTE(.);
246  } >vector_int4_lit :vector_int4_lit_phdr
247
248  .Level4InterruptVector.text : ALIGN(4)
249  {
250    _Level4InterruptVector_text_start = ABSOLUTE(.);
251    KEEP (*(.Level4InterruptVector.text))
252    _Level4InterruptVector_text_end = ABSOLUTE(.);
253  } >vector_int4_text :vector_int4_text_phdr
254
255  .Level5InterruptVector.literal : ALIGN(4)
256  {
257    _Level5InterruptVector_literal_start = ABSOLUTE(.);
258    *(.Level5InterruptVector.literal)
259    _Level5InterruptVector_literal_end = ABSOLUTE(.);
260  } >vector_int5_lit :vector_int5_lit_phdr
261
262  .Level5InterruptVector.text : ALIGN(4)
263  {
264    _Level5InterruptVector_text_start = ABSOLUTE(.);
265    KEEP (*(.Level5InterruptVector.text))
266    _Level5InterruptVector_text_end = ABSOLUTE(.);
267  } >vector_int5_text :vector_int5_text_phdr
268
269  .DebugExceptionVector.literal : ALIGN(4)
270  {
271    _DebugExceptionVector_literal_start = ABSOLUTE(.);
272    *(.DebugExceptionVector.literal)
273    _DebugExceptionVector_literal_end = ABSOLUTE(.);
274  } >vector_int6_lit :vector_int6_lit_phdr
275
276  .DebugExceptionVector.text : ALIGN(4)
277  {
278    _DebugExceptionVector_text_start = ABSOLUTE(.);
279    KEEP (*(.DebugExceptionVector.text))
280    _DebugExceptionVector_text_end = ABSOLUTE(.);
281  } >vector_int6_text :vector_int6_text_phdr
282
283  .NMIExceptionVector.literal : ALIGN(4)
284  {
285    _NMIExceptionVector_literal_start = ABSOLUTE(.);
286    *(.NMIExceptionVector.literal)
287    _NMIExceptionVector_literal_end = ABSOLUTE(.);
288  } >vector_int7_lit :vector_int7_lit_phdr
289
290  .NMIExceptionVector.text : ALIGN(4)
291  {
292    _NMIExceptionVector_text_start = ABSOLUTE(.);
293    KEEP (*(.NMIExceptionVector.text))
294    _NMIExceptionVector_text_end = ABSOLUTE(.);
295  } >vector_int7_text :vector_int7_text_phdr
296
297  .KernelExceptionVector.literal : ALIGN(4)
298  {
299    _KernelExceptionVector_literal_start = ABSOLUTE(.);
300    *(.KernelExceptionVector.literal)
301    _KernelExceptionVector_literal_end = ABSOLUTE(.);
302  } >vector_kernel_lit :vector_kernel_lit_phdr
303
304  .KernelExceptionVector.text : ALIGN(4)
305  {
306    _KernelExceptionVector_text_start = ABSOLUTE(.);
307    KEEP (*(.KernelExceptionVector.text))
308    _KernelExceptionVector_text_end = ABSOLUTE(.);
309  } >vector_kernel_text :vector_kernel_text_phdr
310
311  .UserExceptionVector.literal : ALIGN(4)
312  {
313    _UserExceptionVector_literal_start = ABSOLUTE(.);
314    *(.UserExceptionVector.literal)
315    _UserExceptionVector_literal_end = ABSOLUTE(.);
316  } >vector_user_lit :vector_user_lit_phdr
317
318  .UserExceptionVector.text : ALIGN(4)
319  {
320    _UserExceptionVector_text_start = ABSOLUTE(.);
321    KEEP (*(.UserExceptionVector.text))
322    _UserExceptionVector_text_end = ABSOLUTE(.);
323  } >vector_user_text :vector_user_text_phdr
324
325  .DoubleExceptionVector.literal : ALIGN(4)
326  {
327    _DoubleExceptionVector_literal_start = ABSOLUTE(.);
328    *(.DoubleExceptionVector.literal)
329    _DoubleExceptionVector_literal_end = ABSOLUTE(.);
330  } >vector_double_lit :vector_double_lit_phdr
331
332  .DoubleExceptionVector.text : ALIGN(4)
333  {
334    _DoubleExceptionVector_text_start = ABSOLUTE(.);
335    KEEP (*(.DoubleExceptionVector.text))
336    _DoubleExceptionVector_text_end = ABSOLUTE(.);
337  } >vector_double_text :vector_double_text_phdr
338
339  .text : ALIGN(4)
340  {
341    _stext = .;
342    _text_start = ABSOLUTE(.);
343    *(.entry.text)
344    *(.init.literal)
345    KEEP(*(.init))
346    *(.literal .text .literal.* .text.* .stub .gnu.warning .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*)
347    *(.fini.literal)
348    KEEP(*(.fini))
349    *(.gnu.version)
350    _text_end = ABSOLUTE(.);
351    _etext = .;
352  } >sof_text_start :sof_text_start_phdr
353
354  .reset.rodata : ALIGN(4)
355  {
356    _reset_rodata_start = ABSOLUTE(.);
357    *(.reset.rodata)
358    _reset_rodata_end = ABSOLUTE(.);
359  } >sof_data_ro :sof_data_ro_phdr
360
361  .rodata : ALIGN(4)
362  {
363    _rodata_start = ABSOLUTE(.);
364    *(.rodata)
365    *(.rodata.*)
366    *(.gnu.linkonce.r.*)
367    *(.rodata1)
368    __XT_EXCEPTION_TABLE__ = ABSOLUTE(.);
369    KEEP (*(.xt_except_table))
370    KEEP (*(.gcc_except_table))
371    *(.gnu.linkonce.e.*)
372    *(.gnu.version_r)
373    KEEP (*(.eh_frame))
374    /*  C++ constructor and destructor tables, properly ordered:  */
375    KEEP (*crtbegin.o(.ctors))
376    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
377    KEEP (*(SORT(.ctors.*)))
378    KEEP (*(.ctors))
379    KEEP (*crtbegin.o(.dtors))
380    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
381    KEEP (*(SORT(.dtors.*)))
382    KEEP (*(.dtors))
383    /*  C++ exception handlers table:  */
384    __XT_EXCEPTION_DESCS__ = ABSOLUTE(.);
385    *(.xt_except_desc)
386    *(.gnu.linkonce.h.*)
387    __XT_EXCEPTION_DESCS_END__ = ABSOLUTE(.);
388    *(.xt_except_desc_end)
389    *(.dynamic)
390    *(.gnu.version_d)
391    . = ALIGN(4);		/* this table MUST be 4-byte aligned */
392    _bss_table_start = ABSOLUTE(.);
393    LONG(_bss_start)
394    LONG(_bss_end)
395    _bss_table_end = ABSOLUTE(.);
396    _rodata_end = ABSOLUTE(.);
397  } >sof_data :sof_data_phdr
398
399  .module_init : ALIGN(4)
400  {
401    _module_init_start = ABSOLUTE(.);
402    *(*.module_init)
403    _module_init_end = ABSOLUTE(.);
404  } >sof_data :sof_data_phdr
405  .data : ALIGN(4)
406  {
407    _data_start = ABSOLUTE(.);
408    *(.data)
409    *(.data.*)
410    *(.gnu.linkonce.d.*)
411    KEEP(*(.gnu.linkonce.d.*personality*))
412    *(.data1)
413    *(.sdata)
414    *(.sdata.*)
415    *(.gnu.linkonce.s.*)
416    *(.sdata2)
417    *(.sdata2.*)
418    *(.gnu.linkonce.s2.*)
419    KEEP(*(.jcr))
420    _data_end = ABSOLUTE(.);
421    _trace_ctx_start = ABSOLUTE(.);
422    *(.trace_ctx)
423    _trace_ctx_end = ABSOLUTE(.);
424  } >sof_data :sof_data_phdr
425
426  .lit4 : ALIGN(4)
427  {
428    _lit4_start = ABSOLUTE(.);
429    *(*.lit4)
430    *(.lit4.*)
431    *(.gnu.linkonce.lit4.*)
432    _lit4_end = ABSOLUTE(.);
433  } >sof_data :sof_data_phdr
434
435  .bss (NOLOAD) : ALIGN(8)
436  {
437    . = ALIGN (8);
438    _bss_start = ABSOLUTE(.);
439    *(.dynsbss)
440    *(.sbss)
441    *(.sbss.*)
442    *(.gnu.linkonce.sb.*)
443    *(.scommon)
444    *(.sbss2)
445    *(.sbss2.*)
446    *(.gnu.linkonce.sb2.*)
447    *(.dynbss)
448    *(.bss)
449    *(.bss.*)
450    *(.gnu.linkonce.b.*)
451    *(COMMON)
452    . = ALIGN (8);
453    _bss_end = ABSOLUTE(.);
454  } >sof_data :sof_data_bss_phdr
455
456  /* stack */
457  _end = SOF_STACK_END;
458  PROVIDE(end = SOF_STACK_END);
459  _stack_sentry = SOF_STACK_END;
460  __stack = SOF_STACK_BASE;
461
462  _virtual_thread_ptr = _virtual_thread_start;
463
464  .debug  0 :  { *(.debug) }
465  .line  0 :  { *(.line) }
466  .debug_srcinfo  0 :  { *(.debug_srcinfo) }
467  .debug_sfnames  0 :  { *(.debug_sfnames) }
468  .debug_aranges  0 :  { *(.debug_aranges) }
469  .debug_pubnames  0 :  { *(.debug_pubnames) }
470  .debug_info  0 :  { *(.debug_info) }
471  .debug_abbrev  0 :  { *(.debug_abbrev) }
472  .debug_line  0 :  { *(.debug_line) }
473  .debug_frame  0 :  { *(.debug_frame) }
474  .debug_str  0 :  { *(.debug_str) }
475  .debug_loc  0 :  { *(.debug_loc) }
476  .debug_macinfo  0 :  { *(.debug_macinfo) }
477  .debug_weaknames  0 :  { *(.debug_weaknames) }
478  .debug_funcnames  0 :  { *(.debug_funcnames) }
479  .debug_typenames  0 :  { *(.debug_typenames) }
480  .debug_varnames  0 :  { *(.debug_varnames) }
481
482  .xt.insn 0 :
483  {
484    KEEP (*(.xt.insn))
485    KEEP (*(.gnu.linkonce.x.*))
486  }
487  .xt.prop 0 :
488  {
489    KEEP (*(.xt.prop))
490    KEEP (*(.xt.prop.*))
491    KEEP (*(.gnu.linkonce.prop.*))
492  }
493  .xt.lit 0 :
494  {
495    KEEP (*(.xt.lit))
496    KEEP (*(.xt.lit.*))
497    KEEP (*(.gnu.linkonce.p.*))
498  }
499  .xt.profile_range 0 :
500  {
501    KEEP (*(.xt.profile_range))
502    KEEP (*(.gnu.linkonce.profile_range.*))
503  }
504  .xt.profile_ranges 0 :
505  {
506    KEEP (*(.xt.profile_ranges))
507    KEEP (*(.gnu.linkonce.xt.profile_ranges.*))
508  }
509  .xt.profile_files 0 :
510  {
511    KEEP (*(.xt.profile_files))
512    KEEP (*(.gnu.linkonce.xt.profile_files.*))
513  }
514
515  .system_heap (NOLOAD) : ALIGN(8)
516  {
517    . = ALIGN (32);
518    _system_heap_start = ABSOLUTE(.);
519    . = . + HEAP_SYSTEM_SIZE;
520    _system_heap_end = ABSOLUTE(.);
521  } >system_heap :system_heap_phdr
522
523  .system_runtime_heap (NOLOAD) : ALIGN(8)
524  {
525    . = ALIGN (32);
526    _system_runtime_heap_start = ABSOLUTE(.);
527    . = . + HEAP_SYS_RUNTIME_SIZE;
528    _system_runtime_heap_end = ABSOLUTE(.);
529  } >system_runtime_heap :system_runtime_heap_phdr
530
531  .runtime_heap (NOLOAD) : ALIGN(8)
532  {
533    . = ALIGN (32);
534    _runtime_heap_start = ABSOLUTE(.);
535    . = . + HEAP_RUNTIME_SIZE;
536    _runtime_heap_end = ABSOLUTE(.);
537  } >runtime_heap :runtime_heap_phdr
538
539  .buffer_heap (NOLOAD) : ALIGN(8)
540  {
541    . = ALIGN (32);
542    _buffer_heap_start = ABSOLUTE(.);
543    . = . + HEAP_BUFFER_SIZE;
544    _buffer_heap_end = ABSOLUTE(.);
545  } >buffer_heap :buffer_heap_phdr
546
547  .mailbox (NOLOAD) : ALIGN(8)
548  {
549    . = ALIGN (32);
550    _mailbox_start = ABSOLUTE(.);
551    . = . + MAILBOX_SIZE;
552    _mailbox_end = ABSOLUTE(.);
553  } >mailbox :mailbox_phdr
554
555   .virtual_thread (NOLOAD) : ALIGN(8)
556  {
557    . = ALIGN (32);
558    _virtual_thread_start = ABSOLUTE(.);
559    . = . + SOF_VIRTUAL_THREAD_SIZE;
560    _virtual_thread_end = ABSOLUTE(.);
561  } >virtual_thread :virtual_thread_phdr
562
563  .sof_stack (NOLOAD) : ALIGN(8)
564  {
565    . = ALIGN (4096);
566    _sof_stack_start = ABSOLUTE(.);
567    . = . + SOF_STACK_TOTAL_SIZE;
568    _sof_stack_end = ABSOLUTE(.);
569  } >sof_stack :sof_stack_phdr
570
571  .static_uuid_entries (COPY) : ALIGN(1024)
572  {
573    *(*.static_uuids)
574  } > static_uuid_entries_seg :static_uuid_entries_phdr
575
576  .static_log_entries (COPY) : ALIGN(1024)
577  {
578    *(*.static_log*)
579  } > static_log_entries_seg :static_log_entries_phdr
580
581  .fw_ready : ALIGN(4)
582  {
583    KEEP (*(.fw_ready))
584    KEEP (*(.fw_ready_metadata))
585  } >sof_data :sof_data_phdr
586
587  .fw_metadata (COPY) : ALIGN(1024)
588  {
589    KEEP (*(.fw_metadata))
590    . = ALIGN(_EXT_MAN_ALIGN_);
591  } >fw_metadata_seg :metadata_entries_phdr
592}
593