forked from Imagelibrary/rtems
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:
42
c/src/exec/libcsupport/src/hosterr.c
Normal file
42
c/src/exec/libcsupport/src/hosterr.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize(
|
|||||||
{
|
{
|
||||||
rtems_status_code status;
|
rtems_status_code status;
|
||||||
void *starting_address;
|
void *starting_address;
|
||||||
|
rtems_unsigned32 old_address;
|
||||||
rtems_unsigned32 u32_address;
|
rtems_unsigned32 u32_address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (u32_address & (CPU_ALIGNMENT-1)) {
|
if (u32_address & (CPU_ALIGNMENT-1)) {
|
||||||
|
old_address = u32_address;
|
||||||
u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
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;
|
starting_address = (void *)u32_address;
|
||||||
|
|||||||
42
c/src/lib/libc/hosterr.c
Normal file
42
c/src/lib/libc/hosterr.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize(
|
|||||||
{
|
{
|
||||||
rtems_status_code status;
|
rtems_status_code status;
|
||||||
void *starting_address;
|
void *starting_address;
|
||||||
|
rtems_unsigned32 old_address;
|
||||||
rtems_unsigned32 u32_address;
|
rtems_unsigned32 u32_address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (u32_address & (CPU_ALIGNMENT-1)) {
|
if (u32_address & (CPU_ALIGNMENT-1)) {
|
||||||
|
old_address = u32_address;
|
||||||
u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
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;
|
starting_address = (void *)u32_address;
|
||||||
|
|||||||
42
cpukit/libcsupport/src/hosterr.c
Normal file
42
cpukit/libcsupport/src/hosterr.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize(
|
|||||||
{
|
{
|
||||||
rtems_status_code status;
|
rtems_status_code status;
|
||||||
void *starting_address;
|
void *starting_address;
|
||||||
|
rtems_unsigned32 old_address;
|
||||||
rtems_unsigned32 u32_address;
|
rtems_unsigned32 u32_address;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (u32_address & (CPU_ALIGNMENT-1)) {
|
if (u32_address & (CPU_ALIGNMENT-1)) {
|
||||||
|
old_address = u32_address;
|
||||||
u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
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;
|
starting_address = (void *)u32_address;
|
||||||
|
|||||||
Reference in New Issue
Block a user