Commit Graph

77 Commits

Author SHA1 Message Date
bde
94e0c53fb3 Fixed unsorting and splitting of SRCS in previous commit. 2002-01-11 17:10:35 +00:00
deischen
6be76bd5d6 Add getcontext, setcontext, makecontext, and swapcontext. These
functions are defined in SUSv2 and the latest POSIX spec.

Thanks to Bernd Walter <ticso@cicely8.cicely.de> for helping debug my
alpha assembly.

Approved by:	-arch
2002-01-10 02:40:59 +00:00
jhb
27c49f1fe7 Use 'mov' instead of 'lea' for setting the syscall number in %eax as that
is clearer about what we are actually doing.

Requested by:	bde
2001-11-27 20:51:26 +00:00
jhb
0ad9e3ea5d Cleanups after previous change:
- Renumber labels since the previous revision removed one.
- Remove useless and wrong comment.
  - Repeating the function name is just redundant.
  - The previous revision made the comment about %edx useless.
  - The comment about %eax was wrong (but did explain why %eax used to be
    fixed up).

Submitted by:	bde
2001-11-13 16:58:43 +00:00
jhb
7cfbcce01d The kernel already fixes up %eax for parents that return from fork, so
don't bother manually fixing up %eax for the parent process by testing
the value in %edx and zeroing and already zeroed %eax.
2001-11-13 06:36:43 +00:00
peter
8f3f1620f0 De-orbit DEFS.h - the other arches do not use it, and it got replaced
with <machine/asm.h>.

Reviewed by:	bde
2001-10-24 20:29:14 +00:00
ru
99ecf9781a Just use RSYSCALL. 2001-10-19 13:32:24 +00:00
ru
325db7b385 Removed duplicate VCS ID tags, as per style(9). 2001-08-13 14:06:34 +00:00
ru
f85a17a1d7 MAN[1-9] -> MAN. 2001-03-27 17:27:19 +00:00
deischen
d19e06365b Clean up syscall generation in libc by removing HIDDEN_SYSCALLS
and treating (almost) all system calls the same way:

	__sys_foo - actual syscall
	foo, _foo - weak definitions to __sys_foo

Change PSEUDO syscalls (currently only _exit and _getlogin) to
be __sys_foo (T) and _foo (W).

Add $FreeBSD$ to a few files to satisfy commitprep.

Suggested by:	bde
2001-01-29 03:23:46 +00:00
deischen
c8399e648f Comment only change; s/_thread_sys_/__sys_/ 2001-01-26 02:41:07 +00:00
deischen
dd8c04d769 Remove _THREAD_SAFE and make libc thread-safe by default by
adding (weak definitions to) stubs for some of the pthread
functions.  If the threads library is linked in, the real
pthread functions will pulled in.

Use the following convention for system calls wrapped by the
threads library:
	__sys_foo - actual system call
	_foo - weak definition to __sys_foo
	foo - weak definition to __sys_foo

Change all libc uses of system calls wrapped by the threads
library from foo to _foo.  In order to define the prototypes
for _foo(), we introduce namespace.h and un-namespace.h
(suggested by bde).  All files that need to reference these
system calls, should include namespace.h before any standard
includes, then include un-namespace.h after the standard
includes and before any local includes.  <db.h> is an exception
and shouldn't be included in between namespace.h and
un-namespace.h  namespace.h will define foo to _foo, and
un-namespace.h will undefine foo.

Try to eliminate some of the recursive calls to MT-safe
functions in libc/stdio in preparation for adding a mutex
to FILE.  We have recursive mutexes, but would like to avoid
using them if possible.

Remove uneeded includes of <errno.h> from a few files.

Add $FreeBSD$ to a few files in order to pass commitprep.

Approved by:	-arch
2001-01-24 13:01:12 +00:00
jake
93aa222459 Remove last vestiges of thr_sleep and thr_wakeup from libc. 2000-12-02 05:58:03 +00:00
jhb
dc3c0810ac Prefix the register argument of indirect 'jmp's with a * to make gas 2.10.x
happy.
2000-11-28 22:59:14 +00:00
bsd
374c842b90 Add a couple of debug register helper functions to assist in setting
and clearing watchpoints.

Reviewed by:	jwd@FreeBSD.org, -hackers@
2000-09-21 17:07:27 +00:00
peter
cf3847fe70 rfork(2) wrapper for simple rfork-style threads. I have lost count of
the number of times I have given this to people and got asked: why isn't
it in libc?  It is impossible to do this without assembler glue to reset
the stack for the new child process.

int rfork_thread(flags, stack_addr, start_fnc, start_arg)
int flags;                 Flags to rfork system call.  See rfork(2).
void *stack_addr;          Top of stack for thread.
int (*start_fnc)(void *);  Address of thread function to call in child.
void *start_arg;           Argument to pass to the thread function in child.

