diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2007-02-08 21:22:05 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2007-02-08 21:22:05 +0000 |
commit | 1d94f7311465ca3c972541fc2c7c02255640d29c (patch) | |
tree | 645846719ee345cc3ff3bcd28b40b6baf69e43ea /libgloss/mep/gcov-io.h | |
parent | aafecff6a8081056a732b78582f7eebb5f6fd022 (diff) | |
download | cygnal-1d94f7311465ca3c972541fc2c7c02255640d29c.tar.gz cygnal-1d94f7311465ca3c972541fc2c7c02255640d29c.tar.bz2 cygnal-1d94f7311465ca3c972541fc2c7c02255640d29c.zip |
2007-02-08 Dave Brolley <brolley@redhat.com>
* mep: New target directory.
* README: Add MeP.
* configure.in: Add support for MeP.
* configure: Regenerated.
* mep/configure.in: New file.
* mep/configure: Ditto.
* mep/Makefile.in: Ditto.
* mep/aclocal.m4: Ditto.
* mep/crt0.S: Ditto.
* mep/crtn.S: Ditto.
* mep/sim-crt0.S: Ditto.
* mep/sim-crtn.S: Ditto.
* mep/fmax.ld: Ditto.
* mep/gcov-io.h: Ditto.
* mep/gmap_default.ld: Ditto.
* mep/handlers.c: Ditto.
* mep/h_reset.c: Ditto.
* mep/isatty.c: Ditto.
* mep/mep-bb.c: Ditto.
* mep/mep-gmon.c: Ditto.
* mep/min.ld: Ditto.
* mep/read.c: Ditto.
* mep/sbrk.c: Ditto.
* mep/sdram-crt0.S: Ditto.
* mep/sdram-crtn.S: Ditto.
* mep/simnovec-crt0.S: Ditto.
* mep/simple.ld: Ditto.
* mep/simsdran-crt0.S: Ditto.
* mep/syscalls.S: Ditto.
* mep/write.c: Ditto.
Diffstat (limited to 'libgloss/mep/gcov-io.h')
-rw-r--r-- | libgloss/mep/gcov-io.h | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/libgloss/mep/gcov-io.h b/libgloss/mep/gcov-io.h new file mode 100644 index 000000000..cb99704cd --- /dev/null +++ b/libgloss/mep/gcov-io.h @@ -0,0 +1,137 @@ +/* Machine-independent I/O routines for gcov. + + Copyright (c) 2000 Red Hat, Inc. All rights reserved. + + This copyrighted material is made available to anyone wishing to use, modify, + copy, or redistribute it subject to the terms and conditions of the BSD + License. This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY expressed or implied, including the implied + warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of + this license is available at http://www.opensource.org/licenses. Any Red Hat + trademarks that are incorporated in the source code or documentation are not + subject to the BSD License and may only be used or replicated with the + express permission of Red Hat, Inc. +*/ + + +#ifndef GCC_GCOV_IO_H +#define GCC_GCOV_IO_H +#include <stdio.h> +#include <sys/types.h> + +static int __fetch_long (long *, char *, size_t); +static int __store_long (long, char *, size_t); +static int __read_long (long *, FILE *, size_t); +static int __write_long (long, FILE *, size_t); + +/* These routines only work for signed values. */ + +/* Store a portable representation of VALUE in DEST using BYTES*8-1 bits. + Return a non-zero value if VALUE requires more than BYTES*8-1 bits + to store. */ + +static int +__store_long (value, dest, bytes) + long value; + char *dest; + size_t bytes; +{ + int upper_bit = (value < 0 ? 128 : 0); + size_t i; + + if (value < 0) + { + long oldvalue = value; + value = -value; + if (oldvalue != -value) + return 1; + } + + for(i = 0 ; i < (sizeof (value) < bytes ? sizeof (value) : bytes) ; i++) { + dest[i] = value & (i == (bytes - 1) ? 127 : 255); + value = value / 256; + } + + if (value && value != -1) + return 1; + + for(; i < bytes ; i++) + dest[i] = 0; + dest[bytes - 1] |= upper_bit; + return 0; +} + +/* Retrieve a quantity containing BYTES*8-1 bits from SOURCE and store + the result in DEST. Returns a non-zero value if the value in SOURCE + will not fit in DEST. */ + +static int +__fetch_long (dest, source, bytes) + long *dest; + char *source; + size_t bytes; +{ + long value = 0; + int i; + + for (i = bytes - 1; (size_t) i > (sizeof (*dest) - 1); i--) + if (source[i] & ((size_t) i == (bytes - 1) ? 127 : 255 )) + return 1; + + for (; i >= 0; i--) + value = value * 256 + (source[i] & ((size_t)i == (bytes - 1) ? 127 : 255)); + + if ((source[bytes - 1] & 128) && (value > 0)) + value = - value; + + *dest = value; + return 0; +} + +/* Write a BYTES*8-bit quantity to FILE, portably. Returns a non-zero + value if the write fails, or if VALUE can't be stored in BYTES*8 + bits. + + Note that VALUE may not actually be large enough to hold BYTES*8 + bits, but BYTES characters will be written anyway. + + BYTES may be a maximum of 10. */ + +static int +__write_long (value, file, bytes) + long value; + FILE *file; + size_t bytes; +{ + char c[10]; + + if (bytes > 10 || __store_long (value, c, bytes)) + return 1; + else + return fwrite(c, 1, bytes, file) != bytes; +} + +/* Read a quantity containing BYTES bytes from FILE, portably. Return + a non-zero value if the read fails or if the value will not fit + in DEST. + + Note that DEST may not be large enough to hold all of the requested + data, but the function will read BYTES characters anyway. + + BYTES may be a maximum of 10. */ + +static int +__read_long (dest, file, bytes) + long *dest; + FILE *file; + size_t bytes; +{ + char c[10]; + + if (bytes > 10 || fread(c, 1, bytes, file) != bytes) + return 1; + else + return __fetch_long (dest, c, bytes); +} + +#endif /* ! GCC_GCOV_IO_H */ |