bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gnu ld 2.13/gcc3.2/solaris 2.8 segmentation fault


From: Nathan Bryant
Subject: Re: gnu ld 2.13/gcc3.2/solaris 2.8 segmentation fault
Date: Thu, 12 Sep 2002 16:45:24 -0400
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.0) Gecko/20020607

I've seen this problem too. The problem appears to be purely an LD bug - LD 2.13 just can't correctly create shared libraries on Solaris 2.8. It seems to create normal executables without problems, but shared libraries are corrupted in some way.


The following shell script indicates the problem.

-------------------------------snip here-----------------------------
#! /bin/sh

mkdir /tmp/t.$$  || exit 3
cd /tmp/t.$$     || exit 3

cat >main.c <<'EOF'
#include <stdio.h>
#include <dlfcn.h>

int main(void)
{
   void *handle, *sym;
   char *error;

   puts("calling dlopen");
   handle = dlopen("./dyn.so", RTLD_NOW);
   if (!handle) {
       printf("%s\n", dlerror());
       return 1;
   }

   puts("calling dlsym");
   sym = dlsym(handle, "sym");
   if ((error = dlerror()) != 0) {
       printf("%s\n", error);
       return 1;
   }
   puts("calling sym");
   ((void (*)(void))sym)();
   puts("done");
   return 0;
}
EOF

cat >dyn.c <<'EOF'
#include <stdio.h>
void sym(void)
{
   puts("in sym");
}
EOF

[ -n "$SHFLAGS" ] || SHFLAGS="-fPIC -shared"
[ -n "$CC" ]  || CC=gcc

set -x

$CC $CFLAGS $SHFLAGS dyn.c -o dyn.so
$CC $CFLAGS main.c -o main -ldl

./main || exit $?

cd /tmp
rm -rf t.$$
-------------------------------snip here-----------------------------

This script works just fine with binutils 2.12.1.  When I try it with
binutils 2.13, I get the following output:

$ sh -x test-dynload
+ mkdir /tmp/t.3027 + cd /tmp/t.3027 + cat + cat + [ -n ] SHFLAGS=-fPIC -shared + [ -n ] CC=gcc + set -x + gcc -fPIC -shared dyn.c -o dyn.so + gcc main.c -o main -ldl + ./main calling dlopen
Segmentation Fault - core dumped
+ exit 139


Here is a more detailed report:

$ CC='gcc -v' sh -x test-dynload
+ mkdir /tmp/t.3042 + cd /tmp/t.3042 + cat + cat + [ -n ] SHFLAGS=-fPIC -shared + [ -n gcc -v ] + set -x + gcc -v -fPIC -shared dyn.c -o dyn.so Reading specs from /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs
Configured with: /scratch/build-gcc487/gcc-3.2/configure --prefix=/usr/gnu 
--with-ld=/usr/gnu/bin/ld --with-as=/usr/gnu/bin/as --with-gnu-as --with-gnu-ld 
--with-local-prefix=/usr/gnu --enable-libgcj
Thread model: posix
gcc version 3.2
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/cc1 -lang-c -v -D__GNUC__=3 
-D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -Dsparc 
-Dsun -Dunix -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc__ 
-D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc 
-D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__NO_INLINE__ 
-D__STDC_HOSTED__=1 -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int 
-D__WCHAR_TYPE__=long int -D__WINT_TYPE__=long int -D__GCC_NEW_VARARGS__ 
-Acpu=sparc -Amachine=sparc dyn.c -quiet -dumpbase dyn.c -version -fPIC -o 
/var/tmp//cc7WbdCs.s
GNU CPP version 3.2 (cpplib) (sparc ELF)
GNU C version 3.2 (sparc-sun-solaris2.8)
       compiled by GNU C version 3.2.
ignoring nonexistent directory "/usr/gnu/sparc-sun-solaris2.8/include"
ignoring duplicate directory "/usr/gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/gnu/include
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/include
/usr/include
End of search list.
/usr/gnu/bin/as -V -Qy -s -K PIC -o /var/tmp//ccOLQtaT.o /var/tmp//cc7WbdCs.s
GNU assembler version 2.13 (sparc-sun-solaris2.8) using BFD version 2.13
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/collect2 -V -G -dy -z text -Y 
P,/usr/ccs/lib:/usr/lib -Qy -o dyn.so 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crti.o /usr/ccs/lib/values-Xa.o 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtbegin.o 
-L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2 
-L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../../../sparc-sun-solaris2.8/lib
 -L/usr/ccs/bin -L/usr/ccs/lib 
-L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../.. /var/tmp//ccOLQtaT.o 
-lgcc_s -lgcc_s /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtend.o 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtn.o
GNU ld version 2.13
 Supported emulations:
  elf32_sparc
  elf64_sparc
+ gcc -v main.c -o main -ldl Reading specs from /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/specs
Configured with: /scratch/build-gcc487/gcc-3.2/configure --prefix=/usr/gnu 
--with-ld=/usr/gnu/bin/ld --with-as=/usr/gnu/bin/as --with-gnu-as --with-gnu-ld 
--with-local-prefix=/usr/gnu --enable-libgcj
Thread model: posix
gcc version 3.2
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/cc1 -lang-c -v -D__GNUC__=3 
-D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -Dsparc 
-Dsun -Dunix -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc__ 
-D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -D__PRAGMA_REDEFINE_EXTNAME -D__sparc 
-D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__NO_INLINE__ 
-D__STDC_HOSTED__=1 -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int 
-D__WCHAR_TYPE__=long int -D__WINT_TYPE__=long int -D__GCC_NEW_VARARGS__ 
-Acpu=sparc -Amachine=sparc main.c -quiet -dumpbase main.c -version -o 
/var/tmp//ccWRaICW.s
GNU CPP version 3.2 (cpplib) (sparc ELF)
GNU C version 3.2 (sparc-sun-solaris2.8)
       compiled by GNU C version 3.2.
ignoring nonexistent directory "/usr/gnu/sparc-sun-solaris2.8/include"
ignoring duplicate directory "/usr/gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/gnu/include
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/include
/usr/include
End of search list.
/usr/gnu/bin/as -V -Qy -s -o /var/tmp//ccW2yqXV.o /var/tmp//ccWRaICW.s
GNU assembler version 2.13 (sparc-sun-solaris2.8) using BFD version 2.13
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/collect2 -V -Y 
P,/usr/ccs/lib:/usr/lib -Qy -o main 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crt1.o 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crti.o /usr/ccs/lib/values-Xa.o 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtbegin.o 
-L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2 
-L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../../../sparc-sun-solaris2.8/lib
 -L/usr/ccs/bin -L/usr/ccs/lib 
-L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/../../.. /var/tmp//ccW2yqXV.o 
-ldl -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtend.o 
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.8/3.2/crtn.o
GNU ld version 2.13
 Supported emulations:
  elf32_sparc
  elf64_sparc
+ ./main calling dlopen
Segmentation Fault - core dumped
+ exit 139





reply via email to

[Prev in Thread] Current Thread [Next in Thread]