2002-08-29  Jakub Jelinek  <jakub@redhat.com>

	* stdio-common/vfprintf.c (vfprintf): Add builtin_expect for
	string_malloced, it is unlikely to be set.
	Only call free with non-NULL workspace.
	* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Use
	-mcpu=ultrasparc, not only tune for it.
	(ASFLAGS*): Set unconditionally.

2002-08-29  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/generic/readelflib.c (process_elf_file): Make loadaddr
	ElfW(Addr).  Don't mask upper 32-bits and lower 12 bits off from
	p_vaddr/p_offset when computing loadaddr.
This commit is contained in:
Ulrich Drepper 2002-08-29 10:42:30 +00:00
parent 69f8b5e823
commit c98d82db4c
6 changed files with 51 additions and 26 deletions

View File

@ -1,3 +1,18 @@
2002-08-29 Jakub Jelinek <jakub@redhat.com>
* stdio-common/vfprintf.c (vfprintf): Add builtin_expect for
string_malloced, it is unlikely to be set.
Only call free with non-NULL workspace.
* sysdeps/sparc/sparc32/sparcv9/Makefile (sysdep-CFLAGS): Use
-mcpu=ultrasparc, not only tune for it.
(ASFLAGS*): Set unconditionally.
2002-08-29 Jakub Jelinek <jakub@redhat.com>
* sysdeps/generic/readelflib.c (process_elf_file): Make loadaddr
ElfW(Addr). Don't mask upper 32-bits and lower 12 bits off from
p_vaddr/p_offset when computing loadaddr.
2002-08-29 Ulrich Drepper <drepper@redhat.com>
* version.h (VERSION): Bump to 2.2.92.

View File

@ -1,3 +1,13 @@
2002-04-24 Steven Munroe <sjmunroe@us.ibm.com>
* spinlock.c (__pthread_lock): Fix spurious wakeup
handling. Don't clear lowest bit of list pointer as sign the thread
is still on the wait list. Don't restart after spurious wakeup
with spinning to get the lock.
(__pthread_unlock): Take set lowest bit into account when handling
pointer to list elements.
Patch by Steve Munroe <sjmunroe@us.ibm.com>.
2002-08-28 Roland McGrath <roland@redhat.com>
* sysdeps/pthread/timer_routines.c (thread_func): Fix type in cast.

View File

@ -85,8 +85,6 @@ void internal_function __pthread_lock(struct _pthread_fastlock * lock,
spurious_wakeup_count = 0;
spin_count = 0;
again:
/* On SMP, try spinning to get the lock. */
if (__pthread_smp_kernel) {
@ -114,6 +112,8 @@ again:
lock->__spinlock += (spin_count - lock->__spinlock) / 8;
}
again:
/* No luck, try once more or suspend. */
do {
@ -130,7 +130,7 @@ again:
}
if (self != NULL) {
THREAD_SETMEM(self, p_nextlock, (pthread_descr) (oldstatus & ~1L));
THREAD_SETMEM(self, p_nextlock, (pthread_descr) (oldstatus));
/* Make sure the store in p_nextlock completes before performing
the compare-and-swap */
MEMORY_BARRIER();
@ -214,7 +214,7 @@ again:
maxprio = thr->p_priority;
}
ptr = &(thr->p_nextlock);
thr = *ptr;
thr = (pthread_descr)((long)(thr->p_nextlock) & ~1L);
}
/* Remove max prio thread from waiting list. */
@ -226,13 +226,13 @@ again:
least significant bit is clear. */
thr = (pthread_descr) (oldstatus & ~1L);
if (! __compare_and_swap_with_release_semantics
(&lock->__status, oldstatus, (long)(thr->p_nextlock)))
(&lock->__status, oldstatus, (long)(thr->p_nextlock) & ~1L))
goto again;
} else {
/* No risk of concurrent access, remove max prio thread normally.
But in this case we must also flip the least significant bit
of the status to mark the lock as released. */
thr = *maxptr;
thr = (pthread_descr)((long)*maxptr & ~1L);
*maxptr = thr->p_nextlock;
/* Ensure deletion from linked list completes before we

View File

@ -1084,7 +1084,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
outstring (string, len); \
if (left) \
PAD (L' '); \
if (string_malloced) \
if (__builin_expect (string_malloced, 0)) \
free (string); \
} \
break;
@ -1255,7 +1255,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
outstring (string, len); \
if (left) \
PAD (' '); \
if (string_malloced) \
if (__builtin_expect (string_malloced, 0)) \
free (string); \
} \
break;
@ -1595,6 +1595,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
/* The format is correctly handled. */
++nspecs_done;
if (__builtin_expect (workstart != NULL, 0))
free (workstart);
workstart = NULL;
@ -1893,6 +1894,7 @@ do_positional:
break;
}
if (__builtin_expect (workstart != NULL, 0))
free (workstart);
workstart = NULL;
@ -1904,6 +1906,7 @@ do_positional:
}
all_done:
if (__builtin_expect (workstart != NULL, 0))
free (workstart);
/* Unlock the stream. */
#ifdef USE_IN_LIBIO

View File

@ -46,7 +46,7 @@ process_elf_file (const char *file_name, const char *lib, int *flag,
{
int i;
unsigned int j;
int loadaddr;
ElfW(Addr) loadaddr;
unsigned int dynamic_addr;
size_t dynamic_size;
char *program_interpreter;
@ -101,8 +101,7 @@ process_elf_file (const char *file_name, const char *lib, int *flag,
{
case PT_LOAD:
if (loadaddr == -1)
loadaddr = (segment->p_vaddr & 0xfffff000)
- (segment->p_offset & 0xfffff000);
loadaddr = segment->p_vaddr - segment_p_offset;
break;
case PT_DYNAMIC:

View File

@ -1,15 +1,13 @@
sysdep-CFLAGS += -mcpu=v8 -mtune=ultrasparc -Wa,-Av9a
sysdep-CFLAGS += -mcpu=ultrasparc -Wa,-Av9a
ifeq ($(subdir),csu)
sysdep_routines += hp-timing
static-only-routines += hp-timing
endif
ifeq ($(subst gnulib,string,$(subdir)),string)
ASFLAGS-.o += -Wa,-Av9a
ASFLAGS-.os += -Wa,-Av9a
ASFLAGS-.op += -Wa,-Av9a
ASFLAGS-.og += -Wa,-Av9a
ASFLAGS-.ob += -Wa,-Av9a
ASFLAGS-.oS += -Wa,-Av9a
endif