Bug 74781

Summary: compat-egcs needs better documention on usage
Product: [Retired] Red Hat Linux Reporter: Eric Ding <w7alc7r02>
Component: compat-egcsAssignee: Jakub Jelinek <jakub>
Status: CLOSED WONTFIX QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 7.3   
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2004-10-03 19:06:42 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Eric Ding 2002-10-01 16:30:44 UTC
From Bugzilla Helper:
User-Agent: Mozilla/5.0 Galeon/1.2.5 (X11; Linux i686; U;) Gecko/20020606

Description of problem:
When compiling and linking a shared library module which references semctl
and/or shmctl, the compat-egcs package produces a shared library with
dependencies on glibc 2.2, so that the library can't be used on RedHat 6.2.  On
RH 6.2, nm produces the following output:

         [~] nm libfoo.so | fgrep GLIBC_2.2
         U semctl@@GLIBC_2.2
         U shmctl@@GLIBC_2.2

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


How reproducible:
Always

Steps to Reproduce:
1. Write a C file with a function that reference semctl or shmctl.
2. Compile the C file, and link it into a shared library with egcs after
   running the compat-egcs compatibility script.
3. Run nm on the shared library to see the symbols.
	

Actual Results:  The shared library references GLIBC 2.2 versions of semctl and
shmctl.

Expected Results:  The shared library should have referenced either unversioned
or GLIBC 2.1 (or GLIBC 2.0?) versions of semctl and shmctl.

Additional info:

Comment 1 Eric Ding 2002-10-10 20:55:48 UTC
After a day and a half of experimentation, I've come to the conclusion that
compat-egcs is ... seriously confusing.  :)  The only way I could create shared
libraries and executables that worked well on Red Hat 6.2 was to do the following:

1) run /usr/i386-glibc21-linux/bin/i386-glibc21-linux.sh to set the LDEMULATION
   and GCC_EXEC_PREFIX environment variables correctly.
2) compile and link with gcc 2.96 driving, *not* with egcs.  So with a simple
   program, I'd compile as follows:

   gcc -c test.c
   
3) When compiling C++ programs, I found that gcc 2.96 was not passing a flag
   that the egcs subprograms expected, namely __cplusplus.  So when compiling
   a C++ program, I have to do:

   g++ -D__cplusplus test.c

   and then...

4) I found that I have to actually use gcc 2.96 to link, *not* egcs as I had
   expected.  The latter simply fails to work because it's using the wrong
   object files/libraries when compiling.  So again, the possibilities might
   be:

   gcc -o test test.o
   gcc -shared -o libtest.so test.o
   gcc -shared -o libtest.so test.o -lstdc++
   g++ -shared -o libtest.so test.o

All of this leads me to wonder whether compat-egcs has been thoroughly tested
(never mind that it's completely undocumented...).  Have I come to the correct
conclusions, or not?

Comment 2 Eric Ding 2002-10-10 21:48:27 UTC
Or... just use i386-glibc21-linux-gcc and i386-glibc21-linux-c++.  I shoulda
guessed.  Or should I have?  Can someone write documentation for this stuff, please?

Comment 3 Jakub Jelinek 2004-10-03 19:06:42 UTC
compat-egcs is not included in the distribution any longer.