This is the mail archive of the
newlib@sources.redhat.com
mailing list for the newlib project.
RTEMS machine/*.h patch (Round #2)
- From: Joel Sherrill <joel dot sherrill at OARcorp dot com>
- To: newlib at sources dot redhat dot com
- Date: Mon, 21 Oct 2002 14:13:04 -0500
- Subject: RTEMS machine/*.h patch (Round #2)
- Organization: OAR Corporation
Hi,
I think Jeff blessed the modified version of this patch based
upon a followup post I did with some parts of the patch corrected.
Before committing it, I wanted to re-post the updated patch
just in case.
2002-10-21 Joel Sherrill <joel@OARcorp.com>
* libc/sys/rtems/machine: New directory.
* libc/sys/rtems/machine/limits.h,
libc/sys/rtems/machine/param.h,
libc/sys/rtems/sys/param.h, libc/sys/rtems/sys/syslimits.h,
libc/sys/rtems/sys/utime.h: New files added to make *-rtems
newlib
targets more BSD like when installed without requiring files to
be overwritten at install point when RTEMS itself is installed.
* Makefile.am: Pick up system dependent machine .h files such as
might be found on a BSD-ish system.
* libc/include/machine/types.h: When on an RTEMS target, define
a
few BSD flavor types.
--
Joel Sherrill, Ph.D. Director of Research & Development
joel@OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
2002-10-07 Joel Sherrill <joel@OARcorp.com>
* libc/sys/rtems/machine: New directory.
* libc/sys/rtems/machine/limits.h, libc/sys/rtems/machine/param.h,
libc/sys/rtems/sys/param.h, libc/sys/rtems/sys/syslimits.h,
libc/sys/rtems/sys/utime.h: New files added to make *-rtems newlib
targets more BSD like when installed without requiring additional
build of RTEMS itself.
* Makefile.am: Pick up system dependent machine files such as
found on a BSD-ish system.
* libc/include/machine/types.h: When on an RTEMS target, define a
few more.
Index: Makefile.am
===================================================================
RCS file: /cvs/src/src/newlib/Makefile.am,v
retrieving revision 1.26
diff -u -r1.26 Makefile.am
--- Makefile.am 29 Aug 2002 00:22:10 -0000 1.26
+++ Makefile.am 21 Oct 2002 18:58:19 -0000
@@ -205,6 +205,11 @@
cp $$i targ-include/sys/`basename $$i`; \
else true; fi ; \
done
+ -for i in $(srcdir)/libc/sys/$(sys_dir)/machine/*.h; do \
+ if [ -f $$i ]; then \
+ cp $$i targ-include/machine/`basename $$i`; \
+ else true; fi ; \
+ done
-for i in $(srcdir)/libc/sys/$(sys_dir)/machine/$(machine_dir)/*.h; do \
if [ -f $$i ]; then \
cp $$i targ-include/machine/`basename $$i`; \
@@ -248,6 +253,11 @@
for i in $(srcdir)/libc/sys/$(sys_dir)/sys/*.h; do \
if [ -f $$i ]; then \
$(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/sys/`basename $$i`; \
+ else true; fi ; \
+ done ; \
+ for i in $(srcdir)/libc/sys/$(sys_dir)/machine/*.h; do \
+ if [ -f $$i ]; then \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/machine/`basename $$i`; \
else true; fi ; \
done ; \
for i in $(srcdir)/libc/sys/$(sys_dir)/include/*.h; do \
Index: newlib-cvs-20020822/libc/include/machine/types.h
===================================================================
RCS file: /cvs/src/src/newlib/libc/include/machine/types.h,v
retrieving revision 1.4
diff -u -r1.4 types.h
--- newlib-cvs-20020822/libc/include/machine/types.h 21 Jun 2002 18:15:48 -0000 1.4
+++ newlib-cvs-20020822/libc/include/machine/types.h 22 Aug 2002 17:15:15 -0000
@@ -1,6 +1,32 @@
#ifndef _MACHTYPES_H_
#define _MACHTYPES_H_
+/*
+ * The following section is RTEMS specific and is needed to more
+ * closely match the types defined in the BSD machine/types.h.
+ * This is needed to let the RTEMS/BSD TCP/IP stack compile.
+ */
+
+#if defined(__rtems__)
+typedef long long int64_t;
+#if defined( __h8300__)
+typedef long int32_t;
+#else
+typedef int int32_t;
+#endif
+typedef short int16_t;
+typedef char int8_t;
+
+typedef unsigned long long u_int64_t;
+#if defined( __h8300__)
+typedef unsigned long u_int32_t;
+#else
+typedef unsigned int u_int32_t;
+#endif
+typedef unsigned short u_int16_t;
+typedef unsigned char u_int8_t;
+#endif
+
#define _CLOCK_T_ unsigned long /* clock() */
#define _TIME_T_ long /* time() */
#define _CLOCKID_T_ unsigned long
--- /dev/null Thu Aug 30 15:30:55 2001
+++ newlib-cvs-20020822/libc/sys/rtems/machine/limits.h Thu Aug 22 11:22:06 2002
@@ -0,0 +1,6 @@
+/*
+ * $Id: limits.h,v 1.2 1998/08/20 21:56:24 joel Exp $
+ */
+
+/* intentionally empty file */
+
--- /dev/null Thu Aug 30 15:30:55 2001
+++ newlib-cvs-20020822/libc/sys/rtems/machine/param.h Thu Aug 22 11:22:06 2002
@@ -0,0 +1,92 @@
+/*
+ * $Id: param.h,v 1.2 1998/08/20 21:56:24 joel Exp $
+ */
+
+#ifndef _MACHINE_PARAM_H_
+#define _MACHINE_PARAM_H_
+
+/*
+ * These aren't really machine-dependent for RTEMS.....
+ */
+
+/*
+#define MACHINE "i386"
+#define MID_MACHINE MID_I386
+*/
+
+/*
+ * Round p (pointer or byte index) up to a correctly-aligned value
+ * for all data types (int, long, ...). The result is unsigned int
+ * and must be cast to any desired pointer type.
+ */
+#define ALIGNBYTES (sizeof(int) - 1)
+#define ALIGN(p) (((unsigned)(p) + ALIGNBYTES) & ~ALIGNBYTES)
+
+#define PAGE_SHIFT 12 /* LOG2(PAGE_SIZE) */
+#define PAGE_SIZE (1<<PAGE_SHIFT) /* bytes/page */
+#define PAGE_MASK (PAGE_SIZE-1)
+#define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t)))
+
+#define NPDEPG (PAGE_SIZE/(sizeof (pd_entry_t)))
+#define PDRSHIFT 22 /* LOG2(NBPDR) */
+#define NBPDR (1<<PDRSHIFT) /* bytes/page dir */
+
+#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
+#define DEV_BSIZE (1<<DEV_BSHIFT)
+
+#define BLKDEV_IOSIZE 2048
+#define MAXPHYS (64 * 1024) /* max raw I/O transfer size */
+
+#define UPAGES 2 /* pages of u-area */
+
+/*
+ * Constants related to network buffer management.
+ * MCLBYTES must be no larger than CLBYTES (the software page size), and,
+ * on machines that exchange pages of input or output buffers with mbuf
+ * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
+ * of the hardware page size.
+ */
+#ifndef MSIZE
+#define MSIZE 128 /* size of an mbuf */
+#endif /* MSIZE */
+
+#ifndef MCLSHIFT
+#define MCLSHIFT 11 /* convert bytes to m_buf clusters */
+#endif /* MCLSHIFT */
+#define MCLBYTES (1 << MCLSHIFT) /* size of an m_buf cluster */
+#define MCLOFSET (MCLBYTES - 1) /* offset within an m_buf cluster */
+
+/*
+ * Some macros for units conversion
+ */
+
+/* clicks to bytes */
+#define ctob(x) ((x)<<PAGE_SHIFT)
+
+/* bytes to clicks */
+#define btoc(x) (((unsigned)(x)+PAGE_MASK)>>PAGE_SHIFT)
+
+/*
+ * btodb() is messy and perhaps slow because `bytes' may be an off_t. We
+ * want to shift an unsigned type to avoid sign extension and we don't
+ * want to widen `bytes' unnecessarily. Assume that the result fits in
+ * a daddr_t.
+ */
+#define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \
+ (sizeof (bytes) > sizeof(long) \
+ ? (daddr_t)((unsigned long long)(bytes) >> DEV_BSHIFT) \
+ : (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT))
+
+#define dbtob(db) /* calculates (db * DEV_BSIZE) */ \
+ ((off_t)(db) << DEV_BSHIFT)
+
+/*
+ * Mach derived conversion macros
+ */
+#define trunc_page(x) ((unsigned)(x) & ~PAGE_MASK)
+#define round_page(x) ((((unsigned)(x)) + PAGE_MASK) & ~PAGE_MASK)
+
+#define atop(x) ((unsigned)(x) >> PAGE_SHIFT)
+#define ptoa(x) ((unsigned)(x) << PAGE_SHIFT)
+
+#endif /* !_MACHINE_PARAM_H_ */
--- /dev/null Thu Aug 30 15:30:55 2001
+++ newlib-cvs-20020822/libc/sys/rtems/sys/utime.h Thu Aug 22 11:22:06 2002
@@ -0,0 +1,32 @@
+/*
+ * $Id: utime.h,v 1.1 1999/03/24 22:52:47 joel Exp $
+ */
+
+#ifndef __UTIME_h__
+#define __UTIME_h__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * POSIX 1003.1b 5.6.6 Set File Access and Modification Times
+ */
+
+struct utimbuf {
+ time_t actime; /* Access time */
+ time_t modtime; /* Modification time */
+};
+
+/* Functions */
+
+int utime(
+ const char *path,
+ const struct utimbuf *times
+);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* _SYS_UTIME_H */
0a1,81
> /*
> * Copyright (c) 1988, 1993
> * The Regents of the University of California. All rights reserved.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> * 2. Redistributions in binary form must reproduce the above copyright
> * notice, this list of conditions and the following disclaimer in the
> * documentation and/or other materials provided with the distribution.
> * 3. Neither the name of the University nor the names of its contributors
> * may be used to endorse or promote products derived from this software
> * without specific prior written permission.
> *
> * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
> * @(#)syslimits.h 8.1 (Berkeley) 6/2/93
> * $Id: syslimits.h,v 1.2 1998/08/20 21:47:37 joel Exp $
> */
>
> #ifndef _SYS_SYSLIMITS_H_
> #define _SYS_SYSLIMITS_H_
>
> #if !defined(__rtems__)
> #define ARG_MAX 65536 /* max bytes for an exec function */
> #endif
>
> #if !defined(__rtems__)
> #ifndef CHILD_MAX
> #define CHILD_MAX 40 /* max simultaneous processes */
> #endif
> #endif
>
> #if !defined(__rtems__)
> #define LINK_MAX 32767 /* max file link count */
> #endif
>
> #define MAX_CANON 255 /* max bytes in term canon input line */
>
> #define MAX_INPUT 255 /* max bytes in terminal input */
>
> #if !defined(__rtems__)
> #define NAME_MAX 255 /* max bytes in a file name */
> #endif
>
> #define NGROUPS_MAX 16 /* max supplemental group id's */
>
> #if !defined(__rtems__)
> #ifndef OPEN_MAX
> #define OPEN_MAX 64 /* max open files per process */
> #endif
> #endif
>
> #if !defined(__rtems__)
> #define PATH_MAX 1024 /* max bytes in pathname */
> #endif
>
> #define PIPE_BUF 512 /* max bytes for atomic pipe writes */
>
> #define BC_BASE_MAX 99 /* max ibase/obase values in bc(1) */
> #define BC_DIM_MAX 2048 /* max array elements in bc(1) */
> #define BC_SCALE_MAX 99 /* max scale value in bc(1) */
> #define BC_STRING_MAX 1000 /* max const string length in bc(1) */
> #define COLL_WEIGHTS_MAX 0 /* max weights for order keyword */
> #define EXPR_NEST_MAX 32 /* max expressions nested in expr(1) */
> #define LINE_MAX 2048 /* max bytes in an input line */
> #define RE_DUP_MAX 255 /* max RE's in interval notation */
>
> #endif
0a1,227
> /*-
> * Copyright (c) 1982, 1986, 1989, 1993
> * The Regents of the University of California. All rights reserved.
> * (c) UNIX System Laboratories, Inc.
> * All or some portions of this file are derived from material licensed
> * to the University of California by American Telephone and Telegraph
> * Co. or Unix System Laboratories, Inc. and are reproduced herein with
> * the permission of UNIX System Laboratories, Inc.
> *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following conditions
> * are met:
> * 1. Redistributions of source code must retain the above copyright
> * notice, this list of conditions and the following disclaimer.
> * 2. Redistributions in binary form must reproduce the above copyright
> * notice, this list of conditions and the following disclaimer in the
> * documentation and/or other materials provided with the distribution.
> * 3. Neither the name of the University nor the names of its contributors
> * may be used to endorse or promote products derived from this software
> * without specific prior written permission.
> *
> * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
> * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> * SUCH DAMAGE.
> *
> * @(#)param.h 8.3 (Berkeley) 4/4/95
> * $Id: param.h,v 1.2 1998/08/20 21:47:37 joel Exp $
> */
>
> #ifndef _SYS_PARAM_H_
> #define _SYS_PARAM_H_
>
> #include <unistd.h>
>
> #define BSD 199506 /* System version (year & month). */
> #define BSD4_3 1
> #define BSD4_4 1
>
> #ifndef NULL
> #define NULL 0
> #endif
>
> #ifndef LOCORE
> #include <sys/types.h>
> #endif
>
> /*
> * Machine-independent constants (some used in following include files).
> * Redefined constants are from POSIX 1003.1 limits file.
> *
> * MAXCOMLEN should be >= sizeof(ac_comm) (see <acct.h>)
> * MAXLOGNAME should be >= UT_NAMESIZE (see <utmp.h>)
> */
> #include <sys/syslimits.h>
>
> #define MAXCOMLEN 16 /* max command name remembered */
> #define MAXINTERP 32 /* max interpreter file name length */
> #define MAXLOGNAME 12 /* max login name length */
> #define MAXUPRC CHILD_MAX /* max simultaneous processes */
> #define NCARGS ARG_MAX /* max bytes for an exec function */
> #define NGROUPS NGROUPS_MAX /* max number groups */
> #define NOFILE OPEN_MAX /* max open files per process */
> #define NOGROUP 65535 /* marker for empty group set member */
> #define MAXHOSTNAMELEN 256 /* max hostname size */
>
> /* More types and definitions used throughout the kernel. */
> #ifdef KERNEL
> #include <sys/cdefs.h>
> #include <sys/errno.h>
> #include <sys/time.h>
> #include <sys/resource.h>
> #include <sys/ucred.h>
> #include <sys/uio.h>
> #include <sys/rtprio.h>
>
> #ifndef FALSE
> #define FALSE 0
> #endif
> #ifndef TRUE
> #define TRUE 1
> #endif
> #endif
>
> /* Signals. */
> #include <sys/signal.h>
>
> /* Machine type dependent parameters. */
> #include <machine/param.h>
> #include <machine/limits.h>
>
> /*
> * Priorities. Note that with 32 run queues, differences less than 4 are
> * insignificant.
> */
> #define PSWP 0
> #define PVM 4
> #define PINOD 8
> #define PRIBIO 16
> #define PVFS 20
> #define PZERO 22 /* No longer magic, shouldn't be here. XXX */
> #define PSOCK 24
> #define PWAIT 32
> #define PLOCK 36
> #define PPAUSE 40
> #define PUSER 50
> #define MAXPRI 127 /* Priorities range from 0 through MAXPRI. */
>
> #define PRIMASK 0x0ff
> #define PCATCH 0x100 /* OR'd with pri for tsleep to check signals */
>
> #define NZERO 0 /* default "nice" */
>
> #define NBPW sizeof(int) /* number of bytes per word (integer) */
>
> #define CMASK 022 /* default file mask: S_IWGRP|S_IWOTH */
> #define NODEV (dev_t)(-1) /* non-existent device */
>
> /*
> * Clustering of hardware pages on machines with ridiculously small
> * page sizes is done here. The paging subsystem deals with units of
> * CLSIZE pte's describing PAGE_SIZE (from machine/machparam.h) pages each.
> */
> #if 0
> #define CLBYTES (CLSIZE*PAGE_SIZE)
> #endif
>
> #define CBLOCK 128 /* Clist block size, must be a power of 2. */
> #define CBQSIZE (CBLOCK/NBBY) /* Quote bytes/cblock - can do better. */
> /* Data chars/clist. */
> #define CBSIZE (CBLOCK - sizeof(struct cblock *) - CBQSIZE)
> #define CROUND (CBLOCK - 1) /* Clist rounding. */
>
> /*
> * File system parameters and macros.
> *
> * The file system is made out of blocks of at most MAXBSIZE units, with
> * smaller units (fragments) only in the last direct block. MAXBSIZE
> * primarily determines the size of buffers in the buffer pool. It may be
> * made larger without any effect on existing file systems; however making
> * it smaller make make some file systems unmountable. Also, MAXBSIZE
> * must be less than MAXPHYS!!! DFLTBSIZE is the average amount of
> * memory allocated by vfs_bio per nbuf. BKVASIZE is the average amount
> * of kernel virtual space allocated per nbuf. BKVASIZE should be >=
> * DFLTBSIZE. If it is significantly bigger than DFLTBSIZE, then
> * kva fragmentation causes fewer performance problems.
> */
> #define MAXBSIZE 65536
> #define BKVASIZE 8192
> #define DFLTBSIZE 4096
> #define MAXFRAG 8
>
> /*
> * MAXPATHLEN defines the longest permissible path length after expanding
> * symbolic links. It is used to allocate a temporary buffer from the buffer
> * pool in which to do the name expansion, hence should be a power of two,
> * and must be less than or equal to MAXBSIZE. MAXSYMLINKS defines the
> * maximum number of symbolic links that may be expanded in a path name.
> * It should be set high enough to allow all legitimate uses, but halt
> * infinite loops reasonably quickly.
> */
> #if !defined(__rtems__)
> #define MAXPATHLEN PATH_MAX
> #endif
> #define MAXSYMLINKS 32
>
> /* 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))
> #endif
> #define rounddown(x, y) (((x)/(y))*(y))
> #define roundup(x, y) ((((x)+((y)-1))/(y))*(y)) /* to any y */
> #define roundup2(x, y) (((x)+((y)-1))&(~((y)-1))) /* if y is powers of two */
> #define powerof2(x) ((((x)-1)&(x))==0)
>
> /* Macros for min/max. */
> #ifndef KERNEL
> #define MIN(a,b) (((a)<(b))?(a):(b))
> #define MAX(a,b) (((a)>(b))?(a):(b))
> #endif
>
> /*
> * Constants for setting the parameters of the kernel memory allocator.
> *
> * 2 ** MINBUCKET is the smallest unit of memory that will be
> * allocated. It must be at least large enough to hold a pointer.
> *
> * Units of memory less or equal to MAXALLOCSAVE will permanently
> * allocate physical memory; requests for these size pieces of
> * memory are quite fast. Allocations greater than MAXALLOCSAVE must
> * always allocate and free physical memory; requests for these
> * size allocations should be done infrequently as they will be slow.
> *
> * Constraints: PAGE_SIZE <= MAXALLOCSAVE <= 2 ** (MINBUCKET + 14), and
> * MAXALLOCSIZE must be a power of two.
> */
> #define MINBUCKET 4 /* 4 => min allocation of 16 bytes */
> #define MAXALLOCSAVE (2 * PAGE_SIZE)
>
> /*
> * Scale factor for scaled integers used to count %cpu time and load avgs.
> *
> * The number of CPU `tick's that map to a unique `%age' can be expressed
> * by the formula (1 / (2 ^ (FSHIFT - 11))). The maximum load average that
> * can be calculated (assuming 32 bits) can be closely approximated using
> * the formula (2 ^ (2 * (16 - FSHIFT))) for (FSHIFT < 15).
> *
> * For the scheduler to maintain a 1:1 mapping of CPU `tick' to `%age',
> * FSHIFT must be at least 11; this gives us a maximum load avg of ~1024.
> */
> #define FSHIFT 11 /* bits to right of fixed binary point */
> #define FSCALE (1<<FSHIFT)
>
> #endif /* _SYS_PARAM_H_ */