Bug 88042 - 9.0/pre 9.0 libc incompatability with toupper function
Summary: 9.0/pre 9.0 libc incompatability with toupper function
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: glibc
Version: 9
Hardware: i686
OS: Linux
Target Milestone: ---
Assignee: Jakub Jelinek
QA Contact: Brian Brock
Depends On:
TreeView+ depends on / blocked
Reported: 2003-04-04 20:44 UTC by Michael J. Lynch
Modified: 2016-11-24 14:51 UTC (History)
1 user (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Last Closed: 2003-04-07 11:51:20 UTC

Attachments (Terms of Use)

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.

Note You need to log in before you can comment on or make changes to this bug.