summaryrefslogtreecommitdiffstats
path: root/lib/libc/ia64
Commit message (Collapse)AuthorAgeFilesLines
...
* o Fix a cut-n-paste bug. We were clobbering rp with gp...marcel2003-06-021-2/+2
| | | | | | o Make sure the arguments to ctx_wrapper() are loaded from the backing store by forcing an underflow. Do this by making all registers in the register frame local.
* Rough implement of makecontext() needed to support libthr.marcel2003-05-312-1/+122
| | | | | | | | | | | | | | o Up to 8 arguments are allowed. This is the number of arguments passed in registers. Subsequent registers are passed on the stack. Trying to deal with this is not easy in C and likely forces us to use assembly code. Let's avoid that for now. There's no indication that more than 8 arguments is a strong requirement (Linux also has an 8 argument limit). o We expect that the stack base is 16-byte aligned and the stack size is a multiple of 16-byte. We bomb out if this is not the case. We probably want to be less strict by enforcing it ourselves. For now it's better to not hide gross alignment bogons by silently correcting it.
* Revamp of the syscall path, exception and context handling. Themarcel2003-05-163-12/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | prime objectives are: o Implement a syscall path based on the epc inststruction (see sys/ia64/ia64/syscall.s). o Revisit the places were we need to save and restore registers and define those contexts in terms of the register sets (see sys/ia64/include/_regset.h). Secundairy objectives: o Remove the requirement to use contigmalloc for kernel stacks. o Better handling of the high FP registers for SMP systems. o Switch to the new cpu_switch() and cpu_throw() semantics. o Add a good unwinder to reconstruct contexts for the rare cases we need to (see sys/contrib/ia64/libuwx) Many files are affected by this change. Functionally it boils down to: o The EPC syscall doesn't preserve registers it does not need to preserve and places the arguments differently on the stack. This affects libc and truss. o The address of the kernel page directory (kptdir) had to be unstaticized for use by the nested TLB fault handler. The name has been changed to ia64_kptdir to avoid conflicts. The renaming affects libkvm. o The trapframe only contains the special registers and the scratch registers. For syscalls using the EPC syscall path no scratch registers are saved. This affects all places where the trapframe is accessed. Most notably the unaligned access handler, the signal delivery code and the debugger. o Context switching only partly saves the special registers and the preserved registers. This affects cpu_switch() and triggered the move to the new semantics, which additionally affects cpu_throw(). o The high FP registers are either in the PCB or on some CPU. context switching for them is done lazily. This affects trap(). o The mcontext has room for all registers, but not all of them have to be defined in all cases. This mostly affects signal delivery code now. The *context syscalls are as of yet still unimplemented. Many details went into the removal of the requirement to use contigmalloc for kernel stacks. The details are mostly CPU specific and limited to exception_save() and exception_restore(). The few places where we create, destroy or switch stacks were mostly simplified by not having to construct physical addresses and additionally saving the virtual addresses for later use. Besides more efficient context saving and restoring, which of course yields a noticable speedup, this also fixes the dreaded SMP bootup problem as a side-effect. The details of which are still not fully understood. This change includes all the necessary backward compatibility code to have it handle older userland binaries that use the break instruction for syscalls. Support for break-based syscalls has been pessimized in favor of a clean implementation. Due to the overall better performance of the kernel, this will still be notived as an improvement if it's noticed at all. Approved by: re@ (jhb)
* Add a comment describing why it's important for the values in thisdas2003-05-081-0/+7
| | | | | | file to be correct, and how to generate them automatically. Caused much pain and suffering for: peter
* Add __ldtoa(), a wrapper around gdtoa() to make it look like dtoa().das2003-04-051-0/+5
| | | | | | | In support of this, add some MD macros to assist in converting long doubles to the format expected by gdtoa(). Reviewed by: silence on standards@
* Replace our ancient dtoa/strtod implementation with the gdtoadas2003-03-122-0/+35
| | | | | | | | | | | | | | | | | | package, a more recent, generalized set of routines. Among the changes: - Declare strtof() and strtold() in stdlib.h. - Add glue to libc to support these routines for all kinds of ``long double''. - Update printf() to reflect the fact that dtoa works slightly differently now. As soon as I see that nothing has blown up, I will kill src/lib/libc/stdlib/strtod.c. Soon printf() will be able to use the new routines to output long doubles without loss of precision, but numerous bugs in the existing code must be addressed first. Reviewed by: bde (briefly), mike (mentor), obrien
* Fix threaded applications on ia64 that are linked dynamicly. We didmarcel2003-03-051-3/+5
| | | | | | | | | | | | | | | | | not save (restore) the global pointer (GP) in the jmpbuf in setjmp (longjmp) because it's not needed in general. GP is considered a scratch register at callsites and hence is always restored after a call (when it's possible that the call resolves to a symbol in a different loadmodule; otherwise GP does not have to be saved and restored at all), including calls to setjmp/longjmp. There's just one problem with this now that we use setjmp/longjmp for context switching: A new context must have GP defined properly for the thread's entry point. This means that we need to put GP in the jmpbuf and consequently that we have to restore is in longjmp. This automaticly requires us to save it as well. When setjmp/longjmp isn't used for context switching, this can be reverted again.
* ABI breaker: Move the J_SIGMASK field in the jmpbuf beforemarcel2003-03-051-2/+2
| | | | | | | | | | | the J_SIG0 field. While here, rename J_SIG0 to J_SIGSET and remove J_SIG1. The main reason for this change is that the 128-bit sigset_t is now aligned on a 16-byte boundary, which allows us to use 16-byte atomic loads and stores on CPUs that support it. The removal of J_SIG1 is done to avoid confusion: it is never accessed and should not be. Renaming J_SIG0 to J_SIGSET is the icing on the cake that's better done now than later.
* Use __FBSDID.obrien2003-03-0335-44/+85
|
* ia64 actually uses 80-bit long doubles and must support big and littlemike2003-02-262-3/+27
| | | | | | endian at compile-time. Reviewed by: das
* o Implement C99 classification macros isfinite(), isinf(), isnan(),mike2003-02-121-0/+5
| | | | | | | | | isnormal(). The current isinf() and isnan() are perserved for binary compatibility with 5.0, but new programs will use the macros. o Implement C99 comparison macros isgreater(), isgreaterequal(), isless(), islessequal(), islessgreater(), isunordered(). Submitted by: David Schultz <dschultz@uclink.Berkeley.EDU>
* Implement fpclassify():mike2003-02-082-0/+43
| | | | | | | | | | | | | | | | | | | | | | | | | | | o Add a MD header private to libc called _fpmath.h; this header contains bitfield layouts of MD floating-point types. o Add a MI header private to libc called fpmath.h; this header contains bitfield layouts of MI floating-point types. o Add private libc variables to lib/libc/$arch/gen/infinity.c for storing NaN values. o Add __double_t and __float_t to <machine/_types.h>, and provide double_t and float_t typedefs in <math.h>. o Add some C99 manifest constants (FP_ILOGB0, FP_ILOGBNAN, HUGE_VALF, HUGE_VALL, INFINITY, NAN, and return values for fpclassify()) to <math.h> and others (FLT_EVAL_METHOD, DECIMAL_DIG) to <float.h> via <machine/float.h>. o Add C99 macro fpclassify() which calls __fpclassify{d,f,l}() based on the size of its argument. __fpclassifyl() is never called on alpha because (sizeof(long double) == sizeof(double)), which is good since __fpclassifyl() can't deal with such a small `long double'. This was developed by David Schultz and myself with input from bde and fenner. PR: 23103 Submitted by: David Schultz <dschultz@uclink.Berkeley.EDU> (significant portions) Reviewed by: bde, fenner (earlier versions)
* Implement missing fpgetround() and fpsetround().marcel2003-01-113-2/+84
|
* Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup,schweikh2003-01-012-2/+2
| | | | especially in troff files.
* Sort SRCS.marcel2002-11-161-5/+4
|
* o Fix _longjmp() to return 1 when the return value is given as 0.marcel2002-11-141-52/+25
| | | | | | | | | | | | | o Remove the unwanted smartness in _longjmp() where it compares the current ar.bspstore with the saved ar.bspstore and restores ar.rnat based on it. This either avoids saving ar.rnat in the jmp_buf or is the consequence of not saving ar.rnat. All this complexity breaks libc_r where we use longjmp() to switch to different threads and the current ar.bspstore has no relation to the saved ar.bspstore. Thus: we save ar.rnat in setjmp() and simply restore ar.bspstore and ar.rnat in longjmp(). This code needs a cleanup.
* ia64 ABI breaker:marcel2002-11-113-38/+6
| | | | | | | | | | | | | Don't force 16-byte alignment at run-time. Do it at compile-time. This saves us the pointer fiddling by the setjmp functions and reduces complexity. While here, increase the jmp_buf by 16 bytes to an even 512 bytes. Coincidentally, due to the way alignment was handled prior to this change, the jmp_buf has not changed in size, but only in how the space is used. Prior to this change the 16 bytes were reserved for enforcing alignment; now they are reserved by us for future extensions. Therefore, this ABI breaker is relatively save: the failure is always an alignment trap.
* Re-apply the previously backed-out commit that fixes the problem wherearchie2002-10-311-1/+1
| | | | | | | | HUGE_VAL is not properly aligned on some architectures. The previous fix now works because the two versions of 'math.h' (include/math.h and lib/msun/src/math.h) have since been merged into one. PR: bin/43544
* Revert previous commit to unbreak world until we figure out thearchie2002-09-201-1/+1
| | | | right way to do it.
* Fix a problem with the definition of HUGE_VAL causing the gcc warningarchie2002-09-191-1/+1
| | | | | | "cast increases required alignment of target type" on some platforms. Reviewed by: bde
* We cannot use an alloc with only inputs and/or locals. The kernelmarcel2002-08-231-11/+16
| | | | | | assumes that the parameters are passed in output registers. Remove the alloc entirely, but don't depend on the kernel not trashing our registers.
* Generate the normal asm stubs for all sysv system calls. Use these insteadjake2002-05-231-5/+3
| | | | | | | of C wrappers for the *sys indirect system calls. The indirect system calls are horribly broken on sparc64. Submitted by: tmm
* Our default syscall.S is identical to what was explicitly being done forobrien2002-05-152-34/+1
| | | | Alpha and IA-64. So there is no need for special handling.
* Implement _Unwind_FindTableEntry(). This function is part of GCCmarcel2002-04-132-0/+130
| | | | | for some configurations, but not for FreeBSD (yet?). Have one in libc in the mean time.
* Fix the style of the SCM ID's.obrien2002-03-221-2/+3
| | | | I believe have made all of libc .h's as consistent as possible.
* Fix the style of the SCM ID's.obrien2002-03-227-9/+21
| | | | I believe have made all of libc .c's as consistent as possible.
* Remove 'register' keyword.obrien2002-03-212-3/+3
|
* o Move NTOHL() and associated macros into <sys/param.h>. These aremike2002-02-186-8/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | deprecated in favor of the POSIX-defined lowercase variants. o Change all occurrences of NTOHL() and associated marcros in the source tree to use the lowercase function variants. o Add missing license bits to sparc64's <machine/endian.h>. Approved by: jake o Clean up <machine/endian.h> files. o Remove unused __uint16_swap_uint32() from i386's <machine/endian.h>. o Remove prototypes for non-existent bswapXX() functions. o Include <machine/endian.h> in <arpa/inet.h> to define the POSIX-required ntohl() family of functions. o Do similar things to expose the ntohl() family in libstand, <netinet/in.h>, and <sys/param.h>. o Prepend underscores to the ntohl() family to help deal with complexities associated with having MD (asm and inline) versions, and having to prevent exposure of these functions in other headers that happen to make use of endian-specific defines. o Create weak aliases to the canonical function name to help deal with third-party software forgetting to include an appropriate header. o Remove some now unneeded pollution from <sys/types.h>. o Add missing <arpa/inet.h> includes in userland. Tested on: alpha, i386 Reviewed by: bde, jake, tmm
* Implement fpsetmask() and fpgetmask().dfr2001-11-033-1/+83
|
* Compensate for the way that _setjmp aligns the start of jmp_buf.dfr2001-10-262-5/+23
|
* Fix WAW dependency. p6 is written in the syscall epilogue.peter2001-10-221-0/+1
|
* Fix a few more dependancy violations.dfr2001-10-221-3/+3
|
* Implement setjmp, longjmp, sigsetjmp and siglongjmp.dfr2001-10-203-104/+53
|
* Add __divdf3(), __divsf3() and __infinity[].dfr2001-10-204-1/+296
| | | | Obtained from: Intel (for the divide code)
* Adjust so that we don't use relocations which can't exist in a shareddfr2001-10-104-5/+10
| | | | library.
* Shorter versions of the byte swapping code.dfr2001-10-102-15/+7
|
* Fix a load of dependancy violations.dfr2001-10-052-7/+7
|
* Fix a whole bunch of dependancy bugs and make it actually work when thedfr2001-09-221-7/+10
| | | | size is not a multiple of eight.
* Fix byte swapping - it was totally broken.dfr2001-09-222-5/+6
|
* Implement _setjmp()/_longjmp().dfr2001-09-041-125/+345
| | | | Obtained from: Intel's EFI toolkit
* Removed duplicate VCS ID tags, as per style(9).ru2001-08-133-6/+0
|
* Use relative paths to find byte_swap_*.S to make it easier to use thesedfr2001-03-064-4/+4
| | | | from libstand.
* Make this compile. Still need to write/borrow a working setjmp.dfr2001-03-061-0/+1
|
* Correct a comment.obrien2001-03-051-1/+1
|
* Clean up syscall generation in libc by removing HIDDEN_SYSCALLSdeischen2001-01-296-61/+24
| | | | | | | | | | | | | | 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
* Comment only change; s/_thread_sys_/__sys_/deischen2001-01-261-2/+2
|
* Remove _THREAD_SAFE and make libc thread-safe by default bydeischen2001-01-245-56/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Remove last vestiges of thr_sleep and thr_wakeup from libc.jake2000-12-021-1/+1
|
* Return zero from setjmp() and _setjmp() for now.dfr2000-10-162-0/+5
|
* Fix a couple of dumb mistakes.dfr2000-10-161-7/+9
|
OpenPOWER on IntegriCloud