On 20.08.2008 17:49, Stefan Reinauer wrote:
> Carl-Daniel Hailfinger wrote:
>   
>> On 20.08.2008 15:33, Carl-Daniel Hailfinger wrote:
>>   
>>     
>>> v3 does not handle .data and .bss sections in stage1 and initram. We
>>> simply hope they are unused/empty and will get runtime
>>> crashes/corruption/malfunction if they are not empty.
>>>
>>> Check for the emptiness of these sections and abort the build on error.
>>> This triggers on all stage1/initram global variables which are not
>>> declared the right way.
>>>
>>> This found a long-standing bug introduced in r729 and fixed in r576.
>>> It also breaks the build of every Geode target in the v3 tree because
>>> they have multiple bugs. And it breaks the build of the K8 code because
>>> of a bug there.
>>>
>>> Tested for all possible variations of .data and .bss usage.
>>>
>>> Signed-off-by: Carl-Daniel Hailfinger <[EMAIL PROTECTED]>
>>>   
>>>     
>>>       
>> Better checker follows. It does not only tell you the name of the object
>> file with the bug, it even gives you the variable name which caused the bug:
>>   CHECK   initram (non-empty .data sections)
>> /sources/tmptrees/corebootv3-check_illegal_global_vars/build/coreboot.initram_partiallylinked.o:
>> first_time.3526
>> make: ***
>> [/sources/tmptrees/corebootv3-check_illegal_global_vars/build/coreboot.initram]
>> Error 1
>>
>> Signed-off-by: Carl-Daniel Hailfinger <[EMAIL PROTECTED]>
>>   
>>     
>
> Hm.. should we pack this into a small shell script (similar to xcompile) ?
> Duplicating (almost) the same code 4 times is a bit ugly.
>
> Also,  please use $(OBJDUMP), as on any cross compiling system objdump
> will not be there, or for a different architecture.
>   

Script follows. It will be called with the correct $(OBJDUMP). What do
you think?

Regards,
Carl-Daniel

Signed-off-by: Carl-Daniel Hailfinger <[EMAIL PROTECTED]>

Index: util/sectionchecker/sectionchecker
===================================================================
--- util/sectionchecker/sectionchecker  (Revision 0)
+++ util/sectionchecker/sectionchecker  (Revision 0)
@@ -0,0 +1,22 @@
+#!/bin/bash
+OBJDUMP=$1
+SECTION=$2
+BASEDIR=$3
+shift 3
+$OBJDUMP -h $*|
+       grep "^$BASEDIR\|\\$SECTION"|
+       grep -v "\\$SECTION[[:blank:]]\+00000000[[:blank:]]"|
+       grep -B1 "\\$SECTION"|
+       grep "^$BASEDIR"|
+       cut -f 1 -d:|
+       while read a; do
+               echo -n "$a: "
+               $OBJDUMP -t --section=$SECTION $a|
+                       grep -i "^[0-9a-f]\{8\}"|
+                       grep -v "00000000 [^ ]\+$"|
+                       sed "s/.* //"|
+                       xargs echo
+       done|
+       grep "^$BASEDIR"
+# Invert the result
+test $? -ne 0



-- 
http://www.hailfinger.org/


--
coreboot mailing list
[email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to