IMHO, there is no need for versioning. Moreover it wouldn't be sufficient.
You must versioning the affected interfaces, otherwise you will never
be able to remove the compatibility code.
Imagine function in a shared library foo which takes as argument
pthread_mutex_t and does usual:
pthread_mutex_lock()
do some work
pthread_mutex_unlock()
And a program bar, which uses foo. Inside bar is a static initialized lock.
The foo might be (re)compiled against NPTL, while bar would be still
compiled against LT. Therefore check_and_reset() should be called as long as
any installed (debian) package have not been recompiled against NPTL. The
overhead of check_and_reset() looks very small, it should be no problem at
all. The harder part is to determine each place, where
check_and_reset() should be called. It have to be in all places,
where static initialized lock might be passed for the 1st time,
i.e. it should be in pthread_mutex_lock(), but not in
pthread_mutex_unlock().
Yes, certainly, this is a valid case.
Any function that manipulates a changed structure needs to be versioned.
Eventually, one day, debian hppa will configure glibc with
--enable-oldest-abi at a high enough value that the compat code will
be dropped (because we have proved no package needs it and we have an
upgrade path).
Do you have any other concerns?