This is deliberately not documented or prototyped in includes until the
corresponding alpha version is written.
2000-07-29 07:14:04 +00:00
jasone
5a12c18356 Use assembler directives rather than ALTENTRY() so that longjmp() and
siglongjmp() are weak symbols.  This is necessary to allow static linking
with the linuxthreads library port.
2000-05-04 04:36:26 +00:00
jasone
576c454894 Take care to avoid having "strong" and "weak" symbols of the same name in
libc_r.
2000-03-16 02:14:41 +00:00
jasone
e8ddbcd7dc Undo the ill-conceived breakage of the previous commit and really fix:
For libc_r renamed syscalls, correct symbol naming from
_thread_sys_foo() <-- _foo() to _thread_sys_foo() <-- _foo() <-- foo().  This
is necessary for system calls which libc_r doesn't define foo().

Some weak symbols such as poll() are defined twice.  From what I understand,
depending on one weak symbol or the other to be used is a bad idea.  All
such weak symbols defined in the libc_r-specific code should therefore be
made strong (non-weak?).

Simplify PSEUDO() to not define any weak symbols, since they aren't ever
needed.

alpha/SYS.h:

Correct reversed usage of WEAK_ALIAS(), which has reversed arguments from
__weak_reference().  Also, fix reversal of symbols, so that syscall foo()
is a weak alias for _foo().

Add WEAK_ALIAS() call to PRSYSCALL(), which unlike the i386 version of
PRSYSCALL(), is not defined in terms of PSYSCALL().

Make PSEUDO() equivalent to the i386 version.
2000-01-29 12:50:47 +00:00
jasone
cd327890c7 For syscalls that are renamed to _thread_sys_foo, create a weak alias
called _foo, not _thread_sys_foo.
2000-01-28 22:47:21 +00:00
jasone
495ec2dee2 Simplify sytem call renaming. Instead of _foo() <-- _libc_foo <-- foo(),
just use _foo() <-- foo().  In the case of a libpthread that doesn't do
call conversion (such as linuxthreads and our upcoming libpthread), this
is adequate.  In the case of libc_r, we still need three names, which are
now _thread_sys_foo() <-- _foo() <-- foo().

Convert all internal libc usage of: aio_suspend(), close(), fsync(), msync(),
nanosleep(), open(), fcntl(), read(), and write() to _foo() instead of foo().

Remove all internal libc usage of: creat(), pause(), sleep(), system(),
tcdrain(), wait(), and waitpid().

Make thread cancellation fully POSIX-compliant.

Suggested by:	deischen
2000-01-27 23:07:25 +00:00
jasone
210e36a480 Remove unnecessary alternate entry points for *setjmp(). Make the main
entry point the standard name when not compiling libc_r (for example,
longjmp is the main entry point instead of __longjmp).

Suggested by:	bde
2000-01-20 21:58:27 +00:00
jasone
eaa6ee2770 Make minor entry point changes to support libc_r. 2000-01-19 07:01:40 +00:00
jasone
e200b118e2 Add three-tier symbol naming in support of POSIX thread cancellation
points.  For library functions, the pattern is __sleep() <--
_libc_sleep() <-- sleep().  The arrows represent weak aliases.  For
system calls, the pattern is _read() <-- _libc_read() <-- read().
2000-01-12 09:23:48 +00:00
jasone
70507f8fc1 Unbreak profiling. bde says this is not the cleanest way to fix the
problem, but that it works.

Submitted by:	bde
2000-01-04 00:02:21 +00:00
jasone
efc325068e Creating weak symbols doesn't work correctly when building an aout libc.
Doing the "right thing" here is difficult, so create two ENTRY points for
each function (for example, __setjmp and setjmp are equivalent).  This
isn't pretty, but it works for both aout and ELF.

libc symbol naming needs an overhaul in order to properly support function
wrapping, specifically in the case of a real libpthread, and these
duplicate entry points should be fixed as part of that overhaul.

Pointed out by:	bde
1999-12-24 00:03:00 +00:00
jasone
0600b44d60 Make setjmp, longjmp, sigsetjmp, and siglongjmp weak aliases for
__setjmp, __longjmp, __sigsetjmp, and __siglongjmp, respectively.
This supports cancellation in the linuxthreads port.  In the long run,
a much more comprehensive solution will necessitate more dramatic changes
to libc symbol naming, and these aliases will probably need modification
at that time.
1999-12-14 20:17:52 +00:00
marcel
7ef0f8dfda Remove osig* from NOASM. It bogus now. 1999-10-14 10:00:39 +00:00
marcel
16861d96dc \begin{quote}
setjmp() gets the jmp_buf pointer from the wrong place (the place
where the return address is) in the shlib case, and uses it (only)
to fetch the current signal mask to address (return_address + 28).
This address is normally read-only (I hope), so the sigprocmask()
call has no effect except to return an error code.
\end{quote}

Submitted by: bde
1999-10-10 08:38:33 +00:00
marcel
f6b9da6e21 Remove syscall wrappers. 1999-10-09 15:27:09 +00:00
marcel
594e4a63a8 sigset_t change (part 5 of 5)
-----------------------------

Most of the userland changes are in libc. For both the alpha
and the i386 setjmp has been changed to accomodate for the
new sigset_t. Internally, libc is mostly rewritten to use the
new syscalls. The exception is in compat-43/sigcompat.c

