Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/external/gpl3



I've found out that this patch in not needed, at least on NetBSD and
likely Linux.

The algorithm to pick tmpdir is as follows:
 - check for memoized tmpdir
 - try env variables
 - try P_tmpdir
 - try /var/tmp, then /usr/tmp, then /tmp
 - fallback to current dir ('.')
 - save memoized tmpdir

P_tmpdir is defined as /tmp on NetBSD for XOPEN/NETBSD SOURCE.

I've verifed that P_tmpdir is always picked and defined (*) in
make-temp-file.c for all of our GNU toolchain programs (gdb, gcc,
binutils) in tools build, in distribution build, in pkgsrc build and in
standalone build.

This means that we return choose_tmpdir() always "/tmp" (**)

I've double checked this with the source code 1 commit before this
change (***) and in the current sources.

So, the question is... is this just a hack for build on Darwin or some
other OS without P_tmpdir? Was this patch ever really needed?

If this is just a hack for one specific OS, I recommend to remove our
local modification and rely on TMPDIR in such setup or discuss with
upstream GCC (libiberty) a patch how to point it to /tmp.


(*) I've checked the claim with:

#ifdef P_tmpdir
      /* We really want a directory name here as if concatenated with
say \dir
         we do not end up with a double \\ which defines an UNC path.  */
      if (strcmp (P_tmpdir, "\\") == 0)
        base = try_dir ("\\.", base);
      else
        base = try_dir (P_tmpdir, base);
#else
#error 1
#endif

(**) To be extra sure, I have verified this with logging to a temporary
file:

       memoized_tmpdir = tmpdir;
+
+      {
+        FILE *fp = fopen("/tmp/log.tmp.txt", "a");
+        fprintf(fp, "PID=%d PROG='%s' TMPDIR='%s'\n", getpid(),
getprogname(), tmpdir);
+        fclose(fp);
+      }


$ LC_ALL=C grep -c /var/tmp /tmp/log.tmp.txt
0

$ LC_ALL=C grep -c tmp /tmp/log.tmp.txt
48745

$ head /tmp/log.tmp.txt
PID=16262 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=20242 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=18851 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=11095 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=8036 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=26914 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=8930 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=21615 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=27201 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'
PID=11745 PROG='x86_64--netbsd-gcc' TMPDIR='/tmp//'

(***)
commit 0eba0e605b50d99665de27a77f5ca870f2c8b41d (HEAD -> test)
Author: ozaki-r <ozaki-r%NetBSD.org@localhost>
Date:   Mon Aug 10 09:32:01 2015 +0000

    Fix head and cleanup definitions for cache_expiration tests


