On Thu, Mar 25, 2010 at 11:53 AM, Stefan Reinauer <ste...@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
-- coreboot mailing list: coreboot@coreboot.org http://www.coreboot.org/mailman/listinfo/coreboot