elf: add test for dl-printf

This patch checks _dl_debug_vdprintf, by passing various inputs to
_dl_dprintf and comparing the output with invocations of snprintf.

Signed-off-by: Roy Eldar <royeldar0@gmail.com>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
This commit is contained in:
Roy Eldar 2023-05-25 17:41:59 +03:00 committed by Florian Weimer
parent dae8015273
commit d2b1af4305
2 changed files with 79 additions and 0 deletions

View File

@ -275,6 +275,7 @@ tests-static-normal := \
tests-static-internal := \ tests-static-internal := \
tst-dl_find_object-static \ tst-dl_find_object-static \
tst-dl-printf-static \
tst-ptrguard1-static \ tst-ptrguard1-static \
tst-stackguard1-static \ tst-stackguard1-static \
tst-tls1-static \ tst-tls1-static \

View File

@ -0,0 +1,78 @@
/* Check _dl_debug_vdprintf.
Copyright The GNU Toolchain Authors.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <ldsodefs.h>
#include <limits.h>
#include <stdarg.h>
#include <stdio.h>
#include <support/check.h>
#include <support/xunistd.h>
#define BUFSZ 64
#define TEST(fmt, ...) \
do \
{ \
char str1[BUFSZ], str2[BUFSZ]; \
int len1 = snprintf (str1, BUFSZ, fmt, __VA_ARGS__); \
TEST_VERIFY_EXIT (len1 >= 0); \
TEST_VERIFY_EXIT (len1 < BUFSZ); \
_dl_dprintf (fds[1], fmt, __VA_ARGS__); \
ssize_t len2 = read (fds[0], str2, BUFSZ); \
TEST_VERIFY_EXIT (len2 >= 0); \
TEST_VERIFY_EXIT (len2 < BUFSZ); \
str2[len2] = '\0'; \
TEST_COMPARE_STRING (str1, str2); \
} \
while (0)
static int
do_test (void)
{
int fds[2];
xpipe (fds);
TEST ("%d", 0);
TEST ("%d", 1);
TEST ("%d", INT_MAX);
TEST ("%d", -1);
TEST ("%d", INT_MIN + 1);
TEST ("%d", INT_MIN);
TEST ("%u", 0U);
TEST ("%u", 1U);
TEST ("%u", UINT_MAX);
TEST ("%x", 0);
TEST ("%x", 1);
TEST ("%x", UINT_MAX);
TEST ("%ld", 0L);
TEST ("%ld", 1L);
TEST ("%ld", LONG_MAX);
TEST ("%ld", -1L);
TEST ("%ld", LONG_MIN + 1);
TEST ("%ld", LONG_MIN);
TEST ("%lu", 0UL);
TEST ("%lu", 1UL);
TEST ("%lu", ULONG_MAX);
TEST ("%lx", 0UL);
TEST ("%lx", 1UL);
TEST ("%lx", ULONG_MAX);
xclose (fds[0]);
xclose (fds[1]);
return 0;
}
#include <support/test-driver.c>