forked from KolibriOS/kolibrios
newlib: missing files
git-svn-id: svn://kolibrios.org@2828 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b3ffd0487f
commit
98b858c040
105
programs/develop/libraries/newlib/include/fenv.h
Normal file
105
programs/develop/libraries/newlib/include/fenv.h
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
#ifndef _FENV_H_
|
||||||
|
#define _FENV_H_
|
||||||
|
|
||||||
|
/* FPU status word exception flags */
|
||||||
|
#define FE_INVALID 0x01
|
||||||
|
#define FE_DENORMAL 0x02
|
||||||
|
#define FE_DIVBYZERO 0x04
|
||||||
|
#define FE_OVERFLOW 0x08
|
||||||
|
#define FE_UNDERFLOW 0x10
|
||||||
|
#define FE_INEXACT 0x20
|
||||||
|
#define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \
|
||||||
|
| FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
|
||||||
|
|
||||||
|
/* FPU control word rounding flags */
|
||||||
|
#define FE_TONEAREST 0x0000
|
||||||
|
#define FE_DOWNWARD 0x0400
|
||||||
|
#define FE_UPWARD 0x0800
|
||||||
|
#define FE_TOWARDZERO 0x0c00
|
||||||
|
|
||||||
|
/* The MXCSR exception flags are the same as the
|
||||||
|
FE flags. */
|
||||||
|
#define __MXCSR_EXCEPT_FLAG_SHIFT 0
|
||||||
|
|
||||||
|
/* How much to shift FE status word exception flags
|
||||||
|
to get the MXCSR exeptions masks, */
|
||||||
|
#define __MXCSR_EXCEPT_MASK_SHIFT 7
|
||||||
|
|
||||||
|
/* How much to shift FE control word rounding flags
|
||||||
|
to get MXCSR rounding flags, */
|
||||||
|
#define __MXCSR_ROUND_FLAG_SHIFT 3
|
||||||
|
|
||||||
|
#ifndef RC_INVOKED
|
||||||
|
/*
|
||||||
|
For now, support only for the basic abstraction of flags that are
|
||||||
|
either set or clear. fexcept_t could be structure that holds more
|
||||||
|
info about the fp environment.
|
||||||
|
*/
|
||||||
|
typedef unsigned short fexcept_t;
|
||||||
|
|
||||||
|
/* This 32-byte struct represents the entire floating point
|
||||||
|
environment as stored by fnstenv or fstenv, augmented by
|
||||||
|
the contents of the MXCSR register, as stored by stmxcsr
|
||||||
|
(if CPU supports it). */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned short __control_word;
|
||||||
|
unsigned short __unused0;
|
||||||
|
unsigned short __status_word;
|
||||||
|
unsigned short __unused1;
|
||||||
|
unsigned short __tag_word;
|
||||||
|
unsigned short __unused2;
|
||||||
|
unsigned int __ip_offset; /* instruction pointer offset */
|
||||||
|
unsigned short __ip_selector;
|
||||||
|
unsigned short __opcode;
|
||||||
|
unsigned int __data_offset;
|
||||||
|
unsigned short __data_selector;
|
||||||
|
unsigned short __unused3;
|
||||||
|
unsigned int __mxcsr; /* contents of the MXCSR register */
|
||||||
|
} fenv_t;
|
||||||
|
|
||||||
|
|
||||||
|
/*The C99 standard (7.6.9) allows us to define implementation-specific macros for
|
||||||
|
different fp environments */
|
||||||
|
|
||||||
|
/* The default Intel x87 floating point environment (64-bit mantissa) */
|
||||||
|
#define FE_PC64_ENV ((const fenv_t *)-1)
|
||||||
|
|
||||||
|
/* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */
|
||||||
|
#define FE_PC53_ENV ((const fenv_t *)-2)
|
||||||
|
|
||||||
|
/* The FE_DFL_ENV macro is required by standard.
|
||||||
|
fesetenv will use the environment set at app startup.*/
|
||||||
|
#define FE_DFL_ENV ((const fenv_t *) 0)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*TODO: Some of these could be inlined */
|
||||||
|
/* 7.6.2 Exception */
|
||||||
|
|
||||||
|
extern int __cdecl feclearexcept (int);
|
||||||
|
extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts);
|
||||||
|
extern int __cdecl feraiseexcept (int excepts );
|
||||||
|
extern int __cdecl fesetexceptflag (const fexcept_t *, int);
|
||||||
|
extern int __cdecl fetestexcept (int excepts);
|
||||||
|
|
||||||
|
/* 7.6.3 Rounding */
|
||||||
|
|
||||||
|
extern int __cdecl fegetround (void);
|
||||||
|
extern int __cdecl fesetround (int mode);
|
||||||
|
|
||||||
|
/* 7.6.4 Environment */
|
||||||
|
|
||||||
|
extern int __cdecl fegetenv (fenv_t * envp);
|
||||||
|
extern int __cdecl fesetenv (const fenv_t * );
|
||||||
|
extern int __cdecl feupdateenv (const fenv_t *);
|
||||||
|
extern int __cdecl feholdexcept (fenv_t *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* Not RC_INVOKED */
|
||||||
|
|
||||||
|
#endif /* ndef _FENV_H */
|
22
programs/develop/libraries/newlib/include/stdio_ext.h
Normal file
22
programs/develop/libraries/newlib/include/stdio_ext.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* stdio_ext.h
|
||||||
|
*
|
||||||
|
* Definitions for I/O internal operations, originally from Solaris.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _STDIO_EXT_H_
|
||||||
|
#define _STDIO_EXT_H_
|
||||||
|
|
||||||
|
#ifdef __rtems__
|
||||||
|
#error "<stdio_ext.h> not supported"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
_BEGIN_STD_C
|
||||||
|
|
||||||
|
void _EXFUN(__fpurge,(FILE *));
|
||||||
|
|
||||||
|
_END_STD_C
|
||||||
|
|
||||||
|
#endif /* _STDIO_EXT_H_ */
|
111
programs/develop/libraries/newlib/kos32.x
Normal file
111
programs/develop/libraries/newlib/kos32.x
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/* Default linker script, for normal executables */
|
||||||
|
OUTPUT_FORMAT("kos32")
|
||||||
|
OUTPUT_ARCH("")
|
||||||
|
ENTRY(_start)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text 0x000000:
|
||||||
|
{
|
||||||
|
LONG(0x554e454D);
|
||||||
|
LONG(0x32305445);
|
||||||
|
LONG(1);
|
||||||
|
LONG(_start);
|
||||||
|
LONG(___iend);
|
||||||
|
LONG(___memsize);
|
||||||
|
LONG(___stacktop);
|
||||||
|
LONG(___cmdline);
|
||||||
|
LONG(___pgmname); /* full path */
|
||||||
|
LONG(0); /*FIXME tls data */
|
||||||
|
*(.init)
|
||||||
|
*(.text)
|
||||||
|
*(SORT(.textkos32))
|
||||||
|
*(.text.*)
|
||||||
|
*(.glue_7t)
|
||||||
|
*(.glue_7)
|
||||||
|
___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
|
||||||
|
LONG (-1);*(.ctors); *(.ctor); *(SORT(.ctors.*)); LONG (0);
|
||||||
|
___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
|
||||||
|
LONG (-1); *(.dtors); *(.dtor); *(SORT(.dtors.*)); LONG (0);
|
||||||
|
*(.fini)
|
||||||
|
/* ??? Why is .gcc_exc here? */
|
||||||
|
*(.gcc_exc)
|
||||||
|
PROVIDE (etext = .);
|
||||||
|
*(.gcc_except_table)
|
||||||
|
}
|
||||||
|
.rdata ALIGN(16) :
|
||||||
|
{
|
||||||
|
*(.rdata)
|
||||||
|
*(SORT(.rdatakos32))
|
||||||
|
___RUNTIME_PSEUDO_RELOC_LIST__ = .;
|
||||||
|
__RUNTIME_PSEUDO_RELOC_LIST__ = .;
|
||||||
|
*(.rdata_runtime_pseudo_reloc)
|
||||||
|
___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
|
||||||
|
__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;
|
||||||
|
}
|
||||||
|
.CRT ALIGN(16) :
|
||||||
|
{
|
||||||
|
___crt_xc_start__ = . ;
|
||||||
|
*(SORT(.CRT*)) /* C initialization */
|
||||||
|
___crt_xc_end__ = . ;
|
||||||
|
___crt_xi_start__ = . ;
|
||||||
|
*(SORT(.CRT*)) /* C++ initialization */
|
||||||
|
___crt_xi_end__ = . ;
|
||||||
|
___crt_xl_start__ = . ;
|
||||||
|
*(SORT(.CRT*)) /* TLS callbacks */
|
||||||
|
/* ___crt_xl_end__ is defined in the TLS Directory support code */
|
||||||
|
___crt_xp_start__ = . ;
|
||||||
|
*(SORT(.CRT*)) /* Pre-termination */
|
||||||
|
___crt_xp_end__ = . ;
|
||||||
|
___crt_xt_start__ = . ;
|
||||||
|
*(SORT(.CRT*)) /* Termination */
|
||||||
|
___crt_xt_end__ = . ;
|
||||||
|
}
|
||||||
|
.data ALIGN(16) :
|
||||||
|
{
|
||||||
|
__data_start__ = . ;
|
||||||
|
*(.data)
|
||||||
|
*(.data2)
|
||||||
|
*(SORT(.datakos32))
|
||||||
|
*(.jcr)
|
||||||
|
__CRT_MT = .;
|
||||||
|
LONG(0);
|
||||||
|
__data_end__ = . ;
|
||||||
|
*(.data_cygwin_nocopy)
|
||||||
|
}
|
||||||
|
.eh_frame ALIGN(16) :
|
||||||
|
{
|
||||||
|
*(.eh_frame)
|
||||||
|
___iend = . ;
|
||||||
|
}
|
||||||
|
bss ALIGN(16):
|
||||||
|
{
|
||||||
|
*(.bss)
|
||||||
|
*(COMMON)
|
||||||
|
. = ALIGN(16);
|
||||||
|
___cmdline = .;
|
||||||
|
. = . + 256;
|
||||||
|
___pgmname = .;
|
||||||
|
___menuet__app_path_area = .;
|
||||||
|
. = . + 1024 + 16;
|
||||||
|
___stacktop = .;
|
||||||
|
___memsize = . ;
|
||||||
|
}
|
||||||
|
/DISCARD/ :
|
||||||
|
{
|
||||||
|
*(.debug)
|
||||||
|
*(.debug)
|
||||||
|
*(.debug)
|
||||||
|
*(.drectve)
|
||||||
|
*(.note.GNU-stack)
|
||||||
|
*(.comment)
|
||||||
|
*(.debug_abbrev)
|
||||||
|
*(.debug_info)
|
||||||
|
*(.debug_line)
|
||||||
|
*(.debug_frame)
|
||||||
|
*(.debug_loc)
|
||||||
|
*(.debug_pubnames)
|
||||||
|
*(.debug_aranges)
|
||||||
|
*(.debug_ranges)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
48
programs/develop/libraries/newlib/math/f_frexp.S
Normal file
48
programs/develop/libraries/newlib/math/f_frexp.S
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* ====================================================
|
||||||
|
* Copyright (C) 1998, 2002 by Red Hat Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this
|
||||||
|
* software is freely granted, provided that this notice
|
||||||
|
* is preserved.
|
||||||
|
* ====================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(_SOFT_FLOAT)
|
||||||
|
|
||||||
|
/*
|
||||||
|
Fast version of frexp using Intel float instructions.
|
||||||
|
|
||||||
|
double _f_frexp (double x, int *exp);
|
||||||
|
|
||||||
|
Function splits x into y * 2 ** z. It then
|
||||||
|
returns the value of y and updates *exp with z.
|
||||||
|
There is no error checking or setting of errno.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "i386mach.h"
|
||||||
|
|
||||||
|
.global SYM (_f_frexp)
|
||||||
|
SOTYPE_FUNCTION(_f_frexp)
|
||||||
|
|
||||||
|
SYM (_f_frexp):
|
||||||
|
pushl ebp
|
||||||
|
movl esp,ebp
|
||||||
|
fldl 8(ebp)
|
||||||
|
movl 16(ebp),eax
|
||||||
|
|
||||||
|
fxtract
|
||||||
|
fld1
|
||||||
|
fchs
|
||||||
|
fxch
|
||||||
|
fscale
|
||||||
|
fstp st1
|
||||||
|
fxch
|
||||||
|
fld1
|
||||||
|
faddp
|
||||||
|
fistpl 0(eax)
|
||||||
|
|
||||||
|
leave
|
||||||
|
ret
|
||||||
|
|
||||||
|
#endif
|
83
programs/develop/libraries/newlib/math/i386mach.h
Normal file
83
programs/develop/libraries/newlib/math/i386mach.h
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/* This file was based on the modified setjmp.S performed by
|
||||||
|
* Joel Sherill (joel@OARcorp.com) which specified the use
|
||||||
|
* of the __USER_LABEL_PREFIX__ and __REGISTER_PREFIX__ macros.
|
||||||
|
**
|
||||||
|
** This file is distributed WITHOUT ANY WARRANTY; without even the implied
|
||||||
|
** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* These are predefined by new versions of GNU cpp. */
|
||||||
|
|
||||||
|
#ifndef __USER_LABEL_PREFIX__
|
||||||
|
#define __USER_LABEL_PREFIX__ _
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define __REG_PREFIX__ %
|
||||||
|
|
||||||
|
/* ANSI concatenation macros. */
|
||||||
|
|
||||||
|
#define CONCAT1(a, b) CONCAT2(a, b)
|
||||||
|
#define CONCAT2(a, b) a##b
|
||||||
|
|
||||||
|
/* Use the right prefix for global labels. */
|
||||||
|
|
||||||
|
#define SYM(x) CONCAT1(__USER_LABEL_PREFIX__, x)
|
||||||
|
|
||||||
|
/* Use the right prefix for registers. */
|
||||||
|
|
||||||
|
#define REG(x) CONCAT1(__REG_PREFIX__, x)
|
||||||
|
|
||||||
|
#define eax REG(eax)
|
||||||
|
#define ebx REG(ebx)
|
||||||
|
#define ecx REG(ecx)
|
||||||
|
#define edx REG(edx)
|
||||||
|
#define esi REG(esi)
|
||||||
|
#define edi REG(edi)
|
||||||
|
#define ebp REG(ebp)
|
||||||
|
#define esp REG(esp)
|
||||||
|
|
||||||
|
#define st0 REG(st)
|
||||||
|
#define st1 REG(st(1))
|
||||||
|
#define st2 REG(st(2))
|
||||||
|
#define st3 REG(st(3))
|
||||||
|
#define st4 REG(st(4))
|
||||||
|
#define st5 REG(st(5))
|
||||||
|
#define st6 REG(st(6))
|
||||||
|
#define st7 REG(st(7))
|
||||||
|
|
||||||
|
#define ax REG(ax)
|
||||||
|
#define bx REG(bx)
|
||||||
|
#define cx REG(cx)
|
||||||
|
#define dx REG(dx)
|
||||||
|
|
||||||
|
#define ah REG(ah)
|
||||||
|
#define bh REG(bh)
|
||||||
|
#define ch REG(ch)
|
||||||
|
#define dh REG(dh)
|
||||||
|
|
||||||
|
#define al REG(al)
|
||||||
|
#define bl REG(bl)
|
||||||
|
#define cl REG(cl)
|
||||||
|
#define dl REG(dl)
|
||||||
|
|
||||||
|
#define mm1 REG(mm1)
|
||||||
|
#define mm2 REG(mm2)
|
||||||
|
#define mm3 REG(mm3)
|
||||||
|
#define mm4 REG(mm4)
|
||||||
|
#define mm5 REG(mm5)
|
||||||
|
#define mm6 REG(mm6)
|
||||||
|
#define mm7 REG(mm7)
|
||||||
|
|
||||||
|
#ifdef _I386MACH_NEED_SOTYPE_FUNCTION
|
||||||
|
#define SOTYPE_FUNCTION(sym) .type SYM(sym),@function
|
||||||
|
#else
|
||||||
|
#define SOTYPE_FUNCTION(sym)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _I386MACH_ALLOW_HW_INTERRUPTS
|
||||||
|
#define __CLI
|
||||||
|
#define __STI
|
||||||
|
#else
|
||||||
|
#define __CLI cli
|
||||||
|
#define __STI sti
|
||||||
|
#endif
|
62
programs/develop/libraries/newlib/stdio/fileno.c
Normal file
62
programs/develop/libraries/newlib/stdio/fileno.c
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 1990 The Regents of the University of California.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms are permitted
|
||||||
|
* provided that the above copyright notice and this paragraph are
|
||||||
|
* duplicated in all such forms and that any documentation,
|
||||||
|
* advertising materials, and other materials related to such
|
||||||
|
* distribution and use acknowledge that the software was developed
|
||||||
|
* by the University of California, Berkeley. The name of the
|
||||||
|
* University may not be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
|
||||||
|
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION
|
||||||
|
<<fileno>>---return file descriptor associated with stream
|
||||||
|
|
||||||
|
INDEX
|
||||||
|
fileno
|
||||||
|
|
||||||
|
ANSI_SYNOPSIS
|
||||||
|
#include <stdio.h>
|
||||||
|
int fileno(FILE *<[fp]>);
|
||||||
|
|
||||||
|
TRAD_SYNOPSIS
|
||||||
|
#include <stdio.h>
|
||||||
|
int fileno(<[fp]>)
|
||||||
|
FILE *<[fp]>;
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
You can use <<fileno>> to return the file descriptor identified by <[fp]>.
|
||||||
|
|
||||||
|
RETURNS
|
||||||
|
<<fileno>> returns a non-negative integer when successful.
|
||||||
|
If <[fp]> is not an open stream, <<fileno>> returns -1.
|
||||||
|
|
||||||
|
PORTABILITY
|
||||||
|
<<fileno>> is not part of ANSI C.
|
||||||
|
POSIX requires <<fileno>>.
|
||||||
|
|
||||||
|
Supporting OS subroutines required: none.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <_ansi.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "local.h"
|
||||||
|
|
||||||
|
int
|
||||||
|
_DEFUN(fileno, (f),
|
||||||
|
FILE * f)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
CHECK_INIT (_REENT, f);
|
||||||
|
_flockfile (f);
|
||||||
|
result = __sfileno (f);
|
||||||
|
_funlockfile (f);
|
||||||
|
return result;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user