My reading of POSIX is that if SEM_VALUE_MAX is to be defined, then it should be exposed via <limits.h>. Glibc currently defines if via <semaphore.h> (bits/semaphore.h) as 2^31-1, but not via <limits.h>. It should do the latter, IMO.
Fixed in cvs.