From 4cc631db0f14afeb28c54aab262e5ddf252d3910 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Fri, 11 Aug 1995 14:33:04 +0000 Subject: Added functions to access the errno of the native system when using the newlib C library. Fixed bug where length did not take into account amount added for alignment requirements. --- c/src/exec/libcsupport/src/hosterr.c | 42 ++++++++++++++++++++++++++++++++++++ c/src/exec/libcsupport/src/malloc.c | 9 +++++++- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 c/src/exec/libcsupport/src/hosterr.c (limited to 'c/src/exec/libcsupport') diff --git a/c/src/exec/libcsupport/src/hosterr.c b/c/src/exec/libcsupport/src/hosterr.c new file mode 100644 index 0000000000..d842cc072a --- /dev/null +++ b/c/src/exec/libcsupport/src/hosterr.c @@ -0,0 +1,42 @@ +/* + * Routines to access a host errno + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + */ + +#include +#include + +int host_errno(void); + +/* + * copy host errno, if any to thread aware errno, if any + */ + +void fix_syscall_errno(void) +{ + errno = host_errno(); +} + +/* + * Get the host system errno, if any + * When using newlib (or possibly other libc's) on top of UNIX + * the errno returned by system calls may be unavailable due + * to trickery of making errno thread aware. + * This provides a kludge of getting at it. + */ + +#undef errno +extern int errno; +int host_errno(void) +{ + return errno; +} + diff --git a/c/src/exec/libcsupport/src/malloc.c b/c/src/exec/libcsupport/src/malloc.c index 702e6225ce..a7d14b14ab 100644 --- a/c/src/exec/libcsupport/src/malloc.c +++ b/c/src/exec/libcsupport/src/malloc.c @@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize( { rtems_status_code status; void *starting_address; + rtems_unsigned32 old_address; rtems_unsigned32 u32_address; /* @@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize( } if (u32_address & (CPU_ALIGNMENT-1)) { + old_address = u32_address; u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1); - /* XXX: if we do any alignment .. then length should be shortened */ + + /* + * Adjust the length by whatever we aligned by + */ + + length -= u32_address - old_address; } starting_address = (void *)u32_address; -- cgit v1.2.3