http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60038
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #6) BTW, you could supposedly use #include <unistd.h> ... char buf[64]; size_t len = confstr (_CS_GNU_LIBC_VERSION, buf, sizeof buf); int result = if (strncmp (buf, "glibc 2.", 8) == 0) { char *end; int minor = strtoul (buf + 8, &end, 10); if (end != buf + 8 && (*end == '\0' || *end == '.') { if (minor <= 3) kThreadDescriptorSize = FIRST_32_SECOND_64(1104, 1696); else if (minor == 4) kThreadDescriptorSize = FIRST_32_SECOND_64(1120, 1728); else if (minor == 5) kThreadDescriptorSize = FIRST_32_SECOND_64(1136, 1728); else if (minor <= 9) kThreadDescriptorSize = FIRST_32_SECOND_64(1136, 1712); else if (minor == 10) kThreadDescriptorSize = FIRST_32_SECOND_64(1168, 1776); else if (minor <= 12) kThreadDescriptorSize = FIRST_32_SECOND_64(1168, 2288); else kThreadDescriptorSize = FIRST_32_SECOND_64(1216, 2304); } }