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