Subject: Re: CVS commit: src/include
To: None <M.Drochner@fz-juelich.de>
From: Christos Zoulas <christos@zoulas.com>
List: source-changes
Date: 01/05/2005 12:49:12
On Jan 5,  2:54pm, M.Drochner@fz-juelich.de (Matthias Drochner) wrote:
-- Subject: Re: CVS commit: src/include

| 
| christos@NetBSD.org said:
| > Modified Files:
| > 	src/include: signal.h
| > Log Message: Provide forward struct declarations for struct
| > sigcontext*;
| 
| As I see it, this should be done more radically.
| sigreturn() isn't supported for compilation from source
| anymore - it is just present for binary comaptibility in
| conjunction with a COMPAT_16 kernel. So neither sigreturn()
| nor sigcontext need to be exported to user programs.
| It might remain within __LIBC12_SOURCE__, but even that
| is unnecessary because there are only assembler stubs
| which implement sigreturn().
| (Actually, I missed that __HAVE_SIGINFO when I did some
| cleanup last year.)
| 
| > this will allow us to get rid of them in the machine/
| > signal.h files. 
| 
| What's the plan? I agree that the sigcontext defs are
| unnecessary outside of compat code.

My plan was (and you can modify it and implement it):

1. Make sure that the struct sigcontext* in the kernel MD files is
   only defined when (COMPAT_16 || _LIBC) is. It is unfortunate that
   we have to do this, but there is no way around it because of
   setjmp/longjmp.

2. Change signal.h to:

#ifdef _LIBC
struct sigcontext;
#ifdef __LIBC12_SOURCE__
struct sigcontext13;
int     sigreturn __P((struct sigcontext13 *));
int     __sigreturn14 __P((struct sigcontext *));
#else
int     sigreturn __P((struct sigcontext *)) __RENAME(__sigreturn14);
#endif          
#endif

So that sigreturn is only visible in libc. Even changing
'struct sigcontext.* \*' to 'void \*' should work since
libc does not need to know about the guts of sigcontext.

What do you think?

christos