On 26.03.2020 01:43, Jonathan A. Kollasch wrote:
> We (to the extent I can assert that as an individual developer) insist
> on keeping it.
>
> 	Jonathan Kollasch
>
> On Thu, Mar 26, 2020 at 01:26:05AM +0100, Kamil Rytarowski wrote:
>> Upstream (GCC) is strongly against this change (even under __NetBSD__
>> ifdef) as /var/tmp is typically larger than /tmp:
>>
>>> I'd strongly recommend against this as-is.
>>>
>>> The whole reason we prefer /var/tmp is because it's often dramatically
>> larger
>>> than a ram-backed /tmp.
>>
>> -- by Jeff Law.
>>
>> Do we insist on this patch? Can we remove it from local sources?
>>
>> The same effect can be achieved with env(1) variables: TMP=/tmp
>> TEMPDIR=/tmp or TEMP=/tmp.
>>
>> On 10.08.2015 17:45, Jonathan A. Kollasch wrote:
>>> Module Name:	src
>>> Committed By:	jakllsch
>>> Date:		Mon Aug 10 15:45:40 UTC 2015
>>>
>>> Modified Files:
>>> 	src/external/gpl3/binutils/dist/libiberty: make-temp-file.c
>>> 	src/external/gpl3/gcc/dist/libiberty: make-temp-file.c
>>> 	src/external/gpl3/gdb/dist/libiberty: make-temp-file.c
>>>
>>> Log Message:
>>> Correct temporary directory preference order in libiberty's choose_tmpdir().
>>>
>>> Because it is intended to be persistent, /var/tmp is about the worst possible
>>> choice for temporary files for most users of libiberty.  /tmp works better,
>>> because the the defined semantics of /tmp allow for a non-persistent tmpfs
>>> to be used.  This should improve performance when /tmp is a tmpfs and it is
>>> difficult or impossible to have an environment variable or command line -pipe
>>> flag passed to every piece of the toolchain.
>>>
>>>
>>> To generate a diff of this commit:
>>> cvs rdiff -u -r1.1.1.3 -r1.2 \
>>>     src/external/gpl3/binutils/dist/libiberty/make-temp-file.c
>>> cvs rdiff -u -r1.1.1.2 -r1.2 \
>>>     src/external/gpl3/gcc/dist/libiberty/make-temp-file.c
>>> cvs rdiff -u -r1.1.1.1 -r1.2 \
>>>     src/external/gpl3/gdb/dist/libiberty/make-temp-file.c
>>>
>>> Please note that diffs are not public domain; they are subject to the
>>> copyright notices on the relevant files.
>>>
>>>
>>> Modified files:
>>>
>>> Index: src/external/gpl3/binutils/dist/libiberty/make-temp-file.c
>>> diff -u src/external/gpl3/binutils/dist/libiberty/make-temp-file.c:1.1.1.3 src/external/gpl3/binutils/dist/libiberty/make-temp-file.c:1.2
>>> --- src/external/gpl3/binutils/dist/libiberty/make-temp-file.c:1.1.1.3	Sun Sep 29 13:46:38 2013
>>> +++ src/external/gpl3/binutils/dist/libiberty/make-temp-file.c	Mon Aug 10 15:45:40 2015
>>> @@ -130,10 +130,10 @@ choose_tmpdir (void)
>>>  	base = try_dir (P_tmpdir, base);
>>>  #endif
>>>
>>> -      /* Try /var/tmp, /usr/tmp, then /tmp.  */
>>> +      /* Try /tmp, /var/tmp, then /usr/tmp.  */
>>> +      base = try_dir (tmp, base);
>>>        base = try_dir (vartmp, base);
>>>        base = try_dir (usrtmp, base);
>>> -      base = try_dir (tmp, base);
>>>
>>>        /* If all else fails, use the current directory!  */
>>>        if (base == 0)
>>>
>>> Index: src/external/gpl3/gcc/dist/libiberty/make-temp-file.c
>>> diff -u src/external/gpl3/gcc/dist/libiberty/make-temp-file.c:1.1.1.2 src/external/gpl3/gcc/dist/libiberty/make-temp-file.c:1.2
>>> --- src/external/gpl3/gcc/dist/libiberty/make-temp-file.c:1.1.1.2	Sat Mar  1 08:41:40 2014
>>> +++ src/external/gpl3/gcc/dist/libiberty/make-temp-file.c	Mon Aug 10 15:45:40 2015
>>> @@ -130,10 +130,10 @@ choose_tmpdir (void)
>>>  	base = try_dir (P_tmpdir, base);
>>>  #endif
>>>
>>> -      /* Try /var/tmp, /usr/tmp, then /tmp.  */
>>> +      /* Try /tmp, /var/tmp, then /usr/tmp.  */
>>> +      base = try_dir (tmp, base);
>>>        base = try_dir (vartmp, base);
>>>        base = try_dir (usrtmp, base);
>>> -      base = try_dir (tmp, base);
>>>
>>>        /* If all else fails, use the current directory!  */
>>>        if (base == 0)
>>>
>>> Index: src/external/gpl3/gdb/dist/libiberty/make-temp-file.c
>>> diff -u src/external/gpl3/gdb/dist/libiberty/make-temp-file.c:1.1.1.1 src/external/gpl3/gdb/dist/libiberty/make-temp-file.c:1.2
>>> --- src/external/gpl3/gdb/dist/libiberty/make-temp-file.c:1.1.1.1	Sat Sep 24 19:49:55 2011
>>> +++ src/external/gpl3/gdb/dist/libiberty/make-temp-file.c	Mon Aug 10 15:45:40 2015
>>> @@ -130,10 +130,10 @@ choose_tmpdir (void)
>>>  	base = try_dir (P_tmpdir, base);
>>>  #endif
>>>
>>> -      /* Try /var/tmp, /usr/tmp, then /tmp.  */
>>> +      /* Try /tmp, /var/tmp, then /usr/tmp.  */
>>> +      base = try_dir (tmp, base);
>>>        base = try_dir (vartmp, base);
>>>        base = try_dir (usrtmp, base);
>>> -      base = try_dir (tmp, base);
>>>
>>>        /* If all else fails, use the current directory!  */
>>>        if (base == 0)
>>>
>>
>>
>
>
>



Home | Main Index | Thread Index | Old Index