]> sourceware.org Git - glibc.git/blame - elf/dl-error.c
(server-interfaces): Removed notify and device_reply. For shlibs with eager binding...
[glibc.git] / elf / dl-error.c
CommitLineData
d66e34cd
RM
1/* Error handling for runtime dynamic linker.
2Copyright (C) 1995 Free Software Foundation, Inc.
3This file is part of the GNU C Library.
4
5The GNU C Library is free software; you can redistribute it and/or
6modify it under the terms of the GNU Library General Public License as
7published by the Free Software Foundation; either version 2 of the
8License, or (at your option) any later version.
9
10The GNU C Library is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13Library General Public License for more details.
14
15You should have received a copy of the GNU Library General Public
16License along with the GNU C Library; see the file COPYING.LIB. If
17not, write to the Free Software Foundation, Inc., 675 Mass Ave,
18Cambridge, MA 02139, USA. */
19
20#include <stddef.h>
21#include <link.h>
22#include <setjmp.h>
23
24static jmp_buf catch_env;
421f82e5 25static const char *signalled_errstring, *signalled_objname;
d66e34cd
RM
26
27void
421f82e5
RM
28_dl_signal_error (int errcode,
29 const char *objname,
30 const char *errstring)
d66e34cd
RM
31{
32 signalled_errstring = errstring ?: "DYNAMIC LINKER BUG!!!";
273d56ce 33 signalled_objname = objname;
d66e34cd
RM
34 longjmp (catch_env, errcode ?: -1);
35}
36
37int
421f82e5
RM
38_dl_catch_error (const char **errstring,
39 const char **objname,
40 void (*operate) (void))
d66e34cd
RM
41{
42 int errcode;
43
421f82e5 44 signalled_errstring = signalled_objname = NULL;
d66e34cd 45 errcode = setjmp (catch_env);
e4448b6f 46 (*operate) ();
d66e34cd 47 *errstring = signalled_errstring;
421f82e5 48 *objname = signalled_objname;
d66e34cd
RM
49 return *errstring ? errcode : 0;
50}
This page took 0.033974 seconds and 5 git commands to generate.