Make sure the BIOS file ends on an aligned boundary.

If it does not, the address to which mkmscimg.py writes the CRC
and the address from which it is read could differ.
This commit is contained in:
whitequark 2015-07-29 12:30:57 +03:00
parent a4e14f1058
commit 8db098dd8f
2 changed files with 12 additions and 15 deletions

View File

@ -18,18 +18,12 @@ SECTIONS
_frodata = .;
*(.rodata .rodata.* .gnu.linkonce.r.*)
*(.rodata1)
_erodata = .;
} > rom
/* We shouldn't have a .data section, but the GNU crapchain whines if we don't */
.data :
{
/* Make sure the file is aligned on disk as well
as in memory; CRC calculation requires that. */
FILL(0);
. = ALIGN(4);
_fdata = .;
*(.data .data.* .gnu.linkonce.d.*)
*(.data1)
*(.sdata .sdata.* .gnu.linkonce.s.*)
_edata = .;
_erodata = .;
} > rom
.bss :
@ -51,6 +45,9 @@ SECTIONS
{
*(.eh_frame)
*(.comment)
*(.data .data.* .gnu.linkonce.d.*)
*(.data1)
*(.sdata .sdata.* .gnu.linkonce.s.*)
}
}

View File

@ -409,7 +409,7 @@ static void do_command(char *c)
printf("Command not found\n");
}
extern unsigned int _ftext, _edata;
extern unsigned int _ftext, _erodata;
static void crcbios(void)
{
@ -419,14 +419,14 @@ static void crcbios(void)
unsigned int actual_crc;
/*
* _edata is located right after the end of the flat
* _erodata is located right after the end of the flat
* binary image. The CRC tool writes the 32-bit CRC here.
* We also use the address of _edata to know the length
* We also use the address of _erodata to know the length
* of our code.
*/
offset_bios = (unsigned int)&_ftext;
expected_crc = _edata;
length = (unsigned int)&_edata - offset_bios;
expected_crc = _erodata;
length = (unsigned int)&_erodata - offset_bios;
actual_crc = crc32((unsigned char *)offset_bios, length);
if(expected_crc == actual_crc)
printf("BIOS CRC passed (%08x)\n", actual_crc);