summaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/mach/hurd/jmp-unwind.c18
-rw-r--r--sysdeps/unix/sysv/linux/sys/param.h40
2 files changed, 42 insertions, 16 deletions
diff --git a/sysdeps/mach/hurd/jmp-unwind.c b/sysdeps/mach/hurd/jmp-unwind.c
index f7540f0dde..822501f8e5 100644
--- a/sysdeps/mach/hurd/jmp-unwind.c
+++ b/sysdeps/mach/hurd/jmp-unwind.c
@@ -22,6 +22,11 @@ Cambridge, MA 02139, USA. */
#include <hurd/userlink.h>
#include <assert.h>
+
+#ifndef _JMPBUF_UNWINDS
+ #error "sysdeps/MACHINE/jmp_buf.h fails to define _JMPBUF_UNWINDS"
+#endif
+
/* This function is called by `longjmp' (with its arguments) to restore
active resources to a sane state before the frames code using them are
jumped out of. */
@@ -31,17 +36,20 @@ _longjmp_unwind (jmp_buf env, int val)
{
struct hurd_sigstate *ss = _hurd_self_sigstate ();
struct hurd_userlink *link;
+ struct hurd_signal_preempter **p;
/* All access to SS->active_resources must take place inside a critical
section where signal handlers cannot run. */
__spin_lock (&ss->lock);
assert (! ss->critical_section);
ss->critical_section = 1;
- __spin_unlock (&ss->lock);
-#ifndef _JMPBUF_UNWINDS
- #error "sysdeps/MACHINE/jmp_buf.h fails to define _JMPBUF_UNWINDS"
-#endif
+ /* Remove local signal preempters being unwound past. */
+ while (ss->preempters &&
+ _JMPBUF_UNWINDS (env[0].__jmpbuf, ss->preempters))
+ ss->preempters = ss->preempters->next;
+
+ __spin_unlock (&ss->lock);
/* Iterate over the current thread's list of active resources.
Process the head portion of the list whose links reside
@@ -59,4 +67,4 @@ _longjmp_unwind (jmp_buf env, int val)
(*link->cleanup) (link->cleanup_data, env, val);
_hurd_critical_section_unlock (ss);
-}
+}
diff --git a/sysdeps/unix/sysv/linux/sys/param.h b/sysdeps/unix/sysv/linux/sys/param.h
index a2d4984166..4950d58d38 100644
--- a/sysdeps/unix/sysv/linux/sys/param.h
+++ b/sysdeps/unix/sysv/linux/sys/param.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -23,23 +23,41 @@ Boston, MA 02111-1307, USA. */
#include <linux/limits.h>
#include <linux/param.h>
+/* BSD names for some <limits.h> values. */
+
+#define NBBY CHAR_BIT
+#ifndef NGROUPS
+#define NGROUPS NGROUPS_MAX
+#endif
+#define MAXSYMLINKS SYMLOOP_MAX
+#define CANBSIZ MAX_CANON
+#define NCARGS ARG_MAX
+#define MAXPATHLEN PATH_MAX
+#define NOFILE OPEN_MAX
+
+
#include <sys/types.h>
+/* Bit map related macros. */
+#define setbit(a,i) ((a)[(i)/NBBY] |= 1<<((i)%NBBY))
+#define clrbit(a,i) ((a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
+#define isset(a,i) ((a)[(i)/NBBY] & (1<<((i)%NBBY)))
+#define isclr(a,i) (((a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
+/* Macros for counting and rounding. */
#ifndef howmany
-# define howmany(x, y) (((x)+((y)-1))/(y))
+#define howmany(x, y) (((x)+((y)-1))/(y))
#endif
+#define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
+#define powerof2(x) ((((x)-1)&(x))==0)
-#ifndef roundup
-# define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
-#endif
+/* Macros for min/max. */
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
-#define MAXPATHLEN PATH_MAX
-#define NOFILE OPEN_MAX
-/* Following the information of some of the kernel people I here assume
- that block size (i.e. the value of stat.st_blocks) for all filesystem
- is 512 bytes. If not tell HJ, Roland, or me. -- drepper */
+/* Unit of `st_blocks'. */
#define DEV_BSIZE 512
-#endif
+
+#endif /* sys/param.h */