Bug 88042 - 9.0/pre 9.0 libc incompatability with toupper function
9.0/pre 9.0 libc incompatability with toupper function
Product: Red Hat Linux
Classification: Retired
Component: glibc (Show other bugs)
i686 Linux
high Severity high
: ---
: ---
Assigned To: Jakub Jelinek
Brian Brock
Depends On:
  Show dependency treegraph
Reported: 2003-04-04 15:44 EST by Michael J. Lynch
Modified: 2016-11-24 09:51 EST (History)
1 user (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2003-04-07 07:51:20 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Michael J. Lynch 2003-04-04 15:44:55 EST
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 07:51:20 EDT
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.