NetBSD has SSP in libc

2016-01-23 Thread Thomas Klausner
NetBSD has SSP included in libc:

http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/ssp/?only_with_tag=MAIN

gcc/configure does not know about this. The attached patch (against
SVN checkout from today) fixes this.

I've previously reported this as
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68380 but was told that
patches should be sent here.
 Thomas
Index: gcc/configure.ac
===
--- gcc/configure.ac(revision 232768)
+++ gcc/configure.ac(working copy)
@@ -5480,7 +5480,7 @@ AC_CACHE_CHECK(__stack_chk_fail in target C librar
 # realistically usable GNU/Hurd configurations.
 # All supported versions of musl provide it as well
 gcc_cv_libc_provides_ssp=yes;;
-   *-*-darwin* | *-*-freebsd*)
+   *-*-darwin* | *-*-freebsd* | *-*-netbsd*)
 AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
[echo "no __stack_chk_fail on this target"])
 ;;


Re: NetBSD has SSP in libc

2016-01-26 Thread Thomas Klausner
On Tue, Jan 26, 2016 at 11:35:15PM -0700, Jeff Law wrote:
> On 01/23/2016 02:52 PM, Thomas Klausner wrote:
> >NetBSD has SSP included in libc:
> >
> >http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/ssp/?only_with_tag=MAIN
> >
> >gcc/configure does not know about this. The attached patch (against
> >SVN checkout from today) fixes this.
> >
> >I've previously reported this as
> >https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68380 but was told that
> >patches should be sent here.
> Thanks.
> 
> If I understand the history SSP first appeared in NetBSD 4.0, so this code
> really ought to be conditional on NetBSD 4.0 or newer to be strictly
> correct.
> 
> Unfortunately we don't have much interaction with NetBSD anymore -- so we
> have no clue if supporting building on anything before NetBSD 4.0 is even
> reasonable or feasible anymore.

The only supported release branches are NetBSD-6.x and NetBSD-7.x.

NetBSD-4.x was desupported when NetBSD 6.x came out, in 2012:
https://blog.netbsd.org/tnf/entry/end_of_life_for_4

 Thomas


Re: [rb-general] [PATCH] gcc: read -fdebug-prefix-map OLD from environment (improved reproducibility)

2015-12-22 Thread Thomas Klausner
I just found a related patch again that we have in NetBSD's gcc that
allows fixing __FILE__ references.

See
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47047

No progress since 2010 in getting this included though :(
 Thomas

On Thu, Dec 10, 2015 at 12:36:18PM -0500, Daniel Kahn Gillmor wrote:
> Work on the reproducible-builds project [0] has identified that build
> paths are one cause of output variation between builds.  This
> changeset allows users to avoid this variation when building C objects
> with debug symbols, while leaving the default behavior unchanged.
> 
> Background
> --
> 
> gcc includes the build path in any generated DWARF debugging symbols,
> specifically in DW_AT_comp_dir, but allows the embedded path to be
> changed via -fdebug-prefix-map.
> 
> When -fdebug-prefix-map is used with the current build path, it
> removes the build path from DW_AT_comp_dir but places it instead in
> DW_AT_producer, so the reproducibility problem isn't resolved.
> 
> When building software for binary redistribution, the actual build
> path on the build machine is irrelevant, and doesn't need to be
> exposed in the debug symbols.
> 
> Resolution
> --
> 
> This patch extends the first argument to -fdebug-prefix-map ("old") to
> be able to read from the environment, which allows a packager to avoid
> embedded build paths in the debugging symbols with something like:
> 
>   export SOURCE_BUILD_DIR="$(pwd)"
>   gcc -fdebug-prefix-map=\$SOURCE_BUILD_DIR=/usr/src
> 
> Details
> ---
> 
> Specifically, if the first character of the "old" argument is a
> literal $, then gcc will treat it as an environment variable name, and
> use the value of the env var for prefix mapping.
> 
> As a result, DW_AT_producer contains the literal envvar name,
> DW_AT_comp_dir contains the transformed build path, and the actual
> build path is not at all present in the generated object file.
> 
> This has been tested successfully on amd64 machines, and i see no
> reason why it would be platform-specific.
> 
> More discussion of alternate approaches considered and discarded in
> the development of this change can be found at [1] for those
> interested.
> 
> Feedback welcome!
> 
> [0] https://reproducible-builds.org
> [1] 
> https://lists.alioth.debian.org/pipermail/reproducible-builds/Week-of-Mon-20151130/004051.html
> ---
>  gcc/doc/invoke.texi |  4 +++-
>  gcc/final.c | 27 +--
>  2 files changed, 28 insertions(+), 3 deletions(-)
> 
> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
> index 5256031..234432f 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -6440,7 +6440,9 @@ link processing time.  Merging is enabled by default.
>  @item -fdebug-prefix-map=@var{old}=@var{new}
>  @opindex fdebug-prefix-map
>  When compiling files in directory @file{@var{old}}, record debugging
> -information describing them as in @file{@var{new}} instead.
> +information describing them as in @file{@var{new}} instead.  If
> +@file{@var{old}} starts with a @samp{$}, the corresponding environment
> +variable will be dereferenced, and its value will be used instead.
>  
>  @item -fno-dwarf2-cfi-asm
>  @opindex fdwarf2-cfi-asm
> diff --git a/gcc/final.c b/gcc/final.c
> index 8cb5533..bc43b61 100644
> --- a/gcc/final.c
> +++ b/gcc/final.c
> @@ -1525,6 +1525,9 @@ add_debug_prefix_map (const char *arg)
>  {
>debug_prefix_map *map;
>const char *p;
> +  char *env;
> +  const char *old;
> +  size_t oldlen;
>  
>p = strchr (arg, '=');
>if (!p)
> @@ -1532,9 +1535,29 @@ add_debug_prefix_map (const char *arg)
>error ("invalid argument %qs to -fdebug-prefix-map", arg);
>return;
>  }
> +  if (*arg == '$')
> +{
> +  env = xstrndup (arg+1, p - (arg+1));
> +  old = getenv(env);
> +  if (!old)
> + {
> +   warning (0, "environment variable %qs not set in argument to "
> +"-fdebug-prefix-map", env);
> +   free(env);
> +   return;
> + }
> +  oldlen = strlen(old);
> +  free(env);
> +}
> +  else
> +{
> +  old = xstrndup (arg, p - arg);
> +  oldlen = p - arg;
> +}
> +
>map = XNEW (debug_prefix_map);
> -  map->old_prefix = xstrndup (arg, p - arg);
> -  map->old_len = p - arg;
> +  map->old_prefix = old;
> +  map->old_len = oldlen;
>p++;
>map->new_prefix = xstrdup (p);
>map->new_len = strlen (p);
> -- 
> 2.6.2
> 
> ___
> rb-gene...@lists.reproducible-builds.org mailing list
> 
> To unsubscribe or change your options, please visit:
> https://lists.reproducible-builds.org/listinfo/rb-general
>