Hi Max,
Max Filippov wrote,
> Loops with 'loop forever' annotation inside strcmp are actually meant to
> loop forever. Falling through the end of the first loop may result in
> equal strings being compared unequal, e.g.:
>
> #include <string.h>
>
> int main(void)
> {
> char a[4096] __attribute__((aligned(4)));
> char b[4096] __attribute__((aligned(4)));
>
> memset(a, ' ', 258 * 8);
> memset(b, ' ', 258 * 8);
> a[255 * 8] = 0;
> a[256 * 8] = 'a';
> b[255 * 8] = 0;
> b[256 * 8] = 'b';
> return !(strcmp(a, b) == 0);
> }
>
> Falling through the end of the second loop may result in unequal strings
> being compared as equal, e.g.:
>
> #include <string.h>
>
> int main(void)
> {
> char a[4096] __attribute__((aligned(4)));
> char b[4096] __attribute__((aligned(4)));
>
> memset(a, ' ', 514 * 6);
> memset(b, ' ', 514 * 6);
> a[514 * 6 + 0] = 'a';
> a[514 * 6 + 1] = 0;
> b[514 * 6 + 0] = 'b';
> b[514 * 6 + 1] = 0;
> return !(strcmp(a, b) != 0);
> }
>
> Use 0 as a loop counter to make 2^32 - 1 iterations which is enough to
> cover all addressable memory. While at it drop useless nop at the end of
> the first loop and use a11 for all loop counters.
>
> Signed-off-by: Max Filippov <[email protected]>
> ---
> Changes v1->v2:
> - wrong test case for the second loop, fixed.
>
Applied and pushed,
thx
Waldemar
_______________________________________________
devel mailing list
[email protected]
https://mailman.uclibc-ng.org/cgi-bin/mailman/listinfo/devel