Bug 88042

Summary: 9.0/pre 9.0 libc incompatability with toupper function
Product: [Retired] Red Hat Linux Reporter: Michael J. Lynch <mlynch>
Component: glibcAssignee: Jakub Jelinek <jakub>
Status: CLOSED NOTABUG QA Contact: Brian Brock <bbrock>
Severity: high Docs Contact:
Priority: high    
Version: 9CC: fweimer
Target Milestone: ---   
Target Release: ---   
Hardware: i686   
OS: Linux   
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2003-04-07 11:51:20 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:

Description Michael J. Lynch 2003-04-04 20:44:55 UTC
Description of problem:

Incompatability between software written and compiled on pre 9.0 Redhat linux 
and then final linked to C library on 9.0 and vis versa.  Specifically the 
toupper (and likely tolower) function.  If an object module using the toupper 
function is created on a pre 9.0 Redhat system and the subsequent link step is 
performed on a Redhat 9.0 system to produce an executable, the link will fail 
with unresolved symbol "__ctype_toupper".

This "performing the final link on the target" is how the software from our 
company is installed on target machines because many of our customers use many 
different versions of linux and we need to link against the C library on the 
target machine.  Additionally, many of our customers can not change their 
systems because it involves long, expensive certification processes so we must 
maintain compability with older systems.  Compiling on Redhat 9.0 with this 
problem does not allow us to maintain backward compatability with older 
systems.  Likewise, compiling on our older system does not allow use of Redhat 
9.0 by our customers.

Version-Release number of selected component (if applicable):

How reproducible:
Easily reproducible

Steps to Reproduce:
1.  Write C program that uses toupper and compile to .o on pre 9.0 (I'm not 
sure how pre 9.0 it has to be)
2.  Using 9.0, perform final link using .o produced above
3.  Link fails because __ctype_toupper does not exist on 9.0
4.  Compile to .o on 9.0
5.  Using pre 9.0, perform final link using .o produced in step 4.
6.  Link fails because __ctype_toupper_loc does not exist on pre 9.0

Actual results:
unresolved symbol __ctype_toupper

Expected results:
link success

Additional info:
It appears that __ctype_toupper, __ctype_tolower, and __ctype_b no longer exist 
in libc

Comment 1 Jakub Jelinek 2003-04-07 11:51:20 UTC
This is misunderstanding what compatibility is and is not being provided.
Compatibility through symbol versioning is maintained for compiled programs
and shared libraries, compiling on one system and linking the resulting
object files / .a libraries on another system version is not supported.