From 49009388598fab220e40ce688801cd90147cfafb Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Tue, 1 Jan 2013 12:04:02 -0800 Subject: [PATCH 1/2] cosmetic whitespace --- me7sum.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/me7sum.c b/me7sum.c index 13cd065..2157f92 100644 --- a/me7sum.c +++ b/me7sum.c @@ -63,7 +63,7 @@ struct ImageHandle { // descriptors struct MultipointDescriptor { - struct Range r; + struct Range r; struct ChecksumPair csum; }; @@ -199,7 +199,8 @@ int main(int argc, char **argv) { printf("\nReading Boot checksum...\n"); chksum = CalcChecksumBlk(&ih, &BootConfig.addr); - printf("Start: 0x%04X End: 0x%04X Chksum: 0x%08X CalcChk: 0x%08X", BootConfig.addr.start, BootConfig.addr.end, BootConfig.checksum, chksum); + printf("Start: 0x%04X End: 0x%04X Chksum: 0x%08X CalcChk: 0x%08X", + BootConfig.addr.start, BootConfig.addr.end, BootConfig.checksum, chksum); if(chksum == BootConfig.checksum) { printf(" OK \n"); @@ -378,7 +379,8 @@ static void ReadMainChecksum(struct ImageHandle *ih) uint32_t nCalcChksum; uint32_t nCalcChksum2; - printf("Seeking to ROM Checksum Block Offset Table 0x%X [16 bytes table]\n\n",Config.main_checksum_offset); + printf("Seeking to ROM Checksum Block Offset Table 0x%X [16 bytes table]\n\n", + Config.main_checksum_offset); // C16x processors are little endian memcpy(&desc, ih->d.p+Config.main_checksum_offset, sizeof(desc)); @@ -386,7 +388,8 @@ static void ReadMainChecksum(struct ImageHandle *ih) // block 1 nCalcChksum = CalcChecksumBlk(ih, desc.r); - printf("Start: 0x%04X End: 0x%04X Block #1 - nCalcChksum=0x%04x\n", desc.r[0].start, desc.r[0].end,nCalcChksum); + printf("Start: 0x%04X End: 0x%04X Block #1 - nCalcChksum=0x%04x\n", + desc.r[0].start, desc.r[0].end, nCalcChksum); if (desc.r[0].end + 1 != desc.r[1].start) { @@ -395,15 +398,18 @@ static void ReadMainChecksum(struct ImageHandle *ih) { skip-=Config.base_address; } - printf("Start: 0x%04X End: 0x%04X - MAP REGION SKIPPED, NOT PART OF MAIN CHECKSUM\n", desc.r[0].end+1, desc.r[1].start-1); + printf("Start: 0x%04X End: 0x%04X - MAP REGION SKIPPED, NOT PART OF MAIN CHECKSUM\n", + desc.r[0].end+1, desc.r[1].start-1); } // block 2 nCalcChksum2= CalcChecksumBlk(ih, desc.r+1); - printf("Start: 0x%04X End: 0x%04X Block #2 - nCalcChksum=0x%04x\n", desc.r[1].start, desc.r[1].end,nCalcChksum2); + printf("Start: 0x%04X End: 0x%04X Block #2 - nCalcChksum=0x%04x\n", + desc.r[1].start, desc.r[1].end,nCalcChksum2); nCalcChksum += nCalcChksum2; - printf("\nRead in stored MAIN ROM checksum block @ 0x%X [8 bytes]\n",Config.main_checksum_final); + printf("\nRead in stored MAIN ROM checksum block @ 0x%X [8 bytes]\n", + Config.main_checksum_final); //Read in the stored checksum --- GOOD memcpy(&csum, ih->d.p+Config.main_checksum_final, sizeof(csum)); From c938169764d75d18873dc4cbfb8f282e333f5059 Mon Sep 17 00:00:00 2001 From: Nye Liu Date: Tue, 1 Jan 2013 16:27:22 -0800 Subject: [PATCH 2/2] handle endian properly, and a few more cosmetic changes --- me7sum.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/me7sum.c b/me7sum.c index 2157f92..b1aaffc 100644 --- a/me7sum.c +++ b/me7sum.c @@ -34,6 +34,7 @@ #include #include /* open() */ #include /* close() */ +#include #include #include @@ -63,7 +64,7 @@ struct ImageHandle { // descriptors struct MultipointDescriptor { - struct Range r; + struct Range r; struct ChecksumPair csum; }; @@ -199,8 +200,7 @@ int main(int argc, char **argv) { printf("\nReading Boot checksum...\n"); chksum = CalcChecksumBlk(&ih, &BootConfig.addr); - printf("Start: 0x%04X End: 0x%04X Chksum: 0x%08X CalcChk: 0x%08X", - BootConfig.addr.start, BootConfig.addr.end, BootConfig.checksum, chksum); + printf("Start: 0x%04X End: 0x%04X Chksum: 0x%08X CalcChk: 0x%08X", BootConfig.addr.start, BootConfig.addr.end, BootConfig.checksum, chksum); if(chksum == BootConfig.checksum) { printf(" OK \n"); @@ -316,6 +316,16 @@ static int GetRomInfo(struct ImageHandle *ih, struct section *osconfig) return 0; } +static void memcpy_from_le32(void *dest, void *src, size_t len) +{ +#if __BYTE_ORDER == __LITTLE_ENDIAN + memcpy(dest, src, len); +#else + int i; + for (i=0;i ",nStartBlk); fflush(stdout); - // todo: endian swap on bigendian host - memcpy(&desc, ih->d.p+nStartBlk, sizeof(desc)); + + memcpy_from_le32(&desc, ih->d.p+nStartBlk, sizeof(desc)); + printf("Adr: 0x%04X-0x%04X ", desc.r.start, desc.r.end); fflush(stdout); @@ -379,17 +390,14 @@ static void ReadMainChecksum(struct ImageHandle *ih) uint32_t nCalcChksum; uint32_t nCalcChksum2; - printf("Seeking to ROM Checksum Block Offset Table 0x%X [16 bytes table]\n\n", - Config.main_checksum_offset); + printf("Seeking to ROM Checksum Block Offset Table 0x%X [16 bytes table]\n\n",Config.main_checksum_offset); // C16x processors are little endian - memcpy(&desc, ih->d.p+Config.main_checksum_offset, sizeof(desc)); - // todo: endian swap on bigendian host + memcpy_from_le32(&desc, ih->d.p+Config.main_checksum_offset, sizeof(desc)); // block 1 nCalcChksum = CalcChecksumBlk(ih, desc.r); - printf("Start: 0x%04X End: 0x%04X Block #1 - nCalcChksum=0x%04x\n", - desc.r[0].start, desc.r[0].end, nCalcChksum); + printf("Start: 0x%04X End: 0x%04X Block #1 - nCalcChksum=0x%04x\n", desc.r[0].start, desc.r[0].end,nCalcChksum); if (desc.r[0].end + 1 != desc.r[1].start) { @@ -398,22 +406,18 @@ static void ReadMainChecksum(struct ImageHandle *ih) { skip-=Config.base_address; } - printf("Start: 0x%04X End: 0x%04X - MAP REGION SKIPPED, NOT PART OF MAIN CHECKSUM\n", - desc.r[0].end+1, desc.r[1].start-1); + printf("Start: 0x%04X End: 0x%04X - MAP REGION SKIPPED, NOT PART OF MAIN CHECKSUM\n", desc.r[0].end+1, desc.r[1].start-1); } // block 2 nCalcChksum2= CalcChecksumBlk(ih, desc.r+1); - printf("Start: 0x%04X End: 0x%04X Block #2 - nCalcChksum=0x%04x\n", - desc.r[1].start, desc.r[1].end,nCalcChksum2); + printf("Start: 0x%04X End: 0x%04X Block #2 - nCalcChksum=0x%04x\n", desc.r[1].start, desc.r[1].end,nCalcChksum2); nCalcChksum += nCalcChksum2; - printf("\nRead in stored MAIN ROM checksum block @ 0x%X [8 bytes]\n", - Config.main_checksum_final); + printf("\nRead in stored MAIN ROM checksum block @ 0x%X [8 bytes]\n",Config.main_checksum_final); //Read in the stored checksum --- GOOD - memcpy(&csum, ih->d.p+Config.main_checksum_final, sizeof(csum)); - // todo: endian swap on bigendian host + memcpy_from_le32(&csum, ih->d.p+Config.main_checksum_final, sizeof(csum)); printf("Chksum : 0x%08X ~Chksum : 0x%08X\n", csum.v, csum.iv); printf("CalcChk: 0x%08X ~CalcChk: 0x%08X", nCalcChksum, ~nCalcChksum); @@ -452,8 +456,11 @@ static uint32_t CalcChecksumBlk(struct ImageHandle *ih, const struct Range *r) for(nIndex = nStartAddr/2; nIndex <= nEndAddr/2; nIndex++) { +#if __BYTE_ORDER == __LITTLE_ENDIAN nChecksum+=ih->d.u16[nIndex]; - // todo: endian +#else + nChecksum+=__bswap_16(ih->d.u16[nIndex]); +#endif } return nChecksum; }