The attached patch adds support for the -rdynamic compiler flag on darwin12 and later. The darwin linker, starting with Xcode 5 on darwin12, added support for the associated new -export_dynamic linker flag.
-export_dynamic Preserves all global symbols in main executables during LTO. Without this option, Link Time Optimization is allowed to inline and remove global functions. This option is used when a main executable may load a plug-in which requires certain symbols from the main executable. This patch emulates the behavior of clang from Xcode 5 and later which accepts the -rdynamic flag. Note that the emission of -export_dynamic by -rdynamic is unaffected by the use of -mmacosx-version-min. These changes are achieved by the addition of rdynamic to gcc/config/darwin.opt, addition of a new gcc/config/darwin12.h file with additional spec handling for rdynamic in LINK_GCC_C_SEQUENCE_SPEC and changes to gcc/config.gcc to use this new file on darwin12 or later. Bootstrap tested on both x86_64-apple-darwin11 and x86_64-apple-darwin14. Confirmed that on darwin11, the -rdynamic flag retains the current behavior of issuing the compiler error "error: unrecognized command line option ‘-rdynamic’". Confirmed that on darwin12 and later, invoking -rdynamic emits the expected -export_dynamc linker flag. Okay for gcc trunk? Jack
darwin12_rdynamic.patch
Description: Binary data