cbfstool: make endian detection code more robust

Accessing the memory of a char array through a uint32_t pointer breaks
strict-aliasing rules as it dereferences memory with lower alignment
requirements than the type of the pointer requires. It's no problem on
x86 as the architecture is able to handle unaligned memory access but
other architectures are not.

Fix this by doing the test the other way around -- accessing the first
byte of a uint32_t variable though a uint8_t pointer.

Change-Id: Id340b406597014232741c98a4fd0b7c159f164c2
Signed-off-by: Mathias Krause <minipli@googlemail.com>
Reviewed-on: http://review.coreboot.org/1234
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Tested-by: build bot (Jenkins)
This commit is contained in:
Mathias Krause 2012-07-17 20:52:17 +02:00 committed by Stefan Reinauer
parent 1171986627
commit d2567c8d92
1 changed files with 3 additions and 3 deletions

View File

@ -339,9 +339,9 @@ int host_bigendian = 0;
static void which_endian(void) static void which_endian(void)
{ {
char test[4] = "1234"; static const uint32_t inttest = 0x12345678;
uint32_t inttest = *(uint32_t *) test; uint8_t inttest_lsb = *(uint8_t *)&inttest;
if (inttest == 0x31323334) { if (inttest_lsb == 0x12) {
host_bigendian = 1; host_bigendian = 1;
} }
} }