bug-hurd
[Top][All Lists]
Advanced

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

Re: dlerror sets errno to ENOSYS


From: Diego Nieto Cid
Subject: Re: dlerror sets errno to ENOSYS
Date: Mon, 7 Mar 2016 20:45:59 -0300
User-agent: Mutt/1.5.24 (2015-08-30)

Hi

Here's another iteration of the patch. __libc_getspecific now
considers the case were pthread is not loaded except when the
containing file is being compiled for the loader.

The test case, when built without pthread, now works
approprietly:

    diego@hird:~/src/test-cases/dlopen-error$ ./main.nopthread
    0x1271b30
    shobj: (nil)
    dlerror: ./non-existent.so: cannot open shared object file: No such file or 
directory
    errno1: [40000002] No such file or directory
    errno2: [40000002] No such file or directory

However, when linked with it, dlerror still modifies the errno
variable:

    diego@hird:~/src/test-cases/dlopen-error$ ./main.pthread
    0x128d688
    shobj: (nil)
    dlerror: ./non-existent.so: cannot open shared object file: No such file or 
directory
    errno1: [40000002] No such file or directory
    errno2: [4000004e] Function not implemented

And breaking with gdb in cthread_getspecific I can confirm the
implementation provided by pthread is not being called:

    diego@hird:~/src/test-cases/dlopen-error$ gdb ./main.pthread
    GNU gdb (Debian 7.10-1+b1) 7.10
    ...
    Reading symbols from ./main.pthread...done.
    (gdb) break cthread_getspecific
    Function "cthread_getspecific" not defined.
    Make breakpoint pending on future shared library load? (y or [n]) y
    Breakpoint 1 (cthread_getspecific) pending.
    (gdb) run
    Starting program: /home/diego/src/test-cases/dlopen-error/main.pthread
    0x128d688
    [New Thread 17594.5]
    
    Breakpoint 1, cthread_getspecific (key=-1, pval=0x2003c9c)
        at ../sysdeps/mach/hurd/cthreads.c:42
    42        *pval = NULL;
    (gdb) bt
    #0  cthread_getspecific (key=-1, pval=0x2003c9c)
        at ../sysdeps/mach/hurd/cthreads.c:42
    #1  0x0109068a in __libc_getspecific (key=-1)
        at ../sysdeps/mach/hurd/cthreads.c:69
    #2  0x01034218 in __dlerror () at dlerror.c:74
    #3  0x080486ae in main (argc=1, argv=0x2003d84) at main.c:17
    (gdb)

I'm not sure what's going on. I've made some simple tests trying
to imitate the setup but weak symbols were correctly overriden.

Regards,
Diego

Attachment: unsubmitted-conditional-key-fns.diff
Description: Text Data


reply via email to

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