From 72ec66bd8641951cd10fdfbef48f0fe1cabb7ed9 Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Mon, 11 Sep 2023 00:39:51 +0200 Subject: [PATCH] lib/tests: 50-compare-rotated-weird.c: Add test for RV reloc We detected the value in off64 in the test is not -1 as it should but 56 ones. This is because the rotation is applied as unsigned even with the signed cast. This breaks many things in tcc. * lib/tests/scaffold/50-compare-rotated-weird.c: New file. * build-aux/check-mescc.sh (mes_tests): Add it. --- build-aux/check-mescc.sh | 1 + lib/tests/scaffold/50-compare-rotated-weird.c | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 lib/tests/scaffold/50-compare-rotated-weird.c diff --git a/build-aux/check-mescc.sh b/build-aux/check-mescc.sh index 5fd89a1e..fb6557b8 100755 --- a/build-aux/check-mescc.sh +++ b/build-aux/check-mescc.sh @@ -107,6 +107,7 @@ lib/tests/scaffold/47-function-expression.c lib/tests/scaffold/48-global-static.c lib/tests/assert/50-assert.c lib/tests/mes/50-itoa.c +lib/tests/scaffold/50-compare-rotated-weird.c lib/tests/posix/50-getenv.c lib/tests/stdlib/50-malloc.c lib/tests/string/50-memcmp.c diff --git a/lib/tests/scaffold/50-compare-rotated-weird.c b/lib/tests/scaffold/50-compare-rotated-weird.c new file mode 100644 index 00000000..bd354891 --- /dev/null +++ b/lib/tests/scaffold/50-compare-rotated-weird.c @@ -0,0 +1,40 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2023 Ekaitz Zarraga + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +#include +#include +#include + +int +main () +{ + uint64_t val = 0x27c1c; + uint64_t addr = 0x28bb4; + uint64_t off64 = (int64_t)((int64_t)(val - addr + 0x800) >> 12); + uint64_t cond = (off64 + ((uint64_t)1 << 20)) >> 21; + if (cond) + { + eputs ("failure: "); + eputs (itoa (cond)); + eputs ("\n"); + return 2; + } + return 0; +}