Thiemo Seufer wrote:
> Alexander Graf wrote:
>   
>> PowerPCs have static instruction lengths, so writing an "in-between" brl
>> detection is quite simple on this architecture. You are welcome to write
>> something like this for any other platform, but if a compile doesn't
>> trigger build errors on PowerPC, it shouldn't on other platforms either,
>> as PowerPC has quite advanced branch instructions.
>>
>> This patch is not mandatory, makes debugging a lot easier though.
>>     
>
>   
>> Index: qemu-snapshot-2008-01-15_05/dyngen.c
>> ===================================================================
>> --- qemu-snapshot-2008-01-15_05.orig/dyngen.c
>> +++ qemu-snapshot-2008-01-15_05/dyngen.c
>> @@ -1488,6 +1488,16 @@ void gen_code(const char *name, host_ulo
>>          if (get32((uint32_t *)p) != 0x4e800020)
>>              error("blr expected at the end of %s", name);
>>          copy_size = p - p_start;
>> +
>> +/* blr check for inline returns */
>> +
>> +        if(strstart(name, "op_", NULL) && !strstart(name, "op_exit", NULL)) 
>> {
>> +            for(p=p_start; p < p_end - 4; p+=4) {
>> +                if ((get32((uint32_t *)p) & 0xfc00fff0) == 0x4c000020) {
>> +                    error("Inline blr detected in %s. Please append 
>> FORCE_RET to the function.", name);
>> +                }
>> +            }
>> +        }
>>     
>
> Is check_ops.sh not enough for debugging micro-ops?
>
>
>   
Basically it should be. PowerPC branching can be (regex) b..rl. Honestly
I did not know about this script though and as it was not in the
makefile, it did not tell me that something wrong was going on. This
check costs near no time and has to be passed in order to build
successfully.

So either check_ops should be fixed (not only brl) and put into the
Makefile.target or a check like this is good to have.

Alex


Reply via email to