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.
This commit is contained in:
Joel Sherrill
1995-08-11 14:33:04 +00:00
parent 4e58d80b9e
commit 4cc631db0f
6 changed files with 150 additions and 3 deletions

View File

@@ -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 <rtems.h>
#include <errno.h>
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;
}

View File

@@ -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;

42
c/src/lib/libc/hosterr.c Normal file
View File

@@ -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 <rtems.h>
#include <errno.h>
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;
}

View File

@@ -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;

View File

@@ -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 <rtems.h>
#include <errno.h>
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;
}

View File

@@ -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;