[coreboot] [commit] r5286 - ...
Stefan Reinauer
stepan at coresystems.de
Thu Mar 25 22:58:41 CET 2010
On 3/25/10 10:47 PM, Segher Boessenkool wrote:
>>>>> -extern unsigned char AmlCode[];
>>>>> +extern const acpi_header_t AmlCode;
>>>>>
>>>> And we're positive, this always does the right thing with gcc?
>>>>
>>> I am told that AmlCode is defined as array of (unsigned) char in
>>> some other file. Declaring it as some other type here is not
>>> valid C, and *will* break with GCC, with some options (-combine
>>> or LTO at least) -- it will not compile.
>>>
>> The biggest worry for me is incorrect execution. If it doesn't compile
>> when
>> it breaks, then that's a good thing.
>>
> It will probably _work_ with current GCC and no whole-program stuff,
> but how do you *know* it does? Better to just fix it.
>
>
I changed one as an example now...
I guess we could optimize to not copy the header twice, but the header
is really small, so i didn't care to make the code uglier.
Index: src/mainboard/intel/d945gclf/acpi_tables.c
===================================================================
--- src/mainboard/intel/d945gclf/acpi_tables.c (revision 5297)
+++ src/mainboard/intel/d945gclf/acpi_tables.c (working copy)
@@ -31,7 +31,7 @@
#define OLD_ACPI 0
-extern const acpi_header_t AmlCode;
+extern unsigned char AmlCode[];
#if CONFIG_HAVE_ACPI_SLIC
unsigned long acpi_create_slic(unsigned long current);
#endif
@@ -273,8 +273,10 @@
acpi_create_facs(facs);
dsdt = (acpi_header_t *) current;
- current += AmlCode.length;
- memcpy((void *) dsdt, &AmlCode, AmlCode.length);
+ memcpy((void *) dsdt, AmlCode, sizeof(acpi_header_t));
+ int len = dsdt->length;
+ current += len;
+ memcpy((void *) dsdt, AmlCode, len);
#if OLD_ACPI
for (i=0; i < dsdt->length; i++) {
More information about the coreboot
mailing list