On 12/17/2010 07:06 AM, Carsten Haitzler (The Rasterman) wrote:
> On Thu, 16 Dec 2010 20:29:58 +0100 Pierre Cassimans <cazz...@gmail.com> said:
> 
> huh? that looks like this is doing unaligned stuff:
> 
>    params->y = TO_INT(ADD(want_y,
>                           MUL(SUB(want_h, FROM_INT(params->h)),
>                               desc->align.y)));
> 
> so we have:
> 
> TO_INT
> ADD
> MUL
> SUB
> FROM_INT
> 
> ie:
> 
> #define TO_INT(a) eina_f32p32_int_to(a)
> #define ADD(a, b) eina_f32p32_add(a, b)
> #define MUL(a, b) eina_f32p32_mul(a, b)
> #define SUB(a, b) eina_f32p32_sub(a, b)
> #define FROM_INT(a) eina_f32p32_int_from(a)
> 
> which are:
> 
> static inline int32_t
> eina_f32p32_int_to(Eina_F32p32 v)
> {
>    return (int32_t)(v >> 32);
> }
> static inline Eina_F32p32
> eina_f32p32_add(Eina_F32p32 a, Eina_F32p32 b)
> {
>    return a + b;
> }
> #define eina_fp32p32_llabs(a) ((a < 0) ? -(a) : (a))
> static inline Eina_F32p32
> eina_f32p32_mul(Eina_F32p32 a, Eina_F32p32 b)
> {
>    /* Prevent overflow and do '(a * b) >> 32' */
>    /* Basically do: Eina_F16p16 * Eina_F16p16 = Eina_F32p32 */
>    Eina_F32p32 up;
>    Eina_F32p32 down;
>    Eina_F32p32 result;
>    uint64_t as, bs;
>    Eina_F32p32 sign;
> 
>    sign = a ^ b;
>    as = eina_fp32p32_llabs(a);
>    bs = eina_fp32p32_llabs(b);
> 
>    up = (as >> 16) * (bs >> 16);
>    down = (as & 0xFFFF) * (bs & 0xFFFF);
> 
>    result = up + (down >> 32);
> 
>    return sign < 0 ? - result : result;
> }
> static inline Eina_F32p32
> eina_f32p32_sub(Eina_F32p32 a, Eina_F32p32 b)
> {
>    return a - b;
> }
> static inline Eina_F32p32
> eina_f32p32_int_from(int32_t v)
> {
>    return (Eina_F32p32)(v) << 32;
> }
> 
> that's been in edje for a long time - it's fixed point math.. now have a look
> at that. nowhere there is it doing any "pointer funk" which would be a cause
> for unaligned accesses. what looks wrong is the bt - func params specifically
> look wrong. smells like something is inlined and gdb is getting it wrong.
> but... for now lets assume that the fixed point math above is what is
> triggering it... i dont see how. it's been there for ages. i cant read/see a
> potential unaligned access. unless the source inputs like params pointer is
> wrong or desc. they are pointing to unaligned data. i'd find that most 
> peculiar
> if they were.
> 
>> Hi,
>>
>> As told on IRC, when i run elementary_test, I get plenty of Alignment
>> trap errors in dmesg. It also takes 3 minutes to start it up on an HP
>> Ipaq h2200.
>>
>> I tried to debug the problem with gdb, and this is what I got. If not
>> enough info please ask me for more. I'm ready to learn how to really
>> give you good debug info :-)
>>
>> versions are all svn 54526
>>
>> Linux h2200 2.6.21-hh20 #1 PREEMPT Fri Dec 25 06:15:37 CET 2009 armv5tel
>> unknown
>>
>> [ 3412.430000] Alignment trap: elementary_test (1341) PC=0x4042bbe0
>> Instr=0xe1c581d0 Address=0x00140f64 FSR 0x013
>>
>> Program received signal SIGINT, Interrupt.
>> _edje_part_recalc_single_aspect (ed=0x0, ep=0xfffffffb, desc=0x0,
>>     chosen_desc=0x142614, rel1_to_x=0x57, rel1_to_y=0x0,
>> rel2_to_x=0x4048df10,
>>     rel2_to_y=0x2f6d6c65, confine_to=0x0, params=0x6574692f) at
>> edje_calc.c:607
>> 607  edje_calc.c: No such file or directory.
>>      in edje_calc.c
>>
>> (gdb) l *0x04042bbe0
>> 0x4042bbe0 is in _edje_part_recalc_single (edje_calc.c:604).
>> 599  in edje_calc.c
>>
>> Hope this helps
>>
>>
>> ------------------------------------------------------------------------------
>> Lotusphere 2011
>> Register now for Lotusphere 2011 and learn how
>> to connect the dots, take your collaborative environment
>> to the next level, and enter the era of Social Business.
>> http://p.sf.net/sfu/lotusphere-d2d
>> _______________________________________________
>> enlightenment-devel mailing list
>> enlightenment-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
>>
> 
> 

hmmm :-(

this is the procedure i follow to give the information:
If I start gdb elementary_test, the program runs and gdb doesn't stop,
but looking at dmesg i see the alignment traps happen.

So i
- start elementary_test
- start gdb
- look to dmesg to get pid and address
- attach <pid>
- l *<address>

and then i get the output i gave you.

Is my procedure wrong? do I have to add something else?
i always get the same output, except for the line numbers:
<address> is in _edje_part_recalc_single (edje_calc.c:***).
>> ***  in edje_calc.c



------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to