Hi Ishai,
On 11:30 Thu 08 Jan , Ishai Rabinovitz wrote:
>
> Thanks, I applied all but the lest change (trans_id).
> Why did you make it?
ntohll() is macro (defined via bswap_64() macro), using x++ as macro
parameter is not safe - '++' can be executed more than once. Finally I'm
getting such code after srp_daemon/srp_handle_traps.c preprocessing
(gcc-4.3.2 32-bit x86):
mad_hdr->trans_id = (__extension__ ({ union { __extension__ unsigned long
long int __ll; unsigned long int __l[2]; } __w, __r; if (__builtin_constant_p
(trans_id++)) __r.__ll = ((((trans_id++) & 0xff00000000000000ull) >> 56) |
(((trans_id++) & 0x00ff000000000000ull) >> 40) | (((trans_id++) &
0x0000ff0000000000ull) >> 24) | (((trans_id++) & 0x000000ff00000000ull) >> 8) |
(((trans_id++) & 0x00000000ff000000ull) << 8) | (((trans_id++) &
0x0000000000ff0000ull) << 24) | (((trans_id++) & 0x000000000000ff00ull) << 40)
| (((trans_id++) & 0x00000000000000ffull) << 56)); else { __w.__ll =
(trans_id++); __r.__l[0] = (__extension__ ({ register unsigned int __v, __x =
(__w.__l[1]); if (__builtin_constant_p (__x)) __v = ((((__x) & 0xff000000) >>
24) | (((__x) & 0x00ff0000) >> 8) | (((__x) & 0x0000ff00) << 8) | (((__x) &
0x000000ff) << 24)); else __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); __v;
})); __r.__l[1] = (__extension__ ({ register unsigned int __v, __x =
(__w.__l[0]); if (__builtin_constant_p (__x)) __v = ((((__x) & 0xff000000) >>
24) | (((__x) & 0x00ff0000) >> 8) | (((__x) & 0x0000ff00) << 8) | (((__x) &
0x000000ff) << 24)); else __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); __v;
})); } __r.__ll; }));
Sasha
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general