[coreboot] [commit] r5286 - ...

Myles Watson mylesgw at gmail.com
Thu Mar 25 19:54:18 CET 2010


On Thu, Mar 25, 2010 at 11:53 AM, Stefan Reinauer <stepan at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20100325/e46f5b22/attachment.html>


More information about the coreboot mailing list