On Thu, Mar 25, 2010 at 11:53 AM, Stefan Reinauer
<stepan@coresystems.de> wrote:
On 3/25/10 5:45 PM, Myles Watson wrote:
The reason I object to the void* method was that it just
masked the
problem so that gcc couldn't spot it. Casting to void* and back to a
struct seems equivalent to just having it declared two different ways.
I don't think
it's masking the problem. It should be sufficient to let gcc know that
it can't assume anything from the pointer since it comes from a void *.
Also, it's not casting it back to a struct, because it never was a
struct. So, while it might not be beautiful, I think it's at least not
wrong.
The interesting thing is that gcc won't allow the cast if you don't have a variable for it. That's why I thought it was masking the problem.
In other words, when I tried:
((acpi_header_t*)((void*)&AmlCode)) ->length
It still has the type-punned-pointer warning.
> Which makes me think if there are not
other ways to determine the size
> of an array. Maybe sizeof(AmlCode) ?
I tried that. It doesn't work because it's an incomplete type.
It would not if we included the file
----- 8< ------ dsdt_wrapper.c -------- 8< ----------
#include "dsdt.c"
int AmlCodeSize = sizeof(AmlCode);
The boards with multiple ssdts would have to be refactored.
A (maybe too obvious) variant would be to create a binary dsdt instead
of a C file and pack that into CBFS. It would reduce coreboot size and
allow to copy/decompress it right to cbmem
This would be fine with me. It's quite a bit more overhead than the double copy, though.
Thanks,
Myles