http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58996
--- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Not everything in glibc headers is meant for use by other packages, some symbols in there are just implementation details that can change any time. The affinity support is complicated, as it has changed several times in the history. There are glibc 2.3.3 (2003-ish) versions of the APIs without size parameters and 2.3.4 (2004-ish) versions of the APIs with size parameter, and the macros changed several times, with the last API changes in glibc 2.7 (2007-ish). So, ideally you want to grab glibc 2.3.2, glibc 2.3.3, glibc 2.3.4, glibc 2.5, glibc 2.6, glibc 2.7 headers and test against all those. You want to support more than 1024 CPUs in the masks too, at least for building with sufficiently new glibc, handle the case when there is no affinity support in glibc at all (or there is, but it fails at runtime because e.g. kernel is too old), and depending on what versions of headers you want to handle (there are still long time support distros with e.g. glibc 2.5) use either the non-_S or _S macros.