Added PIC capability.
authorPaul Richards <paul@isl.cf.ac.uk>
Wed, 3 Nov 1993 02:37:33 +0000 (02:37 +0000)
committerPaul Richards <paul@isl.cf.ac.uk>
Wed, 3 Nov 1993 02:37:33 +0000 (02:37 +0000)
gnu/usr.bin/cc/lib/Makefile
gnu/usr.bin/cc/lib/config.h
gnu/usr.bin/cc/lib/tm.h

index bfd8040..233f457 100644 (file)
@@ -2,6 +2,7 @@ LIB = gcc2
 
 CFLAGS += -I${.CURDIR} -DNOFPU 
 NOPROFILE=no
 
 CFLAGS += -I${.CURDIR} -DNOFPU 
 NOPROFILE=no
+NOPIC=no
 
 SRCS =  aux-output.c c-common.c caller-save.c calls.c combine.c \
        convert.c cse.c dbxout.c dwarfout.c emit-rtl.c explow.c \
 
 SRCS =  aux-output.c c-common.c caller-save.c calls.c combine.c \
        convert.c cse.c dbxout.c dwarfout.c emit-rtl.c explow.c \
index eb90681..0c71d61 100644 (file)
@@ -42,6 +42,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define alloca __builtin_alloca
 #endif
 
 #define alloca __builtin_alloca
 #endif
 
+#define ASM_SPEC   " %| %{fpic:-k} %{fPIC:-k}"
+#define LINK_SPEC \
+  "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
+
 /* target machine dependencies.
    tm.h is a symbolic link to the actual target specific file.   */
 
 /* target machine dependencies.
    tm.h is a symbolic link to the actual target specific file.   */
 
index f7fbac1..6936685 100644 (file)
 /* Don't default to pcc-struct-return, because gcc is the only compiler, and
    we want to retain compatibility with older gcc versions.  */
 #define DEFAULT_PCC_STRUCT_RETURN 0
 /* Don't default to pcc-struct-return, because gcc is the only compiler, and
    we want to retain compatibility with older gcc versions.  */
 #define DEFAULT_PCC_STRUCT_RETURN 0
+
+/*
+ * Some imports from svr4.h in support of shared libraries.
+ * Currently, we need the DECLARE_OBJECT_SIZE stuff.
+ */
+
+/* Define the strings used for the special svr4 .type and .size directives.
+   These strings generally do not vary from one system running svr4 to
+   another, but if a given system (e.g. m88k running svr) needs to use
+   different pseudo-op names for these, they may be overridden in the
+   file which includes this one.  */
+
+#define TYPE_ASM_OP   ".type"
+#define SIZE_ASM_OP   ".size"
+#define WEAK_ASM_OP   ".weak"
+
+/* The following macro defines the format used to output the second
+   operand of the .type assembler directive.  Different svr4 assemblers
+   expect various different forms for this operand.  The one given here
+   is just a default.  You may need to override it in your machine-
+   specific tm.h file (depending upon the particulars of your assembler).  */
+
+#define TYPE_OPERAND_FMT "@%s"
+
+/* Write the extra assembler code needed to declare a function's result.
+   Most svr4 assemblers don't require any special declaration of the
+   result value, but there are exceptions.  */
+
+#ifndef ASM_DECLARE_RESULT
+#define ASM_DECLARE_RESULT(FILE, RESULT)
+#endif
+
+/* These macros generate the special .type and .size directives which
+   are used to set the corresponding fields of the linker symbol table
+   entries in an ELF object file under SVR4.  These macros also output
+   the starting labels for the relevant functions/objects.  */
+
+/* Write the extra assembler code needed to declare a function properly.
+   Some svr4 assemblers need to also have something extra said about the
+   function's return value.  We allow for that here.  */
+
+#ifdef notyet
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL)       \
+  do {                         \
+    fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);            \
+    assemble_name (FILE, NAME);                  \
+    putc (',', FILE);                   \
+    fprintf (FILE, TYPE_OPERAND_FMT, "function");         \
+    putc ('\n', FILE);                     \
+    ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL));        \
+    ASM_OUTPUT_LABEL(FILE, NAME);             \
+  } while (0)
+
+/* Write the extra assembler code needed to declare an object properly.  */
+
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)         \
+  do {                         \
+    fprintf (FILE, "\t%s\t ", TYPE_ASM_OP);            \
+    assemble_name (FILE, NAME);                  \
+    putc (',', FILE);                   \
+    fprintf (FILE, TYPE_OPERAND_FMT, "object");           \
+    putc ('\n', FILE);                     \
+    if (!flag_inhibit_size_directive)               \
+      {                           \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);            \
+ assemble_name (FILE, NAME);               \
+ fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (decl)));   \
+      }                           \
+    ASM_OUTPUT_LABEL(FILE, NAME);             \
+  } while (0)
+
+/* This is how to declare the size of a function.  */
+
+#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL)         \
+  do {                         \
+    if (!flag_inhibit_size_directive)               \
+      {                           \
+        char label[256];                \
+ static int labelno;                 \
+ labelno++;                    \
+ ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno);     \
+ ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno);     \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);            \
+ assemble_name (FILE, (FNAME));               \
+        fprintf (FILE, ",");                  \
+ assemble_name (FILE, label);              \
+        fprintf (FILE, "-");                  \
+ assemble_name (FILE, (FNAME));               \
+ putc ('\n', FILE);                  \
+      }                           \
+  } while (0)
+#endif
+
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL)         \
+  do {                         \
+    if (!flag_inhibit_size_directive)               \
+      {                           \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP);            \
+ assemble_name (FILE, NAME);               \
+ fprintf (FILE, ",%d\n",  int_size_in_bytes (TREE_TYPE (decl)));   \
+      }                           \
+    ASM_OUTPUT_LABEL(FILE, NAME);             \
+  } while (0)