From 53afa8d96790cce8fd0d0ce71307bc7ae31c15fb Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 12 Apr 1995 01:03:38 +0000 Subject: Tue Apr 11 20:38:55 1995 Roland McGrath * sysdeps/i386/add_n.S [PIC]: Use self-call to avoid generating reloc. * sysdeps/i386/sub_n.S [PIC]: Likewise. * libc-symbols.h (_elf_set_element) [PIC]: Don't make the element word `const'. * Makeconfig (CPPFLAGS, CFLAGS): Fix swapped references to $(foo-$(suffix $@)). * manual/Makefile (chapters-incl): Filter out summary.texi. --- ChangeLog | 13 +++++++++++++ Makeconfig | 4 ++-- libc-symbols.h | 8 ++++++++ manual/Makefile | 4 ++-- sysdeps/i386/add_n.S | 7 +++++++ sysdeps/i386/sub_n.S | 7 +++++++ 6 files changed, 39 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index f859c74789..668e4bfa84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ +Tue Apr 11 20:38:55 1995 Roland McGrath + + * sysdeps/i386/add_n.S [PIC]: Use self-call to avoid generating reloc. + * sysdeps/i386/sub_n.S [PIC]: Likewise. + Mon Apr 10 14:53:15 1995 Roland McGrath + * libc-symbols.h (_elf_set_element) [PIC]: Don't make the element + word `const'. + + * Makeconfig (CPPFLAGS, CFLAGS): Fix swapped references to + $(foo-$(suffix $@)). + + * manual/Makefile (chapters-incl): Filter out summary.texi. + * stdlib/strtod.c (STRTOF): Use extra macro to make STRTOF's #defn a weak symbol instead of literal "STRTOF". diff --git a/Makeconfig b/Makeconfig index 1080646bc2..823b7f44f1 100644 --- a/Makeconfig +++ b/Makeconfig @@ -340,8 +340,8 @@ endif # gcc # These are the variables that the implicit compilation rules use. CPPFLAGS = $(+includes) $(defines) -include $(..)libc-symbols.h \ - $(sysdep-CPPFLAGS) $(CFLAGS-$(suffix $@)) -override CFLAGS = $(+cflags) $(sysdep-CFLAGS) $(CPPFLAGS-$(suffix $@)) + $(sysdep-CPPFLAGS) $(CPPFLAGS-$(suffix $@)) +override CFLAGS = $(+cflags) $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) # This is the macro that the implicit linking rules use. diff --git a/libc-symbols.h b/libc-symbols.h index 83773bfdc9..be88e7601b 100644 --- a/libc-symbols.h +++ b/libc-symbols.h @@ -153,9 +153,17 @@ Cambridge, MA 02139, USA. */ /* These are all done the same way in ELF. There is a new section created for each set. */ +#ifdef PIC +/* When building a shared library, make the set section writable, + because it will need to be relocated at run time anyway. */ +#define _elf_set_element(set, symbol) \ + static const void *__elf_set_##set##_element_##symbol##__ \ + __attribute__ ((section (#set))) = &(symbol) +#else #define _elf_set_element(set, symbol) \ static const void *const __elf_set_##set##_element_##symbol##__ \ __attribute__ ((section (#set))) = &(symbol) +#endif /* Define SET as a symbol set. This may be required (it is in a.out) to be able to use the set's contents. */ diff --git a/manual/Makefile b/manual/Makefile index 57e6ae2306..ca930fd481 100644 --- a/manual/Makefile +++ b/manual/Makefile @@ -1,6 +1,6 @@ # Makefile for the GNU C Library manual. -# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. +# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -35,11 +35,11 @@ endif include chapters chapters: libc.texinfo $(find-includes) -chapters := $(filter-out summary.texi,$(chapters)) ifdef chapters include chapters-incl chapters-incl: $(chapters) $(find-includes) +chapters-incl := $(filter-out summary.texi,$(chapters-incl)) endif define find-includes diff --git a/sysdeps/i386/add_n.S b/sysdeps/i386/add_n.S index f528976866..02f696ae5e 100644 --- a/sysdeps/i386/add_n.S +++ b/sysdeps/i386/add_n.S @@ -53,7 +53,14 @@ C_SYMBOL_NAME(__mpn_add_n:) subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ +#ifdef PIC + call here +here: leal (Loop - 3 - here)(%eax,%eax,8),%eax + addl (%esp),%eax + addl $4,%esp +#else leal (Loop - 3)(%eax,%eax,8),%eax /* calc start addr in loop */ +#endif jmp *%eax /* jump into loop */ ALIGN (3) Loop: movl (%esi),%eax diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S index a1630d4562..63086bd7fd 100644 --- a/sysdeps/i386/sub_n.S +++ b/sysdeps/i386/sub_n.S @@ -53,7 +53,14 @@ C_SYMBOL_NAME(__mpn_sub_n:) subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ +#ifdef PIC + call here +here: leal (Loop - 3 - here)(%eax,%eax,8),%eax + addl (%esp),%eax + addl $4,%esp +#else leal (Loop - 3)(%eax,%eax,8),%eax /* calc start addr in loop */ +#endif jmp *%eax /* jump into loop */ ALIGN (3) Loop: movl (%esi),%eax -- cgit v1.2.3