https://qa.mandrakesoft.com/show_bug.cgi?id=602

           Product: glibc
         Component: glibc
           Summary: ld-linux.so.2 binds sys_errlist to sys_errno
           Version: 2.2.5-16mdk
          Platform: PC
        OS/Version: All
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


Sytem is installed from "Mandrake Linux release 9.0 (dolphin)" CDs

Expected output:
sys_errlist[2]: No such file or directory

Current output:
bogus sys_errlist

Details:

$ cat main.c
int main()
{
    return test();
}

$ cat junk2.c
#include <stdio.h>

test()
{
    const char *s = sys_errlist[2];
    if (s) {
        printf("sys_errlist[2]: %s\n", s);
    } else {
        fprintf(stderr, "bogus sys_errlist\n");
        return 1;
    }
    return 0;
}

$ gcc -g -c -fPIC junk2.c
$ ld -shared -o junk2.so junk2.o
$ gcc -g main.c ./junk2.so
$ ./a.out
bogus sys_errlist

$ gdb a.out
GNU gdb 5.2.1-2mdk (Mandrake Linux)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i586-mandrake-linux-gnu"...
(gdb) b main
Breakpoint 1 at 0x80484a6: file main.c, line 3.
(gdb) r

Breakpoint 1, main () at main.c:3
3           return test();
(gdb) step
test () at junk2.c:5
5           const char *s = sys_errlist[2];
(gdb) x/10i $pc
0x400133c6 <test+18>:   mov    0x14(%ebx),%eax
0x400133cc <test+24>:   mov    0x8(%eax),%edx
0x400133cf <test+27>:   mov    %edx,0xfffffffc(%ebp)
0x400133d2 <test+30>:   cmpl   $0x0,0xfffffffc(%ebp)
0x400133d6 <test+34>:   je     0x400133f2 <test+62>
0x400133d8 <test+36>:   add    $0xfffffff8,%esp
0x400133db <test+39>:   mov    0xfffffffc(%ebp),%eax
0x400133de <test+42>:   push   %eax
0x400133df <test+43>:   lea    0xffffef47(%ebx),%edx
0x400133e5 <test+49>:   mov    %edx,%eax
(gdb) stepi
(gdb) p/a $eax
$1 = 0x4013c0e0 <sys_siglist>
(gdb) ### should have been sys_errlist !!!
(gdb) n
6           if (s) {
(gdb) p s
$2 = 0x0
(gdb) p &sys_errlist
$4 = (<data variable, no debug info> *) 0x4013eb60
(gdb) x/3x 0x4013eb60
0x4013eb60 <sys_errlist>:       0x401369d3      0x401369db      0x401369f3
(gdb) x/s 0x401369f3
0x401369f3 <in6addr_loopback+8011>:      "No such file or directory"
(gdb) c
bogus sys_errlist

Program exited with code 01.
(gdb) quit

Workaround: relinking junk2.so with '-lc' magically cures the bug:

$ ld -shared -o junk2.so junk2.o -lc
$ ./a.out
sys_errlist[2]: No such file or directory



------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

Reply via email to