From patchwork Fri Apr 20 16:33:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khem Raj X-Patchwork-Id: 133913 Delivered-To: patch@linaro.org Received: by 10.46.66.142 with SMTP id h14csp484316ljf; Fri, 20 Apr 2018 09:34:37 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+W/sQN7N2Xvn3B2RqQERu3RbO2By3by1CNRKz4CU46YeijvO9+0LL3bNLpa4u+skMIgwTA X-Received: by 2002:a17:902:9886:: with SMTP id s6-v6mr10779969plp.380.1524242077044; Fri, 20 Apr 2018 09:34:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524242077; cv=none; d=google.com; s=arc-20160816; b=vhCOliSLh2X8XK1HgXrZN+fbBbCntxdk7m/KcnrKIDA67lcJimB+mbCAvoA/DBroq6 6sbG2qkkPDjp5+n7BvczFaj6AJzu+naAM5Yqm5piRSpo4TwIfXfSy66Qec8vDjjXKrCi 70HNDsp+r+VuEiUnNbJjkbPfZ2gDhSXXBwk/X8JsRXhp6igjIkMbLTiIipe+bSPaVGH4 7RkQxhyfOJv+bcNyeLX5HxlmFYe+f7tuzKF2mlDr04lNPpa/LUWuKB6y6rTPn3WcckuV DDg56AJAR9b9xsl/83UCR9a4TSvD/aR4VIZLQHC6ljv1aI2L7ON6KH2ddm2TgajQRmCC u6kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=errors-to:sender:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=TxkHUBpiW2D4JQziCYzHKMWUfhkg5ML0KxP3n0jcReQ=; b=FX3JYH2Zkxg2Nvn2F2Us8Mw6YhG3XBx5b8SnjxSEH/MeyiaXjhgNLOEHaqclMEfWY0 I2Ad2dABUwRY4Pzgyh9HU/1pMb8jVFQy7yG2giwYteu3y1hs0kVgj5viCdXSE+67Yr4L Lv80qYlUXuWZcQ5dz3IORzDPhdUw0Tf44hKjNFpXX4fg7Z4VIEodqm1xabj5oB1bcmhp Py/UkDUnx6Yrr9fZTFergx+9+K7eZZbS03WIOPe8HyFvqAzOlnLombVGbRGOrdFbWa64 bXLs83I+xIh8a5uXYy1qjsnTw5dUPVaO7cYn9BFGeOQCQWUn96rRLM282KI5NW7RSA2E 3LYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=djFV+BWO; spf=pass (google.com: best guess record for domain of openembedded-core-bounces@lists.openembedded.org designates 140.211.169.62 as permitted sender) smtp.mailfrom=openembedded-core-bounces@lists.openembedded.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from mail.openembedded.org (mail.openembedded.org. [140.211.169.62]) by mx.google.com with ESMTP id u10-v6si6479568plr.123.2018.04.20.09.34.36; Fri, 20 Apr 2018 09:34:37 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of openembedded-core-bounces@lists.openembedded.org designates 140.211.169.62 as permitted sender) client-ip=140.211.169.62; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=djFV+BWO; spf=pass (google.com: best guess record for domain of openembedded-core-bounces@lists.openembedded.org designates 140.211.169.62 as permitted sender) smtp.mailfrom=openembedded-core-bounces@lists.openembedded.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from layers.openembedded.org (localhost [127.0.0.1]) by mail.openembedded.org (Postfix) with ESMTP id 3C443746CD; Fri, 20 Apr 2018 16:34:30 +0000 (UTC) X-Original-To: openembedded-core@lists.openembedded.org Delivered-To: openembedded-core@lists.openembedded.org Received: from mail-pl0-f45.google.com (mail-pl0-f45.google.com [209.85.160.45]) by mail.openembedded.org (Postfix) with ESMTP id E7CCE7461D for ; Fri, 20 Apr 2018 16:34:04 +0000 (UTC) Received: by mail-pl0-f45.google.com with SMTP id s13-v6so5541241plq.11 for ; Fri, 20 Apr 2018 09:34:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=iTPuQls4qeO/wLyjikRuxgJLzpESosxyY/ddi24pURY=; b=djFV+BWOcNVrNpqF1K2pfTPjsKHJ9hxYlNeIBy87bMyIDOQTpV0aDA9mNfw28/bbEd nqKTUxjlR+HK4/dk5ZY6wR7cLQbl8T78oj9d/2MpDyvH8VXuHchTVLn9qX6wv5u3o4Xo hdBtqdLTJZnhqD4xGfRBIqZOsxpmx9IcYXia/kWWllzirv5FrNoEJ50cfvNOlSHEZKAN loI/n2mpYdls5Hu/0xJ5ub4x6Jkw6BXBTlxr7wK8niSk6Ukb9tmRQYGg22hLvWPJ43Nm 3WBIJe3TWea7Fv7nZQtO5ZAALotSamYdqEenPhBkFX4ZAq+9vNjCo5bvJ6rl2HDIyRku 3fsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=iTPuQls4qeO/wLyjikRuxgJLzpESosxyY/ddi24pURY=; b=mVekvOch3Wxi23i4nkhpKncnaX9ej7PdUmykDMNJO1CuTIGmSd3v4ZTy7F3s8FzVaG B4O4SwFsQOBZFqi+zOEs9SnvFb+BrWDcAfJy1QLyaPem2tAGmVVqZ943YtrncU1SxQIP wdLTG4P6EvhRvSHbcU/aP2eu2EVkURUBuMXlwWv20881uA6H3VW6MEXm2nLqk/P9tbkj bFiS7nrW5owbT8F+k3bFOKhcvMcfKRf/CSVLPf1VFpSBMgsliFbZ3TfhPB25dKWnsXPZ ylk2b3CjyZpDwkJdUXPwSy94thCulebh6zbQzuz0gD88MA4LgDRml8+6cUtBHPLTSYkS oJKg== X-Gm-Message-State: ALQs6tDdRSBmbemEbW4M/1JyKI7q04/MzlAhmiRw6A+KfyhnGPQaPf30 LKfsZKlcEh/12UFi+G3Alio3IQ== X-Received: by 2002:a17:902:be18:: with SMTP id r24-v6mr10866749pls.275.1524242045267; Fri, 20 Apr 2018 09:34:05 -0700 (PDT) Received: from localhost.localdomain ([2601:646:8880:466c::487b]) by smtp.gmail.com with ESMTPSA id 204sm13450925pgf.61.2018.04.20.09.34.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 20 Apr 2018 09:34:04 -0700 (PDT) From: Khem Raj To: openembedded-core@lists.openembedded.org Date: Fri, 20 Apr 2018 09:33:51 -0700 Message-Id: <20180420163354.12065-3-raj.khem@gmail.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180420163354.12065-1-raj.khem@gmail.com> References: <20180420163354.12065-1-raj.khem@gmail.com> Subject: [OE-core] [PATCH v3 3/6] gcc-runtime: Disable gcc version of libssp X-BeenThere: openembedded-core@lists.openembedded.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Patches and discussions about the oe-core layer List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: openembedded-core-bounces@lists.openembedded.org Errors-To: openembedded-core-bounces@lists.openembedded.org libssp is implemented fully in glibc as well as in musl so we really do not need the gcc version of this library except may be for mingw, where we keep it enabled anyway gcc in OE is built with the knowledge that C library already provides libssp implementation, we should therefore not need the gcc implementation of same. libssp_nonshared piece is a detail which is needed when gcc is the compiler, in glibc this is part of libc_nonshared.a already and libc_nonshared.a is linked always when linking with -lc becuase libc.so in glibc is actually a linker script GROUP ( /usr/lib/libc.so.6 /usr/lib/libc_nonshared.a AS_NEEDED ( /usr/lib/ld-linux-x86-64.so.2 ) ) which automatically links in the needed runtime bits, this however is not the case for musl, where core SSP APIs are implemented in full but compiler specific runtime isn't, for this we add a new package called libssp_nonshared which generate the needed runtime stub and gcc is already carrying patch to link to libssp_nonshared.a on musl This should fix a long standing problem where static PIE executable were not buildable with OE since it was conflicting SSP implementation one from C library and the other one from gcc and we end up with duplicate symbol errors during linking. Backport a patch from trunk which enhances enable|disable-libssp to not only disable building libssp but also not emit the gcc specs to use it for subsequent linking when stack-protector options are used on compiler cmdline Signed-off-by: Khem Raj --- Changes since v2: - None meta/recipes-devtools/gcc/gcc-7.3.inc | 7 +- ...cc-override-TARGET_LIBC_PROVIDES_SSP.patch | 204 ++++++++++++++++++ meta/recipes-devtools/gcc/gcc-runtime.inc | 4 +- 3 files changed, 212 insertions(+), 3 deletions(-) create mode 100644 meta/recipes-devtools/gcc/gcc-7.3/0049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch -- 2.17.0 -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core diff --git a/meta/recipes-devtools/gcc/gcc-7.3.inc b/meta/recipes-devtools/gcc/gcc-7.3.inc index d968c322d2..98e5383b3c 100644 --- a/meta/recipes-devtools/gcc/gcc-7.3.inc +++ b/meta/recipes-devtools/gcc/gcc-7.3.inc @@ -72,6 +72,7 @@ SRC_URI = "\ file://0045-Link-libgcc-using-LDFLAGS-not-just-SHLIB_LDFLAGS.patch \ file://0047-sync-gcc-stddef.h-with-musl.patch \ file://0048-gcc-Enable-static-PIE.patch \ + file://0049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch \ file://fix-segmentation-fault-precompiled-hdr.patch \ file://no-sse-fix-test-case-failures.patch \ ${BACKPORTS} \ @@ -93,10 +94,12 @@ FORTRAN = "" JAVA = "" LTO = "--enable-lto" +SSP ?= "--disable-libssp" +SSP_mingw = "--enable-libssp" EXTRA_OECONF_BASE = "\ ${LTO} \ - --enable-libssp \ + ${SSP} \ --enable-libitm \ --disable-bootstrap \ --disable-libmudflap \ @@ -120,7 +123,7 @@ EXTRA_OECONF_INITIAL = "\ --disable-plugin \ --enable-decimal-float=no \ --without-isl \ - gcc_cv_libc_provides_ssp=yes \ + ${SSP} \ " EXTRA_OECONF_PATHS = "\ diff --git a/meta/recipes-devtools/gcc/gcc-7.3/0049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch b/meta/recipes-devtools/gcc/gcc-7.3/0049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch new file mode 100644 index 0000000000..7c53c95c3a --- /dev/null +++ b/meta/recipes-devtools/gcc/gcc-7.3/0049-gcc-override-TARGET_LIBC_PROVIDES_SSP.patch @@ -0,0 +1,204 @@ +From 9815bd97561c778ee0bc0c17f245e88e66570111 Mon Sep 17 00:00:00 2001 +From: sandra +Date: Wed, 1 Nov 2017 02:14:19 +0000 +Subject: [PATCH] 2017-10-31 Sandra Loosemore + + gcc/ + * configure.ac (--enable-libssp): New. + (gcc_cv_libc_provides_ssp): Check for explicit setting before + trying to determine target-specific default. Adjust indentation. + * configure: Regenerated. + * doc/install.texi (Configuration): Expand --disable-libssp + documentation. + + +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@254288 138bc75d-0d04-0410-961f-82ee72b054a4 +--- +Signed-off-by: Khem Raj +Upstream-Status: Backport [https://patchwork.ozlabs.org/patch/823049/] + + gcc/ChangeLog | 9 +++++++++ + gcc/configure | 26 +++++++++++++++++++++++--- + gcc/configure.ac | 24 ++++++++++++++++++++---- + gcc/doc/install.texi | 3 ++- + 4 files changed, 54 insertions(+), 8 deletions(-) + +Index: gcc-7.3.0/gcc/configure.ac +=================================================================== +--- gcc-7.3.0.orig/gcc/configure.ac ++++ gcc-7.3.0/gcc/configure.ac +@@ -5719,10 +5719,25 @@ if test x$gcc_cv_solaris_crts = xyes; th + [Define if the system-provided CRTs are present on Solaris.]) + fi + ++AC_ARG_ENABLE(libssp, ++[AS_HELP_STRING([--enable-libssp], [enable linking against libssp])], ++[case "${enableval}" in ++ yes|no) ++ ;; ++ *) ++ AC_MSG_ERROR([unknown libssp setting $enableval]) ++ ;; ++esac], []) ++ + # Test for stack protector support in target C library. + AC_CACHE_CHECK(__stack_chk_fail in target C library, +- gcc_cv_libc_provides_ssp, +- [gcc_cv_libc_provides_ssp=no ++ gcc_cv_libc_provides_ssp, ++ [gcc_cv_libc_provides_ssp=no ++ if test "x$enable_libssp" = "xno"; then ++ gcc_cv_libc_provides_ssp=yes ++ elif test "x$enable_libssp" = "xyes"; then ++ gcc_cv_libc_provides_ssp=no ++ else + case "$target" in + *-*-musl*) + # All versions of musl provide stack protector +@@ -5759,8 +5774,9 @@ AC_CACHE_CHECK(__stack_chk_fail in targe + AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes], + [echo "no __stack_chk_fail on this target"]) + ;; +- *) gcc_cv_libc_provides_ssp=no ;; +- esac]) ++ *) gcc_cv_libc_provides_ssp=no ;; ++ esac ++ fi]) + + if test x$gcc_cv_libc_provides_ssp = xyes; then + AC_DEFINE(TARGET_LIBC_PROVIDES_SSP, 1, +Index: gcc-7.3.0/gcc/doc/install.texi +=================================================================== +--- gcc-7.3.0.orig/gcc/doc/install.texi ++++ gcc-7.3.0/gcc/doc/install.texi +@@ -1658,7 +1658,8 @@ not be built. + + @item --disable-libssp + Specify that the run-time libraries for stack smashing protection +-should not be built. ++should not be built or linked against. On many targets library support ++is provided by the C library instead. + + @item --disable-libquadmath + Specify that the GCC quad-precision math library should not be built. +Index: gcc-7.3.0/gcc/configure +=================================================================== +--- gcc-7.3.0.orig/gcc/configure ++++ gcc-7.3.0/gcc/configure +@@ -940,6 +940,7 @@ enable_fix_cortex_a53_843419 + with_glibc_version + enable_gnu_unique_object + enable_linker_build_id ++enable_libssp + enable_default_ssp + with_long_double_128 + with_gc +@@ -1679,6 +1680,7 @@ Optional Features: + extension on glibc systems + --enable-linker-build-id + compiler will always pass --build-id to linker ++ --enable-libssp enable linking against libssp + --enable-default-ssp enable Stack Smashing Protection as default + --enable-maintainer-mode + enable make rules and dependencies not useful (and +@@ -18450,7 +18452,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 18436 "configure" ++#line 18455 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -18556,7 +18558,7 @@ else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +-#line 18542 "configure" ++#line 18561 "configure" + #include "confdefs.h" + + #if HAVE_DLFCN_H +@@ -25234,6 +25236,7 @@ $as_echo "#define HAVE_AS_SPARC5_VIS4 1" + + fi + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for SPARC6 instructions" >&5 + $as_echo_n "checking assembler for SPARC6 instructions... " >&6; } + if test "${gcc_cv_as_sparc_sparc6+set}" = set; then : +@@ -25270,6 +25273,7 @@ $as_echo "#define HAVE_AS_SPARC6 1" >>co + + fi + ++ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5 + $as_echo_n "checking assembler for LEON instructions... " >&6; } + if test "${gcc_cv_as_sparc_leon+set}" = set; then : +@@ -28947,6 +28951,18 @@ $as_echo "#define HAVE_SOLARIS_CRTS 1" > + + fi + ++# Check whether --enable-libssp was given. ++if test "${enable_libssp+set}" = set; then : ++ enableval=$enable_libssp; case "${enableval}" in ++ yes|no) ++ ;; ++ *) ++ as_fn_error "unknown libssp setting $enableval" "$LINENO" 5 ++ ;; ++esac ++fi ++ ++ + # Test for stack protector support in target C library. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking __stack_chk_fail in target C library" >&5 + $as_echo_n "checking __stack_chk_fail in target C library... " >&6; } +@@ -28954,6 +28970,11 @@ if test "${gcc_cv_libc_provides_ssp+set} + $as_echo_n "(cached) " >&6 + else + gcc_cv_libc_provides_ssp=no ++ if test "x$enable_libssp" = "xno"; then ++ gcc_cv_libc_provides_ssp=yes ++ elif test "x$enable_libssp" = "xyes"; then ++ gcc_cv_libc_provides_ssp=no ++ else + case "$target" in + *-*-musl*) + # All versions of musl provide stack protector +@@ -29001,8 +29022,9 @@ else + fi + + ;; +- *) gcc_cv_libc_provides_ssp=no ;; ++ *) gcc_cv_libc_provides_ssp=no ;; + esac ++ fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_libc_provides_ssp" >&5 + $as_echo "$gcc_cv_libc_provides_ssp" >&6; } +@@ -29037,18 +29059,15 @@ fi + + + # Test for on the target. +- +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sdt.h in the target C library" >&5 +-$as_echo_n "checking sys/sdt.h in the target C library... " >&6; } +-have_sys_sdt_h=no ++#GCC_TARGET_TEMPLATE([HAVE_SYS_SDT_H]) ++#AC_MSG_CHECKING(sys/sdt.h in the target C library) ++#have_sys_sdt_h=no + #if test -f $target_header_dir/sys/sdt.h; then + # have_sys_sdt_h=yes +-# +-#$as_echo "#define HAVE_SYS_SDT_H 1" >>confdefs.h +-# ++# AC_DEFINE(HAVE_SYS_SDT_H, 1, ++# [Define if your target C library provides sys/sdt.h]) + #fi +-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_sys_sdt_h" >&5 +-$as_echo "$have_sys_sdt_h" >&6; } ++#AC_MSG_RESULT($have_sys_sdt_h) + + # Check if TFmode long double should be used by default or not. + # Some glibc targets used DFmode long double, but with glibc 2.4 diff --git a/meta/recipes-devtools/gcc/gcc-runtime.inc b/meta/recipes-devtools/gcc/gcc-runtime.inc index 97365a21dc..b4e5539575 100644 --- a/meta/recipes-devtools/gcc/gcc-runtime.inc +++ b/meta/recipes-devtools/gcc/gcc-runtime.inc @@ -24,8 +24,10 @@ RUNTIMELIBITM_nios2 = "" RUNTIMELIBITM_microblaze = "" RUNTIMELIBITM_riscv32 = "" RUNTIMELIBITM_riscv64 = "" +RUNTIMELIBSSP ?= "" +RUNTIMELIBSSP_mingw ?= "libssp" -RUNTIMETARGET = "libssp libstdc++-v3 libgomp libatomic ${RUNTIMELIBITM} \ +RUNTIMETARGET = "libstdc++-v3 libgomp libatomic ${RUNTIMELIBITM} \ ${@bb.utils.contains_any('FORTRAN', [',fortran',',f77'], 'libquadmath', '', d)} \ " RUNTIMETARGET_append_x86 = " libmpx"