On Mon, Dec 24, 2012 at 04:59:59PM +0400, Alexey Tourbin wrote: > On Mon, Dec 24, 2012 at 04:42:46PM +0400, Gleb Fotengauer-Malinovskiy wrote: > > On Mon, Dec 24, 2012 at 04:05:23PM +0400, Alexey Tourbin wrote: > > > [builder@people ~]$ /usr/lib/rpm/setcmp set:kdSxWgTyZxEcQx104N1sOQPFrBU4hMyJgswBQdypWl99UkQfZ7FfVfLes8xXStDq2ZBO04AhAjro2klgZ3IPusa9PpeHQCT4xiF5vDAsf0PvkfkbHFKHGGYt7lk6gVuQUZg05tAONMVt1 set:jhK9a5Z0 > > > -2 > > > [builder@people ~]$ > > > > > > Похоже на проблему перекодирования в меньшую битность (в данном > > > случае set:k > set:j). Кажется, нашел ошибку, только теперь не знаю, > > > как проверить - хешер не заводится. > > > > У меня завёлся hasher на i586, в нём собрался rpm с этим патчем. > > C этим rpm и corosync собирается и: > > > > [builder@people .in]$ /usr/lib/rpm/setcmp set:kdSxWgTyZxEcQx104N1sOQPFrBU4hMyJgswBQdypWl99UkQfZ7FfVfLes8xXStDq2ZBO04AhAjro2klgZ3IPusa9PpeHQCT4xiF5vDAsf0PvkfkbHFKHGGYt7lk6gVuQUZg05tAONMVt1 set:jhK9a5Z0 > > 1 > > Да, теперь работает. > 4.0.4-alt100.58-1-gf25f962 Спасибо, отправил в Сизиф под именем 4.0.4-alt100.59. > > > --- lib/set.c- > > > +++ lib/set.c > > > @@ -1107,8 +1107,8 @@ int rpmsetcmp(const char *str1, const ch > > > int c1 = cache_decode_set(str1, Mshift1, &v1); > > > if (c1 < 0) > > > return -3; > > > - unsigned v1bufA[c1 + 1]; > > > - unsigned v1bufB[c1 + 1]; > > > + unsigned v1bufA[c1 + SENTINELS]; > > > + unsigned v1bufB[c1 + SENTINELS]; > > > // decode set2 (on the stack) > > > int len2 = strlen(str2); > > > int c2 = decode_set_size(len2, Mshift2); Хотел бы я знать, почему без этого патча код работает на x86-64, а также на x86, будучи собранным gcc-4.5; чудеса оптимизации, наверное. -- ldv