@@ -240,20 +240,21 @@ static int man_get_module_manifest(struct image *image, struct manifest_module *
240240 segment -> flags .r .load = 1 ;
241241 segment -> flags .r .readonly = 1 ;
242242 segment -> flags .r .code = 1 ;
243+ segment -> flags .r .type = SOF_MAN_SEGMENT_TEXT ;
243244
244245 /* data segment */
245246 segment = & man_module -> segment [SOF_MAN_SEGMENT_RODATA ];
246247 segment -> flags .r .contents = 1 ;
247248 segment -> flags .r .alloc = 1 ;
248249 segment -> flags .r .load = 1 ;
249- segment -> flags .r .readonly = 1 ;
250+ segment -> flags .r .readonly = 0 ; /* rodata segment contains also writtable data */
250251 segment -> flags .r .data = 1 ;
251- segment -> flags .r .type = 1 ;
252+ segment -> flags .r .type = SOF_MAN_SEGMENT_RODATA ;
252253
253254 /* bss segment */
254255 segment = & man_module -> segment [SOF_MAN_SEGMENT_BSS ];
255256 segment -> flags .r .alloc = 1 ;
256- segment -> flags .r .type = 2 ;
257+ segment -> flags .r .type = SOF_MAN_SEGMENT_BSS ;
257258
258259 fprintf (stdout , " Entry point 0x%8.8x\n" , man_module -> entry_point );
259260
@@ -366,22 +367,28 @@ static int man_module_create(struct image *image, struct manifest_module *module
366367 if (err )
367368 return err ;
368369
369-
370370 /* data section */
371- man_module -> segment [SOF_MAN_SEGMENT_RODATA ].v_base_addr = module -> file .data .start ;
372- man_module -> segment [SOF_MAN_SEGMENT_RODATA ].file_offset = module -> foffset +
373- module -> text_fixup_size ;
374371
375372 /* file_size is already aligned to MAN_PAGE_SIZE */
376373 pages = module -> file .data .file_size / MAN_PAGE_SIZE ;
377374
378375 man_module -> segment [SOF_MAN_SEGMENT_RODATA ].flags .r .length = pages ;
379-
380- /* Copy data sections content */
381- err = man_copy_elf_sections (image , module , & man_module -> segment [SOF_MAN_SEGMENT_RODATA ],
382- module -> file .data .first_section );
383- if (err )
384- return err ;
376+ if (pages ) {
377+ man_module -> segment [SOF_MAN_SEGMENT_RODATA ].v_base_addr = module -> file .data .start ;
378+ man_module -> segment [SOF_MAN_SEGMENT_RODATA ].file_offset = module -> foffset +
379+ module -> text_fixup_size ;
380+ /* Copy data sections content */
381+ err = man_copy_elf_sections (image , module ,
382+ & man_module -> segment [SOF_MAN_SEGMENT_RODATA ],
383+ module -> file .data .first_section );
384+ if (err )
385+ return err ;
386+ } else {
387+ man_module -> segment [SOF_MAN_SEGMENT_RODATA ].v_base_addr = 0 ;
388+ man_module -> segment [SOF_MAN_SEGMENT_RODATA ].file_offset = 0 ;
389+ man_module -> segment [SOF_MAN_SEGMENT_RODATA ].flags .ul = 0 ;
390+ man_module -> segment [SOF_MAN_SEGMENT_RODATA ].flags .r .type = SOF_MAN_SEGMENT_EMPTY ;
391+ }
385392
386393 /* bss is last */
387394
0 commit comments