The POSIX thread library has also been rewritten to use the
new sigset_t. Except, that it currently only handles NSIG
signals instead of the maximum _SIG_MAXSIG. This should not
be a problem because current applications don't use any
signals higher than NSIG.

There are version bumps for the following libraries:
  libdialog
  libreadline
  libc
  libc_r
  libedit
  libftpio
  libss

These libraries either a) have one of the modified structures
visible in the interface, or b) use sigset_t internally and
may cause breakage if new binaries are used against libraries
that don't have the sigset_t change. This not an immediate
issue, but will be as soon as applications start using the
new range to its fullest.

NOTE: libncurses already had an version bump and has not been
      given one now.

NOTE: doscmd is a real casualty and has been disconnected for
      the moment. Reconnection will eventually happen after
      doscmd has been fixed. I'm aware that being the last one
      to touch it, I'm automaticly promoted to being maintainer.
      According to good taste this means that I will receive a
      badge which either will be glued or mechanically stapled,
      drilled or otherwise violently forced onto me :-)

NOTE: pcvt/vttest cannot be compiled with -traditional. The
      change cause sys/types to be included along the way which
      contains the const and volatile modifiers. I don't consider
      this a solution, but more a workaround.
1999-09-29 15:18:46 +00:00
peter
e226894fa0 $Id$ -> $FreeBSD$ 1999-08-28 00:22:10 +00:00
dt
b9568a7d64 Add wrappers for pread and pwrite syscalls. 1999-04-04 21:46:24 +00:00
luoqi
7b1a70afd5 Simplify implementation and eliminate a register preservation problem.
Reviewed by:	Bruce Evans <bde@zeta.org.au>
1998-09-18 05:50:52 +00:00
luoqi
e25d4b3653 Fix a cut 'n paste mistake. 1998-09-13 20:32:45 +00:00
dt
6c8d2b9af4 In libc_r, rename vfork syscall to _thread_sys_vfork and make vfork an alias
to fork. It is difficult to do real vfork in libc_r, since almost every
operation with file descriptsor changes _thread_fd_table and friends.

popen(3) works much better with this change.
1998-09-12 22:03:20 +00:00
bde
5fbff58806 Fixed disordering in previous commit. 1998-07-29 13:43:06 +00:00
jlemon
5f6fccb665 Add wrappers for i386_*_ioperm, i386_vm86 so userland code does
not have to call sysarch() directly.
Added man pages for above, as well as sysarch()
1998-07-28 03:33:27 +00:00
jb
e51e3f6a89 Use the thread-aware errno definition all the time. 1998-05-05 22:07:02 +00:00
jb
d6ec07b4f4 Build the syscalls (in libc, not libc_r) with weak symbols so that
libpthread can override them as required.
1998-05-05 22:06:16 +00:00
jb
96a1d834ad Oops, backout the previous change having confused my underscores.
__thread_create is a syscall that uses the default asm. It is
_thread_create that contains specific asm code, but that lives in
libpthread.
1998-04-30 10:02:44 +00:00
jb
4460aad9b5 Make cerror thread aware by calling __error() to get a pointer to the
thread-specific error variable. This change make libc use the same cerror
code that libc_r has been using.
1998-04-30 09:32:48 +00:00
jb
8d4e711fea The syscall that creates a kernel thread is coming, but it doesn't use the
default syscall asm, so add it to NOASM. The other syscalls that manipulate
kernel threads use the default asm code, so they just get built
automatically.
1998-04-30 09:30:50 +00:00
jb
5fe3d9fd50 Stop renaming these in libc_r because wrappered versions don't make sense.
PR: i386/4826, bin/5953
1998-04-29 09:14:35 +00:00
jb
eef3704a36 Nearly missed this one.
List non-default asm sources in MDASM so that they replace the defaults.

For funny or incomplete syscalls, list them in NOASM to stop them
from getting built as defaults.
1998-03-09 07:36:56 +00:00
bde
a523adad88 Removed bogus .PATH statement. 1997-10-16 14:41:25 +00:00
bde
8daeb52eb6 Removed the subdirectory paths from the definitions of MAN[1-9]. They
were a workaround for limitations in bsd.man.mk that were fixed about
2 years ago.
1997-10-16 14:26:13 +00:00
bde
3a4c116527 Moved `SRCS+= frexp.c' to the correct Makefile.inc.
Sorted SRCS.
1997-10-14 07:43:33 +00:00
jb
2be1de3772 Changed all paths to be relative to src/lib instead of src/lib/libc
so that all these makefiles can be used to build libc_r too.

Added .if ${LIB} == "c" tests to restrict man page builds to libc
to avoid needlessly building them with libc_r too.

Split libc Makefile into Makefile and Makefile.inc to allow the
libc_r Makefile to include Makefile.inc too.
1997-05-03 03:50:06 +00:00
bde
629116b460 Fixed long lines.
Removed unused macros CALL() and ASMSTR.

Reviewed by:	jdp
1997-04-19 17:05:30 +00:00