[Top][All Lists]

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

[MLB] Linux fails test 'mdemo-exec.test' with Segmentation fault!

From: Robert Boehne
Subject: [MLB] Linux fails test 'mdemo-exec.test' with Segmentation fault!
Date: Mon, 18 Dec 2000 15:00:09 -0600

On Linux (Redhat 6.2) one of the test cases
(the second execution of mdemo-exec.test) is failing with
the current CVS version of libtool.  The problems is a segmentation
fault coming from ltdl.c in the function lt_dlexit.  The following 
debugging session shows that when on line 1117, the pointer 'cur'
is incremented to the next structure, it's value becomes 0, then
it is accessed in LT_DLIS_RESIDENT (cur), which results in
a segmentation fault.
  I assume that all that needs to be done to fix this is to add a check
for a zero value after the 'cur = cur->next' statement.  Attached is
a patch that does just that.  Here is a ChangeLog entry:

2000-12-18  Robert Boehne  <address@hidden>

        * libltdl/ltdl.c (lt_dlexit): Test for a null value in 'cur'
        before accessing it.

This patch fixes the error, but as I'm not familiar with the code in
libltdl, I would like someone who is to really examine this.



icarus::/boreas/libtool/tests (154)% gdb ../mdemo/mdemo 
GNU gdb 5.0
Copyright 2000 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
welcome to change it and/or distribute copies of it under certain
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for
This GDB was configured as "i386-redhat-linux"...Warning:
/tmp_mnt/boreas/libtool/tests/@: No such file or directory.

(gdb) run ../mdemo/ ../mdemo/
Starting program: /tmp_mnt/boreas/libtool/tests/../mdemo/mdemo
../mdemo/ ../mdemo/
Welcome to GNU libtool mdemo!
** This is foolib 1 **
hello returned: 57616
hello is ok!
cos (0.0) = 1
foo1 is ok!
** This is foolib 2 **
hello returned: 57616
hello is ok!
sin (0.0) = 0
foo2 is ok!
myfunc returned: 57616
myfunc is ok!

Program received signal SIGSEGV, Segmentation fault.
lt_dlexit () at ltdl.c:1118
1118                  if (!LT_DLIS_RESIDENT (cur) && tmp->info.ref_count <= 
(gdb) where
#0  lt_dlexit () at ltdl.c:1118
#1  0x80492bf in main (argc=3, argv=0xbffff734) at main.c:173
#2  0x400379cb in __libc_start_main (main=0x8049218 <main>, argc=3,
argv=0xbffff734, init=0x8048d24 <_init>, fini=0x804b87c <_fini>,
rtld_fini=0x4000ae60 <_dl_fini>, stack_end=0xbffff72c)
    at ../sysdeps/generic/libc-start.c:92
(gdb) print cur
$1 = 0x0
(gdb) print tmp
$2 = 0x804d278
(gdb) print tmp->next
$3 = (struct lt_dlhandle_struct *) 0x0
(gdb) print handles
$4 = 0x804d278
(gdb) print initialized
$5 = 0

Robert Boehne             Software Engineer
Ricardo Software   Chicago Technical Center
TEL: (630)789-0003 x. 238
FAX: (630)789-0127
email:  address@hidden
Index: ltdl.c
RCS file: /home/cvs/libtool/libltdl/ltdl.c,v
retrieving revision
diff -u -r1.82.2.11 ltdl.c
--- ltdl.c      2000/12/16 03:19:09
+++ ltdl.c      2000/12/18 20:29:32
@@ -1115,7 +1115,7 @@
              lt_dlhandle tmp = cur;
              cur = cur->next;
-             if (!LT_DLIS_RESIDENT (cur) && tmp->info.ref_count <= level)
+             if (cur && !LT_DLIS_RESIDENT (cur) && tmp->info.ref_count <= 
                  if (lt_dlclose (tmp))

reply via email to

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