mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 09:43:32 +08:00
* 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:
parent
2064087b5f
commit
c928de7902
16
ChangeLog
16
ChangeLog
@ -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>
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user