]> sourceware.org Git - glibc.git/blame - elf/dl-error.c
Sat May 6 11:06:47 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!!!";
33 longjmp (catch_env, errcode ?: -1);
34}
35
36int
421f82e5
RM
37_dl_catch_error (const char **errstring,
38 const char **objname,
39 void (*operate) (void))
d66e34cd
RM
40{
41 int errcode;
42
421f82e5 43 signalled_errstring = signalled_objname = NULL;
d66e34cd 44 errcode = setjmp (catch_env);
e4448b6f 45 (*operate) ();
d66e34cd 46 *errstring = signalled_errstring;
421f82e5 47 *objname = signalled_objname;
d66e34cd
RM
48 return *errstring ? errcode : 0;
49}
This page took 0.034442 seconds and 5 git commands to generate.