Hello Jeff,

----- Am 14. Jan 2020 um 17:37 schrieb Jeff Kubascik 
jeff.kubas...@dornerworks.com:

> Hello,
> 
> I have noticed a change in the linker section ".rtemsrwset" alignment which 
> has
> affected the zImage header that was added with the arm/xen BSP. The zImage
> header uses the bsp_section_data_end symbol to determine the end of the 
> image. I
> was able to track this change to the commit 234d155e linkersets: Revert to
> zero-length arrays.
> 
> Here is the readelf output of the ticker.exe application just prior before
> commit
> 
> Section Headers:
>  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf 
> Al
>  [15] .rtemsstack       NOBITS          40100000 01358c 001000 00  WA  0   0 
> 64
>  [16] .data             PROGBITS        40101000 101000 0004e0 00  WA  0   0  
> 8
>  [17] .rtemsrwset       PROGBITS        401014e0 1014e0 000000 00      0   0  
> 1
> 
> Here is the output with the commit
> 
> Section Headers:
>  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf 
> Al
>  [15] .rtemsstack       NOBITS          40100000 01358c 001000 00  WA  0   0 
> 64
>  [16] .data             PROGBITS        40101000 101000 0004e0 00  WA  0   0  
> 8
>  [17] .rtemsrwset       PROGBITS        40101500 101500 000000 00  WA  0   0 
> 64
> 
> This shows that the alignment of the ".rtemsrwset" section changed from 1 byte
> to 64 bytes. This changes the start address of the section to be aligned, even
> though the section is empty.
> 
> The bsp_section_data_end symbol is located at the end of the ".rtemsrwset"
> section. If the section is empty, the bsp_section_data_end symbol will contain
> the start address of the section.
> 
> .data : ALIGN_WITH_INPUT {
>       bsp_section_data_begin = .;
>       *(.data .data.* .gnu.linkonce.d.*)
>       SORT(CONSTRUCTORS)
> } > REGION_DATA AT > REGION_DATA_LOAD
> .data1 : ALIGN_WITH_INPUT {
>       *(.data1)
> } > REGION_DATA AT > REGION_DATA_LOAD
> .rtemsrwset : ALIGN_WITH_INPUT {
>       KEEP (*(SORT(.rtemsrwset.*)))
>       bsp_section_data_end = .;
> } > REGION_DATA AT > REGION_DATA_LOAD
> 
> When I convert the ticker.exe elf to a binary with objcopy, the binary doesn't
> include the ".rtemsrwset" section, since it's empty. As a result, the length 
> of
> the binary doesn't match the bsp_section_data_end symbol. This is a problem 
> for
> some zImage loaders that verify the image length.
> 
> I'm not certain what would be the best way to fix the zImage header. Is there 
> a
> different symbol that I should be using to get the end of the image? Maybe 
> this
> is a bug with the linker script?

there is no bug in the linker script. In wkspace.c there is this linker set 
declared:

RTEMS_LINKER_RWSET(
  _Per_CPU_Data,
  RTEMS_ALIGNED( CPU_CACHE_LINE_BYTES ) char
);

So, the .rtemsrwset contains an empty _Per_CPU_Data set which is properly 
aligned.

In uniprocessor configuration, the cache alignment is superfluous. I will fix 
this.

Why don't you use the file size of your binary created by objcopy to set the 
image size?
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to