]> sourceware.org Git - glibc.git/blame - elf/dl-error.c
Mon Jun 5 04:02:26 1995 Roland McGrath <roland@churchy.gnu.ai.mit.edu>
[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);
a1a9d215
RM
46 if (errcode == 0)
47 {
48 (*operate) ();
49 return 0;
50 }
51
52 /* We get here only if we longjmp'd out of OPERATE. */
d66e34cd 53 *errstring = signalled_errstring;
421f82e5 54 *objname = signalled_objname;
a1a9d215 55 return errcode == -1 ? 0 : errcode;
d66e34cd 56}
This page took 0.034094 seconds and 5 git commands to generate.