--- gcc/config/svr4.h 2018/04/24 18:20:29 1.1.1.7 +++ gcc/config/svr4.h 2018/04/24 18:33:34 1.1.1.9 @@ -1,7 +1,7 @@ -/* svr4.h -- operating system specific defines to be used when - targeting GCC for some generic System V Release 4 system. - Copyright (C) 1991, 1994 Free Software Foundation, Inc. - Contributed by Ron Guilmette (rfg@netcom.com). +/* Operating system specific defines to be used when targeting GCC for some + generic System V Release 4 system. + Copyright (C) 1991, 1994, 1995 Free Software Foundation, Inc. + Contributed by Ron Guilmette (rfg@segfault.us.com). This file is part of GNU CC. @@ -17,7 +17,8 @@ GNU General Public License for more deta You should have received a copy of the GNU General Public License along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. To use this file, make up a file with a name like: @@ -122,17 +123,25 @@ the Free Software Foundation, 675 Mass A #define MD_STARTFILE_PREFIX "/usr/ccs/lib/" /* Provide a LIB_SPEC appropriate for svr4. Here we tack on the default - standard C library (unless we are building a shared library) followed by - our own magical crtend.o file (see crtstuff.c) which provides part of - the support for getting C++ file-scope static object constructed before + standard C library (unless we are building a shared library). */ + +#undef LIB_SPEC +#define LIB_SPEC "%{!shared:%{!symbolic:-lc}}" + +/* Provide a LIBGCC_SPEC appropriate for svr4. We also want to exclude + libgcc when -symbolic. */ + +#undef LIBGCC_SPEC +#define LIBGCC_SPEC "%{!shared:%{!symbolic:-lgcc}}" + +/* Provide an ENDFILE_SPEC appropriate for svr4. Here we tack on our own + magical crtend.o file (see crtstuff.c) which provides part of the + support for getting C++ file-scope static object constructed before entering `main', followed by the normal svr3/svr4 "finalizer" file, which is either `gcrtn.o' or `crtn.o'. */ -#undef LIB_SPEC -#define LIB_SPEC \ - "%{!shared:%{!symbolic:-lc}} \ - crtend.o%s \ - %{!shared:%{!symbolic:%{pg:gcrtn.o}%{!pg:crtn.o%s}}}" +#undef ENDFILE_SPEC +#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:crtn.o%s}" /* Provide a LINK_SPEC appropriate for svr4. Here we provide support for the special GCC options -static, -shared, and -symbolic which @@ -161,8 +170,8 @@ the Free Software Foundation, 675 Mass A #define LINK_SPEC "%{h*} %{V} %{v:%{!V:-V}} \ %{b} %{Wl,*:%*} \ %{static:-dn -Bstatic} \ - %{shared:-G -dy} \ - %{symbolic:-Bsymbolic -G -dy} \ + %{shared:-G -dy -z text %{!h*:%{o*:-h %*}}} \ + %{symbolic:-Bsymbolic -G -dy -z text %{!h*:%{o*:-h %*}}} \ %{G:-G} \ %{YP,*} \ %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ @@ -184,12 +193,13 @@ the Free Software Foundation, 675 Mass A #undef STARTFILE_SPEC #define STARTFILE_SPEC "%{!shared: \ %{!symbolic: \ - %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}} \ - %{pg:gcrti.o%s}%{!pg:crti.o%s} \ - %{ansi:values-Xc.o%s} \ - %{!ansi: \ - %{traditional:values-Xt.o%s} \ - %{!traditional:values-Xa.o%s}}}} crtbegin.o%s" + %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}\ + %{pg:gcrti.o%s}%{!pg:crti.o%s} \ + %{ansi:values-Xc.o%s} \ + %{!ansi: \ + %{traditional:values-Xt.o%s} \ + %{!traditional:values-Xa.o%s}} \ + crtbegin.o%s" /* Attach a special .ident directive to the end of the file to identify the version of GCC which compiled this code. The format of the @@ -291,10 +301,11 @@ while (0) do \ { \ static int sym_lineno = 1; \ - fprintf (file, ".stabn 68,0,%d,.LM%d-%s\n.LM%d:\n", \ - line, sym_lineno, \ - XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0), \ - sym_lineno); \ + fprintf (file, ".stabn 68,0,%d,.LM%d-", \ + line, sym_lineno); \ + assemble_name (file, \ + XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ + fprintf (file, "\n.LM%d:\n", sym_lineno); \ sym_lineno += 1; \ } \ while (0) @@ -304,6 +315,14 @@ while (0) #define DBX_FUNCTION_FIRST +/* Generate a blank trailing N_SO to mark the end of the .o file, since + we can't depend upon the linker to mark .o file boundaries with + embedded stabs. */ + +#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ + fprintf (FILE, \ + "\t.text\n\t.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO) + /* Define the actual types of some ANSI-mandated types. (These definitions should work for most SVR4 systems). */ @@ -468,16 +487,33 @@ do { \ #define USE_CONST_SECTION 1 #define CONST_SECTION_ASM_OP ".section\t.rodata" -#define CTORS_SECTION_ASM_OP ".section\t.ctors,\"a\",@progbits" -#define DTORS_SECTION_ASM_OP ".section\t.dtors,\"a\",@progbits" -/* On svr4, we *do* have support for the .init section, and we can put - stuff in there to be executed before `main'. We let crtstuff.c and - other files know this by defining the following symbol. The definition - says how to change sections to the .init section. This is the same - for all know svr4 assemblers. */ +/* Define the pseudo-ops used to switch to the .ctors and .dtors sections. + + Note that we want to give these sections the SHF_WRITE attribute + because these sections will actually contain data (i.e. tables of + addresses of functions in the current root executable or shared library + file) and, in the case of a shared library, the relocatable addresses + will have to be properly resolved/relocated (and then written into) by + the dynamic linker when it actually attaches the given shared library + to the executing process. (Note that on SVR4, you may wish to use the + `-z text' option to the ELF linker, when building a shared library, as + an additional check that you are doing everything right. But if you do + use the `-z text' option when building a shared library, you will get + errors unless the .ctors and .dtors sections are marked as writable + via the SHF_WRITE attribute.) */ + +#define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\"" +#define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\"" + +/* On svr4, we *do* have support for the .init and .fini sections, and we + can put stuff in there to be executed before and after `main'. We let + crtstuff.c and other files know this by defining the following symbols. + The definitions say how to change sections to the .init and .fini + sections. This is the same for all known svr4 assemblers. */ #define INIT_SECTION_ASM_OP ".section\t.init" +#define FINI_SECTION_ASM_OP ".section\t.fini" /* A default list of other sections which we might be "in" at any given time. For targets that use additional sections (e.g. .tdesc) you @@ -537,10 +573,15 @@ dtors_section () \ } /* Switch into a generic section. - This is currently only used to support section attributes. */ + This is currently only used to support section attributes. + + We make the section read-only and executable for a function decl, + read-only for a const data decl, and writable for a non-const data decl. */ +#define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME) \ + fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \ + (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \ + (DECL) && TREE_READONLY (DECL) ? "a" : "aw") -#define ASM_OUTPUT_SECTION(FILE, NAME) \ - fprintf (FILE, ".section\t%s,\"a\",@progbits\n", NAME) /* A C statement (sans semicolon) to output an element in the table of global constructors. */ @@ -608,7 +649,12 @@ dtors_section () \ #define TYPE_ASM_OP ".type" #define SIZE_ASM_OP ".size" -#define WEAK_ASM_OP ".weak" + +/* This is how we tell the assembler that a symbol is weak. */ + +#define ASM_WEAKEN_LABEL(FILE,NAME) \ + do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \ + fputc ('\n', FILE); } while (0) /* The following macro defines the format used to output the second operand of the .type assembler directive. Different svr4 assemblers @@ -844,3 +890,6 @@ do { \ fprintf ((FILE), "\"\n"); \ } \ while (0) + +/* All SVR4 targets use the ELF object file format. */ +#define OBJECT_FORMAT_ELF