Update.
1998-07-14 19:39 Ulrich Drepper <drepper@cygnus.com> * stdio-common/vfscanf.c (ungetc): Use _IO_sputbackc, not _IO_ungetc. [_USE_IN_LIBIO] (encode_error): Free cancelation handler. (conv_error): Likewise. (input_error): Likewise. (memory_error): Likewise. 1998-07-12 Mark Kettenis <kettenis@phys.uva.nl> * sysdeps/mach/hurd/dl-sysdep.c: Bring in sync with generic implementation. Include <entry.h>. Replace references to symbol _start with macro ENTRY_POINT. (__libc_uid): Remove. (__libc_multiple_libcs): New variable. (__libc_stack_end): New variable. (_dl_hwcap_mask): New variable. (_dl_important_hwcaps): New function. (_dl_show_auxv): Mark internal.
This commit is contained in:
parent
19cc96bfe5
commit
c764b9a728
20
ChangeLog
20
ChangeLog
|
@ -1,3 +1,23 @@
|
||||||
|
1998-07-14 19:39 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* stdio-common/vfscanf.c (ungetc): Use _IO_sputbackc, not _IO_ungetc.
|
||||||
|
[_USE_IN_LIBIO] (encode_error): Free cancelation handler.
|
||||||
|
(conv_error): Likewise.
|
||||||
|
(input_error): Likewise.
|
||||||
|
(memory_error): Likewise.
|
||||||
|
|
||||||
|
1998-07-12 Mark Kettenis <kettenis@phys.uva.nl>
|
||||||
|
|
||||||
|
* sysdeps/mach/hurd/dl-sysdep.c: Bring in sync with generic
|
||||||
|
implementation. Include <entry.h>. Replace references to symbol
|
||||||
|
_start with macro ENTRY_POINT.
|
||||||
|
(__libc_uid): Remove.
|
||||||
|
(__libc_multiple_libcs): New variable.
|
||||||
|
(__libc_stack_end): New variable.
|
||||||
|
(_dl_hwcap_mask): New variable.
|
||||||
|
(_dl_important_hwcaps): New function.
|
||||||
|
(_dl_show_auxv): Mark internal.
|
||||||
|
|
||||||
1998-07-14 Mark Kettenis <kettenis@phys.uva.nl>
|
1998-07-14 Mark Kettenis <kettenis@phys.uva.nl>
|
||||||
|
|
||||||
* mach/Makefile: Create target directory before generating
|
* mach/Makefile: Create target directory before generating
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
1998-07-14 19:38 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/pthread/bits/libc-lock.h: Define __libc_cleanup_end.
|
||||||
|
|
||||||
1998-07-11 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
1998-07-11 Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
||||||
|
|
||||||
* Examples/ex6.c: Include <unistd.h> for usleep.
|
* Examples/ex6.c: Include <unistd.h> for usleep.
|
||||||
|
|
|
@ -131,6 +131,12 @@ typedef pthread_key_t __libc_key_t;
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sometimes we have to exit the block in the middle. */
|
||||||
|
#define __libc_cleanup_end(DOIT) \
|
||||||
|
if (_avail) { \
|
||||||
|
_pthread_cleanup_pop_restore (&_buffer, (DOIT)); \
|
||||||
|
}
|
||||||
|
|
||||||
/* Create thread-specific key. */
|
/* Create thread-specific key. */
|
||||||
#define __libc_key_create(KEY, DESTRUCTOR) \
|
#define __libc_key_create(KEY, DESTRUCTOR) \
|
||||||
(__pthread_key_create != NULL ? __pthread_key_create (KEY, DESTRUCTOR) : 1)
|
(__pthread_key_create != NULL ? __pthread_key_create (KEY, DESTRUCTOR) : 1)
|
||||||
|
|
|
@ -55,30 +55,35 @@
|
||||||
|
|
||||||
# undef va_list
|
# undef va_list
|
||||||
# define va_list _IO_va_list
|
# define va_list _IO_va_list
|
||||||
# define ungetc(c, s) ((void) ((int) c != EOF && --read_in), \
|
# define ungetc(c, s) ((void) ((int) c == EOF \
|
||||||
_IO_ungetc (c, s))
|
|| (--read_in, \
|
||||||
|
_IO_sputbackc (s, (unsigned char) c))))
|
||||||
# define inchar() (c == EOF ? EOF \
|
# define inchar() (c == EOF ? EOF \
|
||||||
: ((c = _IO_getc_unlocked (s)), \
|
: ((c = _IO_getc_unlocked (s)), \
|
||||||
(void) (c != EOF && ++read_in), c))
|
(void) (c != EOF && ++read_in), c))
|
||||||
# define encode_error() do { \
|
# define encode_error() do { \
|
||||||
if (errp != NULL) *errp |= 4; \
|
if (errp != NULL) *errp |= 4; \
|
||||||
_IO_funlockfile (s); \
|
_IO_funlockfile (s); \
|
||||||
|
__libc_cleanup_end (0); \
|
||||||
__set_errno (EILSEQ); \
|
__set_errno (EILSEQ); \
|
||||||
return done; \
|
return done; \
|
||||||
} while (0)
|
} while (0)
|
||||||
# define conv_error() do { \
|
# define conv_error() do { \
|
||||||
if (errp != NULL) *errp |= 2; \
|
if (errp != NULL) *errp |= 2; \
|
||||||
_IO_funlockfile (s); \
|
_IO_funlockfile (s); \
|
||||||
|
__libc_cleanup_end (0); \
|
||||||
return done; \
|
return done; \
|
||||||
} while (0)
|
} while (0)
|
||||||
# define input_error() do { \
|
# define input_error() do { \
|
||||||
_IO_funlockfile (s); \
|
_IO_funlockfile (s); \
|
||||||
if (errp != NULL) *errp |= 1; \
|
if (errp != NULL) *errp |= 1; \
|
||||||
|
__libc_cleanup_end (0); \
|
||||||
return done ?: EOF; \
|
return done ?: EOF; \
|
||||||
} while (0)
|
} while (0)
|
||||||
# define memory_error() do { \
|
# define memory_error() do { \
|
||||||
_IO_funlockfile (s); \
|
_IO_funlockfile (s); \
|
||||||
__set_errno (ENOMEM); \
|
__set_errno (ENOMEM); \
|
||||||
|
__libc_cleanup_end (0); \
|
||||||
return EOF; \
|
return EOF; \
|
||||||
} while (0)
|
} while (0)
|
||||||
# define ARGCHECK(s, format) \
|
# define ARGCHECK(s, format) \
|
||||||
|
|
|
@ -37,16 +37,24 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#include "dl-machine.h"
|
#include <entry.h>
|
||||||
|
#include <dl-machine.h>
|
||||||
|
#include <dl-procinfo.h>
|
||||||
|
|
||||||
extern void __mach_init (void);
|
extern void __mach_init (void);
|
||||||
|
|
||||||
extern int _dl_argc;
|
extern int _dl_argc;
|
||||||
extern char **_dl_argv;
|
extern char **_dl_argv;
|
||||||
extern char **_environ;
|
extern char **_environ;
|
||||||
|
extern void ENTRY_POINT (void);
|
||||||
|
|
||||||
uid_t __libc_uid;
|
|
||||||
int __libc_enable_secure;
|
int __libc_enable_secure;
|
||||||
|
int __libc_multiple_libcs; /* Defining this here avoids the inclusion
|
||||||
|
of init-first. */
|
||||||
|
/* This variable containts the lowest stack address ever used. */
|
||||||
|
void *__libc_stack_end;
|
||||||
|
unsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT;
|
||||||
|
|
||||||
|
|
||||||
struct hurd_startup_data *_dl_hurd_data;
|
struct hurd_startup_data *_dl_hurd_data;
|
||||||
|
|
||||||
|
@ -86,8 +94,6 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
void (*dl_main) (const Elf32_Phdr *phdr, Elf32_Word phent,
|
void (*dl_main) (const Elf32_Phdr *phdr, Elf32_Word phent,
|
||||||
Elf32_Addr *user_entry))
|
Elf32_Addr *user_entry))
|
||||||
{
|
{
|
||||||
extern void _start ();
|
|
||||||
|
|
||||||
void go (int *argdata)
|
void go (int *argdata)
|
||||||
{
|
{
|
||||||
extern unsigned int _dl_skip_args; /* rtld.c */
|
extern unsigned int _dl_skip_args; /* rtld.c */
|
||||||
|
@ -103,21 +109,20 @@ _dl_sysdep_start (void **start_argptr,
|
||||||
{
|
{
|
||||||
static struct hurd_startup_data nodata;
|
static struct hurd_startup_data nodata;
|
||||||
_dl_hurd_data = &nodata;
|
_dl_hurd_data = &nodata;
|
||||||
nodata.user_entry = (vm_address_t) &_start;
|
nodata.user_entry = (vm_address_t) &ENTRY_POINT;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_dl_hurd_data = (void *) p;
|
_dl_hurd_data = (void *) p;
|
||||||
|
|
||||||
__libc_uid = __getuid ();
|
|
||||||
__libc_enable_secure = _dl_hurd_data->flags & EXEC_SECURE;
|
__libc_enable_secure = _dl_hurd_data->flags & EXEC_SECURE;
|
||||||
|
|
||||||
if (_dl_hurd_data->flags & EXEC_STACK_ARGS &&
|
if (_dl_hurd_data->flags & EXEC_STACK_ARGS &&
|
||||||
_dl_hurd_data->user_entry == 0)
|
_dl_hurd_data->user_entry == 0)
|
||||||
_dl_hurd_data->user_entry = (vm_address_t) &_start;
|
_dl_hurd_data->user_entry = (vm_address_t) &ENTRY_POINT;
|
||||||
|
|
||||||
unfmh(); /* XXX */
|
unfmh(); /* XXX */
|
||||||
|
|
||||||
if (_dl_hurd_data->user_entry == (vm_address_t) &_start)
|
if (_dl_hurd_data->user_entry == (vm_address_t) &ENTRY_POINT)
|
||||||
/* We were invoked as a command, not as the program interpreter.
|
/* We were invoked as a command, not as the program interpreter.
|
||||||
The generic ld.so code supports this: it will parse the args
|
The generic ld.so code supports this: it will parse the args
|
||||||
as "ld.so PROGRAM [ARGS...]". For booting the Hurd, we
|
as "ld.so PROGRAM [ARGS...]". For booting the Hurd, we
|
||||||
|
@ -576,11 +581,33 @@ _hurd_intr_rpc_mach_msg (mach_msg_header_t *msg,
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
|
internal_function
|
||||||
_dl_show_auxv (void)
|
_dl_show_auxv (void)
|
||||||
{
|
{
|
||||||
/* There is nothing to print. Hurd has no auxiliary vector. */
|
/* There is nothing to print. Hurd has no auxiliary vector. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return an array of useful/necessary hardware capability names. */
|
||||||
|
const struct r_strlenpair *
|
||||||
|
internal_function
|
||||||
|
_dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
|
||||||
|
size_t *max_capstrlen)
|
||||||
|
{
|
||||||
|
struct r_strlenpair *result;
|
||||||
|
|
||||||
|
/* Return an empty array. Hurd has no hardware capabilities. */
|
||||||
|
result = (struct r_strlenpair *) malloc (sizeof (*result));
|
||||||
|
if (result == NULL)
|
||||||
|
_dl_signal_error (ENOMEM, NULL, "cannot create capability list");
|
||||||
|
|
||||||
|
result[0].str = (char *) result; /* Does not really matter. */
|
||||||
|
result[0].len = 0;
|
||||||
|
|
||||||
|
*sz = 1;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
void weak_function
|
void weak_function
|
||||||
_dl_sysdep_fatal (const char *msg, ...)
|
_dl_sysdep_fatal (const char *msg, ...)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue