Use picolibcpp.ld and add crtbegin.o and crtend.o when linking C++ applications.
Signed-off-by: Keith Packard <[email protected]> --- gcc/config/picolibc-spec.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/config/picolibc-spec.h b/gcc/config/picolibc-spec.h index d1024ced3e7..7c43c79545e 100644 --- a/gcc/config/picolibc-spec.h +++ b/gcc/config/picolibc-spec.h @@ -23,6 +23,14 @@ <http://www.gnu.org/licenses/>. */ #define PICOLIBC_LD "picolibc.ld" +#define PICOLIBCPP_LD "picolibcpp.ld" + +#define EXCEPT_FILE_ELSE(_except, _noexcept) "%:if-driverlang(c++ " _except " " _noexcept ")" +#define EXCEPT_FILE(_except) "%:if-driverlang(c++ " _except ")" + +#define PICOLIBC_SCRIPT EXCEPT_FILE_ELSE(PICOLIBCPP_LD, PICOLIBC_LD) +#define PICOLIBC_CRTEND EXCEPT_FILE("crtend%O%s") +#define PICOLIBC_CRTBEGIN EXCEPT_FILE("crtbegin%O%s") /* Default to local-exec TLS model. */ #undef OS_CC1_SPEC @@ -39,7 +47,7 @@ * Define vfscanf if --scanf is set */ #define LIBC_LINK_SPEC \ - " %{!shared:%{!r:%{!T*: %:if-exists-then-else(%:find-file(" PICOLIBC_LD ") -T" PICOLIBC_LD ")}}}" \ + " %{!shared:%{!r:%{!T*: %:if-exists-then-else(%:find-file(" PICOLIBC_SCRIPT ") -T" PICOLIBC_SCRIPT ")}}}" \ " %{-printf=*:--defsym=" USER_LABEL_PREFIX "vfprintf=" USER_LABEL_PREFIX "__%*_vfprintf}" \ " %{-scanf=*:--defsym=" USER_LABEL_PREFIX "vfscanf=" USER_LABEL_PREFIX "__%*_vfscanf}" @@ -50,8 +58,11 @@ #undef LIB_SPEC #define LIB_SPEC "--start-group -lc %{-oslib=*:-l%*} %(libgcc) --end-group" +#undef ENDFILE_SPEC +#define ENDFILE_SPEC PICOLIBC_CRTEND + /* Select alternate crt0 version if --crt0 is specified */ #undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{-crt0=*:crt0-%*%O%s; :crt0%O%s}" +#define STARTFILE_SPEC "%{-crt0=*:crt0-%*%O%s; :crt0%O%s} " PICOLIBC_CRTBEGIN #define EH_TABLES_CAN_BE_READ_ONLY 1 -- 2.51.0
