Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 134172 Details for
Bug 192403
sys-devel/gcc-4.2.0 links libgcc_s.so.1 into everything on freebsd
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Sync x86 and sparc64 targets with freebsd
16_all_gcc4-freebsd-config.patch (text/plain), 15.98 KB, created by
Roy Marples (RETIRED)
on 2007-10-23 11:57:30 UTC
(
hide
)
Description:
Sync x86 and sparc64 targets with freebsd
Filename:
MIME Type:
Creator:
Roy Marples (RETIRED)
Created:
2007-10-23 11:57:30 UTC
Size:
15.98 KB
patch
obsolete
>Sync FreeBSD gcc-4 build specs with gcc upstream > >diff -ur a/gcc/config/freebsd-spec.h b/gcc/config/freebsd-spec.h >--- a/gcc/config/freebsd-spec.h 2007-10-18 11:25:55 +0100 >+++ b/gcc/config/freebsd-spec.h 2007-10-18 11:23:13 +0100 >@@ -63,34 +63,44 @@ > /* Define the default FreeBSD-specific per-CPU hook code. */ > #define FBSD_TARGET_CPU_CPP_BUILTINS() do {} while (0) > >-/* Provide a CPP_SPEC appropriate for FreeBSD. We just deal with the GCC >- option `-posix', and PIC issues. */ >+/* Provide a CPP_SPEC appropriate for FreeBSD. We just deal with the GCC >+ option `-posix', and PIC issues. Try to detect support for the >+ `long long' type. Unfortunately the GCC spec parser will not allow us >+ to properly detect the "iso9899:1990" and "iso9899:199409" forms of >+ -std=c89. Because of the ':' in the -std argument. :-( I have left >+ them in the spec as a place holder in hopes someone knows a way to make >+ the detection of them work. */ > > #define FBSD_CPP_SPEC " \ > %(cpp_cpu) \ > %(cpp_arch) \ >+ %{!ansi:%{!std=c89:%{!std=iso9899.1990:%{!std=iso9899.199409:-D_LONGLONG}}}} \ > %{posix:-D_POSIX_SOURCE}" > >-/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add >- the magical crtbegin.o file (see crtstuff.c) which provides part >- of the support for getting C++ file-scope static object constructed >- before entering `main'. */ >- >-#define FBSD_STARTFILE_SPEC \ >- "%{!shared: \ >- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ >- %{!p:%{profile:gcrt1.o%s} \ >- %{!profile:crt1.o%s}}}} \ >- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" >- >-/* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on >- the 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 a normal "finalizer" file, >- `crtn.o'. */ >- >-#define FBSD_ENDFILE_SPEC \ >- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" >+/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add the magical >+ crtbegin.o file (see crtstuff.c) which provides part of the support for >+ getting C++ file-scope static object constructed before entering `main'. */ >+ >+#define FBSD_STARTFILE_SPEC "\ >+ %{!shared: \ >+ %{pg:gcrt1.o%s} \ >+ %{!pg: \ >+ %{p:gcrt1.o%s} \ >+ %{!p: \ >+ %{profile:gcrt1.o%s} \ >+ %{!profile:crt1.o%s}}}} \ >+ crti.o%s \ >+ %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" >+ >+/* Provide an ENDFILE_SPEC appropriate for FreeBSD/i386. 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 "finalizer" file, `crtn.o'. */ >+ >+#define FBSD_ENDFILE_SPEC "\ >+ %{!shared:crtend.o%s} \ >+ %{shared:crtendS.o%s} \ >+ crtn.o%s " > > /* Provide a LIB_SPEC appropriate for FreeBSD as configured and as > required by the user-land thread model. Before __FreeBSD_version >@@ -119,7 +129,8 @@ > %{pg: -lc_p} \ > }" > #else >-#if FBSD_MAJOR < 5 >+#include <sys/param.h> >+#if __FreeBSD_version < 500016 > #define FBSD_LIB_SPEC " \ > %{!shared: \ > %{!pg: \ >@@ -133,13 +144,24 @@ > #define FBSD_LIB_SPEC " \ > %{!shared: \ > %{!pg: %{pthread:-lpthread} -lc} \ >- %{pg: %{pthread:-lpthread_p} -lc_p} \ >- }" >+ %{pg: %{pthread:-lpthread_p} -lc_p}} \ >+ %{shared: \ >+ %{pthread:-lpthread} -lc} \ >+ " > #endif > #endif > >-#if FBSD_MAJOR < 6 >+#if FBSD_MAJOR < 5 > #define FBSD_DYNAMIC_LINKER "/usr/libexec/ld-elf.so.1" > #else > #define FBSD_DYNAMIC_LINKER "/libexec/ld-elf.so.1" > #endif >+ >+#if defined(HAVE_LD_EH_FRAME_HDR) >+#define LINK_EH_SPEC "%{!static:--eh-frame-hdr} " >+#endif >+ >+/* Use --as-needed -lgcc_s for eh support. */ >+#ifdef HAVE_LD_AS_NEEDED >+#define USE_LD_AS_NEEDED 1 >+#endif >diff -ur a/gcc/config/i386/freebsd.h b/gcc/config/i386/freebsd.h >--- a/gcc/config/i386/freebsd.h 2007-09-01 16:28:30 +0100 >+++ b/gcc/config/i386/freebsd.h 2007-10-18 11:50:45 +0100 >@@ -21,95 +21,143 @@ > along with GCC; see the file COPYING3. If not see > <http://www.gnu.org/licenses/>. */ > >+#undef CC1_SPEC >+#define CC1_SPEC "%(cc1_cpu) %{profile:-p}" > >-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); >+/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support >+ for the special GCC options -static and -shared, which allow us to >+ link things in one of these three modes by applying the appropriate >+ combinations of options at link-time. We like to support here for >+ as many of the other GNU linker options as possible. But I don't >+ have the time to search for those flags. I am sure how to add >+ support for -soname shared_object_name. H.J. > >-/* Override the default comment-starter of "/". */ >-#undef ASM_COMMENT_START >-#define ASM_COMMENT_START "#" >+ When the -shared link option is used a final link is not being >+ done. */ > >-#undef ASM_APP_ON >-#define ASM_APP_ON "#APP\n" >+#undef LINK_SPEC >+#define LINK_SPEC "\ >+ %{p:%nconsider using `-pg' instead of `-p' with gprof(1) } \ >+ %{v:-V} \ >+ %{assert*} %{R*} %{rpath*} %{defsym*} \ >+ %{shared:-Bshareable %{h*} %{soname*}} \ >+ %{!shared: \ >+ %{!static: \ >+ %{rdynamic: -export-dynamic} \ >+ %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ >+ %{static:-Bstatic}} \ >+ %{symbolic:-Bsymbolic}" > >-#undef ASM_APP_OFF >-#define ASM_APP_OFF "#NO_APP\n" >+/* Reset our STARTFILE_SPEC which was properly set in config/freebsd.h >+ but trashed by config/<cpu>/<file.h>. */ > >-#undef DBX_REGISTER_NUMBER >-#define DBX_REGISTER_NUMBER(n) \ >- (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) >+#undef STARTFILE_SPEC >+#define STARTFILE_SPEC FBSD_STARTFILE_SPEC > >-#undef NO_PROFILE_COUNTERS >-#define NO_PROFILE_COUNTERS 1 >+/* Provide an ENDFILE_SPEC appropriate for FreeBSD/i386. */ > >-/* Tell final.c that we don't need a label passed to mcount. */ >+#undef ENDFILE_SPEC >+#define ENDFILE_SPEC FBSD_ENDFILE_SPEC > >-#undef MCOUNT_NAME >-#define MCOUNT_NAME ".mcount" > >-/* Make gcc agree with <machine/ansi.h>. */ >+/************************[ Target stuff ]***********************************/ >+ >+/* Define the actual types of some ANSI-mandated types. >+ Needs to agree with <machine/ansi.h>. GCC defaults come from c-decl.c, >+ c-common.c, and config/<arch>/<arch>.h. */ > > #undef SIZE_TYPE > #define SIZE_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int") >- >+ > #undef PTRDIFF_TYPE > #define PTRDIFF_TYPE (TARGET_64BIT ? "long int" : "int") >- >+ > #undef WCHAR_TYPE_SIZE > #define WCHAR_TYPE_SIZE (TARGET_64BIT ? 32 : BITS_PER_WORD) > >-#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */ >+#undef SUBTARGET_EXTRA_SPECS /* i386.h bogusly defines it. */ > #define SUBTARGET_EXTRA_SPECS \ > { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER } >- >-/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add >- the magical crtbegin.o file (see crtstuff.c) which provides part >- of the support for getting C++ file-scope static object constructed >- before entering `main'. */ >- >-#undef STARTFILE_SPEC >-#define STARTFILE_SPEC \ >- "%{!shared: \ >- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \ >- %{!p:%{profile:gcrt1.o%s} \ >- %{!profile:crt1.o%s}}}} \ >- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" >- >-/* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on >- the 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 a normal "finalizer" file, >- `crtn.o'. */ >- >-#undef ENDFILE_SPEC >-#define ENDFILE_SPEC \ >- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" > >-/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support >- for the special GCC options -static and -shared, which allow us to >- link things in one of these three modes by applying the appropriate >- combinations of options at link-time. We like to support here for >- as many of the other GNU linker options as possible. But I don't >- have the time to search for those flags. I am sure how to add >- support for -soname shared_object_name. H.J. >+#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)"); > >- I took out %{v:%{!V:-V}}. It is too much :-(. They can use >- -Wl,-V. >+#define TARGET_ELF 1 > >- When the -shared link option is used a final link is not being >- done. */ >+/* This goes away when the math emulator is fixed. */ >+#undef TARGET_SUBTARGET_DEFAULT >+#define TARGET_SUBTARGET_DEFAULT \ >+ (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS | MASK_NO_FANCY_MATH_387) > >-#undef LINK_SPEC >-#define LINK_SPEC "\ >- %{p:%nconsider using `-pg' instead of `-p' with gprof(1)} \ >- %{v:-V} \ >- %{assert*} %{R*} %{rpath*} %{defsym*} \ >- %{shared:-Bshareable %{h*} %{soname*}} \ >- %{!shared: \ >- %{!static: \ >- %{rdynamic:-export-dynamic} \ >- %{!dynamic-linker:-dynamic-linker %(fbsd_dynamic_linker) }} \ >- %{static:-Bstatic}} \ >- %{symbolic:-Bsymbolic}" >+/* Don't default to pcc-struct-return, we want to retain compatibility with >+ older gcc versions AND pcc-struct-return is nonreentrant. >+ (even though the SVR4 ABI for the i386 says that records and unions are >+ returned in memory). */ >+ >+#undef DEFAULT_PCC_STRUCT_RETURN >+#define DEFAULT_PCC_STRUCT_RETURN 0 >+ >+/* FreeBSD sets the rounding precision of the FPU to 53 bits. Let the >+ compiler get the contents of <float.h> and std::numeric_limits correct. */ >+#undef TARGET_96_ROUND_53_LONG_DOUBLE >+#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT) >+ >+/* Tell final.c that we don't need a label passed to mcount. */ >+#define NO_PROFILE_COUNTERS 1 >+ >+/* Output assembler code to FILE to begin profiling of the current function. >+ LABELNO is an optional label. */ >+ >+#undef MCOUNT_NAME >+#define MCOUNT_NAME ".mcount" >+ >+/* Output assembler code to FILE to end profiling of the current function. */ >+ >+#undef FUNCTION_PROFILER_EPILOGUE /* BDE will need to fix this. */ >+ >+ >+/************************[ Assembler stuff ]********************************/ >+ >+/* Override the default comment-starter of "/" from unix.h. */ >+#undef ASM_COMMENT_START >+#define ASM_COMMENT_START "#" >+ >+/* Override the default comment-starter of "/APP" from unix.h. */ >+#undef ASM_APP_ON >+#define ASM_APP_ON "#APP\n" >+#undef ASM_APP_OFF >+#define ASM_APP_OFF "#NO_APP\n" >+ >+/* XXX:DEO do we still need this override to defaults.h ?? */ >+/* This is how to output a reference to a user-level label named NAME. */ >+#undef ASM_OUTPUT_LABELREF >+#define ASM_OUTPUT_LABELREF(FILE, NAME) \ >+ do { \ >+ const char *xname = (NAME); \ >+ /* Hack to avoid writing lots of rtl in \ >+ FUNCTION_PROFILER_EPILOGUE (). */ \ >+ if (*xname == '.' && strcmp(xname + 1, "mexitcount") == 0) \ >+ { \ >+ if (flag_pic) \ >+ fprintf ((FILE), "*%s@GOT(%%ebx)", xname); \ >+ else \ >+ fprintf ((FILE), "%s", xname); \ >+ } \ >+ else \ >+ { \ >+ if (xname[0] == '%') \ >+ xname += 2; \ >+ if (xname[0] == '*') \ >+ xname += 1; \ >+ else \ >+ fputs (user_label_prefix, FILE); \ >+ fputs (xname, FILE); \ >+ } \ >+} while (0) >+ >+/* This is how to hack on the symbol code of certain relcalcitrant >+ symbols to modify their output in output_pic_addr_const (). */ >+ >+#undef ASM_HACK_SYMBOLREF_CODE /* BDE will need to fix this. */ > > /* A C statement to output to the stdio stream FILE an assembler > command to advance the location counter to a multiple of 1<<LOG >@@ -117,24 +165,79 @@ > > This is used to align code labels according to Intel recommendations. */ > >+/* XXX configuration of this is broken in the same way as HAVE_GAS_SHF_MERGE, >+ but it is easier to fix in an MD way. */ >+ > #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN > #undef ASM_OUTPUT_MAX_SKIP_ALIGN >-#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ >- if ((LOG) != 0) { \ >- if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ >- else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ >- } >+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \ >+ do { \ >+ if ((LOG) != 0) { \ >+ if ((MAX_SKIP) == 0) \ >+ fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ >+ else \ >+ fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ >+ } \ >+ } while (0) > #endif > >-/* Don't default to pcc-struct-return, we want to retain compatibility with >- older gcc versions AND pcc-struct-return is nonreentrant. >- (even though the SVR4 ABI for the i386 says that records and unions are >- returned in memory). */ >+/* If defined, a C expression whose value is a string containing the >+ assembler operation to identify the following data as >+ uninitialized global data. If not defined, and neither >+ `ASM_OUTPUT_BSS' nor `ASM_OUTPUT_ALIGNED_BSS' are defined, >+ uninitialized global data will be output in the data section if >+ `-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be >+ used. */ >+#undef BSS_SECTION_ASM_OP >+#define BSS_SECTION_ASM_OP "\t.section\t.bss" >+ >+/* Like `ASM_OUTPUT_BSS' except takes the required alignment as a >+ separate, explicit argument. If you define this macro, it is used >+ in place of `ASM_OUTPUT_BSS', and gives you more flexibility in >+ handling the required alignment of the variable. The alignment is >+ specified as the number of bits. >+ >+ Try to use function `asm_output_aligned_bss' defined in file >+ `varasm.c' when defining this macro. */ >+#undef ASM_OUTPUT_ALIGNED_BSS >+#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ >+ asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) > >-#undef DEFAULT_PCC_STRUCT_RETURN >-#define DEFAULT_PCC_STRUCT_RETURN 0 >+/************************[ Debugger stuff ]*********************************/ > >-/* FreeBSD sets the rounding precision of the FPU to 53 bits. Let the >- compiler get the contents of <float.h> and std::numeric_limits correct. */ >-#undef TARGET_96_ROUND_53_LONG_DOUBLE >-#define TARGET_96_ROUND_53_LONG_DOUBLE (!TARGET_64BIT) >+#undef DBX_REGISTER_NUMBER >+#define DBX_REGISTER_NUMBER(n) (TARGET_64BIT ? dbx64_register_map[n] \ >+ : (write_symbols == DWARF2_DEBUG) \ >+ ? svr4_dbx_register_map[(n)] \ >+ : dbx_register_map[(n)]) >+ >+/* The same functions are used to creating the DWARF2 debug info and C++ >+ unwind info (except.c). Regardless of the debug format requested, the >+ register numbers used in exception unwinding sections still have to be >+ DWARF compatible. IMO the GCC folks may be abusing the DBX_REGISTER_NUMBER >+ macro to mean too much. */ >+#define DWARF_FRAME_REGNUM(n) (TARGET_64BIT ? dbx64_register_map[n] \ >+ : svr4_dbx_register_map[(n)]) >+ >+/* stabs-in-elf has offsets relative to function beginning */ >+#undef DBX_OUTPUT_LBRAC >+#define DBX_OUTPUT_LBRAC(FILE, NAME) \ >+ do { \ >+ fprintf (asm_out_file, "%s %d,0,0,", ASM_STABN_OP, N_LBRAC); \ >+ assemble_name (asm_out_file, NAME); \ >+ fputc ('-', asm_out_file); \ >+ assemble_name (asm_out_file, \ >+ XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ >+ fprintf (asm_out_file, "\n"); \ >+ } while (0) >+ >+#undef DBX_OUTPUT_RBRAC >+#define DBX_OUTPUT_RBRAC(FILE, NAME) \ >+ do { \ >+ fprintf (asm_out_file, "%s %d,0,0,", ASM_STABN_OP, N_RBRAC); \ >+ assemble_name (asm_out_file, NAME); \ >+ fputc ('-', asm_out_file); \ >+ assemble_name (asm_out_file, \ >+ XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ >+ fprintf (asm_out_file, "\n"); \ >+ } while (0) >diff -ur a/gcc/config.gcc b/gcc/config.gcc >--- a/gcc/config.gcc 2007-10-18 11:23:15 +0100 >+++ b/gcc/config.gcc 2007-10-18 12:06:59 +0100 >@@ -409,7 +409,7 @@ > # pleases around the provided core setting. > gas=yes > gnu_ld=yes >- extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" >+ extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o crtbeginT.o" > case ${target} in > *-*-freebsd3 | *-*-freebsd[3].*) > tm_defines="${tm_defines} FBSD_MAJOR=3" ;;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 192403
:
130795
|
130797
|
134172
|
157577
|
164138
|
169959
|
169961
|
169963