Skip to content

Commit

Permalink
[NFC][sanitizer] Switch to gnu_get_libc_version (llvm#108724)
Browse files Browse the repository at this point in the history
`gnu_get_libc_version` unlike `confstr` is not
intercepted. We should be able to use this
function earier.

Looks like we use `confstr` staring from
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60038
but there is no specific reason to refer it over
`gnu_get_libc_version`.
  • Loading branch information
vitalybuka authored Sep 16, 2024
1 parent bc54e56 commit 69f3244
Showing 1 changed file with 8 additions and 10 deletions.
18 changes: 8 additions & 10 deletions compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@
# include <sys/resource.h>
# include <syslog.h>

# ifdef SANITIZER_GLIBC
# include <gnu/libc-version.h>
# endif

# if !defined(ElfW)
# define ElfW(type) Elf_##type
# endif
Expand Down Expand Up @@ -198,17 +202,11 @@ bool SetEnv(const char *name, const char *value) {

__attribute__((unused)) static bool GetLibcVersion(int *major, int *minor,
int *patch) {
# ifdef _CS_GNU_LIBC_VERSION
char buf[64];
uptr len = confstr(_CS_GNU_LIBC_VERSION, buf, sizeof(buf));
if (len >= sizeof(buf))
return false;
buf[len] = 0;
static const char kGLibC[] = "glibc ";
if (internal_strncmp(buf, kGLibC, sizeof(kGLibC) - 1) != 0)
return false;
const char *p = buf + sizeof(kGLibC) - 1;
# ifdef SANITIZER_GLIBC
const char *p = gnu_get_libc_version();
*major = internal_simple_strtoll(p, &p, 10);
// Caller does not expect anything else.
CHECK_EQ(*major, 2);
*minor = (*p == '.') ? internal_simple_strtoll(p + 1, &p, 10) : 0;
*patch = (*p == '.') ? internal_simple_strtoll(p + 1, &p, 10) : 0;
return true;
Expand Down

0 comments on commit 69f3244

Please sign in to comment.