* elf/dl-deps.c (_dl_map_object_deps): Start TAILP at last preload.

* elf/dl-open.c (_dl_open): Force an indirect call for
	_dl_relocate_object so there is no chance a PLT fixup will be done
	and clobber _dl_global_scope before our call happens.

	* sysdeps/i386/fpu/__math.h (tan): Correct output constraint from =u
	to =t; must operate on top of fp reg stack, not second from top.
	Correct input constraint to 0 from t; must be explicit when input and
	output are the same register.
	(floor): Use __volatile instead of volatile.
	(ceil): Likewise.

	* manual/Makefile ($(objpfx)stamp%-$(subdir)): Separate rule from
	other targets.
This commit is contained in:
Roland McGrath 1996-07-14 10:04:21 +00:00
parent 2064087b5f
commit c928de7902
5 changed files with 50 additions and 19 deletions

View File

@ -1,6 +1,20 @@
Sun Jul 14 01:51:39 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* manual/Makefile (glibc-targets): Variable and targets removed.
* elf/dl-deps.c (_dl_map_object_deps): Start TAILP at last preload.
* elf/dl-open.c (_dl_open): Force an indirect call for
_dl_relocate_object so there is no chance a PLT fixup will be done
and clobber _dl_global_scope before our call happens.
* sysdeps/i386/fpu/__math.h (tan): Correct output constraint from =u
to =t; must operate on top of fp reg stack, not second from top.
Correct input constraint to 0 from t; must be explicit when input and
output are the same register.
(floor): Use __volatile instead of volatile.
(ceil): Likewise.
* manual/Makefile ($(objpfx)stamp%-$(subdir)): Separate rule from
other targets.
Sat Jul 13 23:50:17 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>

View File

@ -45,7 +45,10 @@ _dl_map_object_deps (struct link_map *map,
}
/* Terminate the list. */
head[nlist++].next = NULL;
head[nlist].next = NULL;
/* Start here for adding dependencies to the list. */
tailp = &head[nlist++];
/* We use `l_reserved' as a mark bit to detect objects we have already
put in the search list and avoid adding duplicate elements later in
@ -56,7 +59,7 @@ _dl_map_object_deps (struct link_map *map,
dependencies and appending them to the list as we step through it.
This produces a flat, ordered list that represents a breadth-first
search of the dependency tree. */
for (scanp = tailp = head; scanp; scanp = scanp->next)
for (scanp = head; scanp; scanp = scanp->next)
{
struct link_map *l = scanp->map;

View File

@ -52,8 +52,16 @@ _dl_open (const char *file, int mode)
{
if (! l->l_relocated)
{
_dl_relocate_object (l, _dl_object_relocation_scope (l),
(mode & RTLD_BINDING_MASK) == RTLD_LAZY);
/* We use an indirect call call for _dl_relocate_object because
we must avoid using the PLT in the call. If our PLT entry for
_dl_relocate_object hasn't been used yet, then the dynamic
linker fixup routine will clobber _dl_global_scope during its
work. We must be sure that nothing will require a PLT fixup
between when _dl_object_relocation_scope returns and when we
enter the dynamic linker's code (_dl_relocate_object). */
__typeof (_dl_relocate_object) *reloc = &_dl_relocate_object;
(*reloc) (l, _dl_object_relocation_scope (l),
(mode & RTLD_BINDING_MASK) == RTLD_LAZY);
*_dl_global_scope_end = NULL;
}

View File

@ -151,14 +151,20 @@ subdir_%: % ;
# For targets we don't define, do nothing.
subdir_%: ;
# These are targets that each glibc subdirectory is expected to understand.
# ../Rules defines them for code subdirectories; for us, they are no-ops.
glibc-targets := subdir_lib objects objs others tests subdir_lint.out \
subdir_echo-headers subdir_echo-distinfo stubs
.PHONY: $(glibc-targets)
$(glibc-targets):
# Create stamp files if they don't exist, so the parent makefile's rules for
# updating the library archives are happy with us, and never think we have
# changed the library.
.PHONY: lib stubs
lib: $(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir))
stubs: $(common-objpfx)stub-manual
$(objpfx)stamp%-$(subdir) $(common-objpfx)stub-manual ../po/manual.pot:
cp /dev/null $@
$(common-objpfx)stub-manual ../po/manual.pot:; cp /dev/null $@
$(objpfx)stamp%-$(subdir):; cp /dev/null $@
# The top-level glibc Makefile expects subdir_install to update the stubs file.
subdir_install: stubs

View File

@ -120,7 +120,7 @@ tan (double __x)
register double __value;
__asm __volatile__
("fptan"
: "=u" (__value) : "t" (__x));
: "=t" (__value) : "0" (__x));
return __value;
}
@ -334,13 +334,13 @@ __MATH_INLINE double
floor (double __x)
{
register double __value;
volatile short __cw, __cwtmp;
__volatile unsigned short int __cw, __cwtmp;
__asm volatile ("fnstcw %0" : "=m" (__cw));
__asm __volatile ("fnstcw %0" : "=m" (__cw));
__cwtmp = (__cw & 0xf3ff) | 0x0400; /* rounding down */
__asm volatile ("fldcw %0" : : "m" (__cwtmp));
__asm volatile ("frndint" : "=t" (__value) : "0" (__x));
__asm volatile ("fldcw %0" : : "m" (__cw));
__asm __volatile ("fldcw %0" : : "m" (__cwtmp));
__asm __volatile ("frndint" : "=t" (__value) : "0" (__x));
__asm __volatile ("fldcw %0" : : "m" (__cw));
return __value;
}
@ -350,13 +350,13 @@ __MATH_INLINE double
ceil (double __x)
{
register double __value;
volatile short __cw, __cwtmp;
__volatile unsigned short int __cw, __cwtmp;
__asm volatile ("fnstcw %0" : "=m" (__cw));
__asm __volatile ("fnstcw %0" : "=m" (__cw));
__cwtmp = (__cw & 0xf3ff) | 0x0800; /* rounding up */
__asm volatile ("fldcw %0" : : "m" (__cwtmp));
__asm volatile ("frndint" : "=t" (__value) : "0" (__x));
__asm volatile ("fldcw %0" : : "m" (__cw));
__asm __volatile ("fldcw %0" : : "m" (__cwtmp));
__asm __volatile ("frndint" : "=t" (__value) : "0" (__x));
__asm __volatile ("fldcw %0" : : "m" (__cw));
return __value;
}