0001-regression-4100-update-string-conversion-loop.patch 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. From 88714fc174b91950c9e1c53a9832fc6d4ffa6e2a Mon Sep 17 00:00:00 2001
  2. From: Etienne Carriere <etienne.carriere@linaro.org>
  3. Date: Sun, 17 Feb 2019 22:44:44 +0100
  4. Subject: [PATCH] regression 4100: update string conversion loop
  5. Change the loop used to convert string into numerical value.
  6. The original loop was fine but its implementation hits toolchain
  7. unsafe-loop-optimizations feature. The new implementation
  8. proposed here simplifies a bit the loop and prevents toolchain
  9. from complaining when directive -Werror=unsafe-loop-optimizations
  10. is enabled.
  11. Issue reported by the Buildroot cross toolchain [1] with the
  12. following error traces:
  13. build/armv7/build/optee-test-3.4.0/host/xtest/regression_4100.c:447:8: error: missed loop optimization, the loop counter may overflow [-Werror=unsafe-loop-optimizations]
  14. while (spos) {
  15. ^
  16. build/optee-test-3.4.0/host/xtest/regression_4100.c:454:6: error: missed loop optimization, the loop counter may overflow [-Werror=unsafe-loop-optimizations]
  17. if (!spos)
  18. ^
  19. [1] arm-buildroot-linux-uclibcgnueabihf-gcc.br_real (Buildroot 2019.02-git-00933-gb75e93c) 7.4.0
  20. Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
  21. ---
  22. host/xtest/regression_4100.c | 25 ++++++++++++++-----------
  23. 1 file changed, 14 insertions(+), 11 deletions(-)
  24. diff --git a/host/xtest/regression_4100.c b/host/xtest/regression_4100.c
  25. index b477f38..88346d4 100644
  26. --- a/host/xtest/regression_4100.c
  27. +++ b/host/xtest/regression_4100.c
  28. @@ -445,21 +445,24 @@ static TEEC_Result convert_from_string(ADBG_Case_t *c, TEEC_Session *s,
  29. return TEEC_ERROR_OUT_OF_MEMORY;
  30. while (spos) {
  31. - spos--;
  32. - nibble = digit_value(str[spos]);
  33. - if (nibble == -1)
  34. + nibble = digit_value(str[spos - 1]);
  35. + if (nibble == -1) {
  36. + spos--;
  37. break;
  38. + }
  39. os[ospos] = nibble;
  40. - if (!spos)
  41. - break;
  42. + if (spos > 1) {
  43. + nibble = digit_value(str[spos - 2]);
  44. + if (nibble == -1) {
  45. + spos -= 2;
  46. + break;
  47. + }
  48. + os[ospos] |= nibble << 4;
  49. + ospos--;
  50. + spos--;
  51. + }
  52. spos--;
  53. - nibble = digit_value(str[spos]);
  54. - if (nibble == -1)
  55. - break;
  56. -
  57. - os[ospos] |= nibble << 4;
  58. - ospos--;
  59. }
  60. if (spos)
  61. --
  62. 2.20.1