Skip to contentSkip to conversation

binutils: backport a patch to fix file matching problem

PATCH In review Robert Yang 3 participants 5 messages Aug 16, 2018 – Aug 17, 2018

lore
Share & tools
lore
#0 lore raw

cover binutils: backport a patch to fix file matching problem

Fixed accidental build failures when /tmp/ and build dir are on different filesystems:

Assembler messages:
Fatal error: The input and output files must be distinct

// Robert

The following changes since commit 125789b6ee6d47ab84192230f63971c4e22418ba:

cve-check.bbclass: do not download the CVE DB in package-specific tasks (2018-08-15 21:45:10 +0100)

are available in the git repository at:

git://git.openembedded.org/openembedded-core-contrib rbt/binutils
http://cgit.openembedded.org/openembedded-core-contrib/log/?h=rbt/binutils

Robert Yang (1):
binutils: Improve check for input file matching output file

 meta/recipes-devtools/binutils/binutils-2.31.inc   |  1 +
 ...check-for-input-file-matching-output-file.patch | 59 ++++++++++++++++++++++
 2 files changed, 60 insertions(+)
 create mode 100644 meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch
Signature · 1 line
2.7.4
#1 lore raw

PATCH 1/1 binutils: Improve check for input file matching output file

When the assembler reports that the input and output are the same, report the file names involved, in order to help debugging. Also do not equate two files are the same if the have the same inode value but reside on different file systems.

---
 meta/recipes-devtools/binutils/binutils-2.31.inc   |  1 +
 ...check-for-input-file-matching-output-file.patch | 59 ++++++++++++++++++++++
 2 files changed, 60 insertions(+)
 create mode 100644 meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch
meta/recipes-devtools/binutils/binutils-2.31.inc +1 -0
index 02d5bca..6603873 100644
@@ -36,6 +36,7 @@ SRC_URI = "\
      file://0014-Detect-64-bit-MIPS-targets.patch \
      file://0015-sync-with-OE-libtool-changes.patch \
      file://0016-add-i386pep-emulation-for-x86_64.patch \
+     file://0017-improve-check-for-input-file-matching-output-file.patch \
 "
 S  = "${WORKDIR}/git"
 
meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch new file +59 -0

59 lines not on this page · raw message

Signature · 1 line
2.7.4
#2 lore raw

Re: [PATCH 1/1] binutils: Improve check for input file matching output file

Quoted 33 lines · Robert Yang

When the assembler reports that the input and output are the same, report the file names involved, in order to help debugging. Also do not equate two files are the same if the have the same inode value but reside on different file systems.

---
  meta/recipes-devtools/binutils/binutils-2.31.inc   |  1 +
  ...check-for-input-file-matching-output-file.patch | 59 ++++++++++++++++++++++
  2 files changed, 60 insertions(+)

create mode 100644 meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch

meta/recipes-devtools/binutils/binutils-2.31.inc +1 -0
index 02d5bca..6603873 100644
@@ -36,6 +36,7 @@ SRC_URI = "\
       file://0014-Detect-64-bit-MIPS-targets.patch \
       file://0015-sync-with-OE-libtool-changes.patch \
       file://0016-add-i386pep-emulation-for-x86_64.patch \
+     file://0017-improve-check-for-input-file-matching-output-file.patch \
  "
  S  = "${WORKDIR}/git"
 
meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch new file +3 -0
new file mode 100644
index 0000000..6d8d8a3
@@ -0,0 +1,59 @@
+From 2a50366ded329bfb39d387253450c9d5302c3503 Mon Sep 17 00:00:00 2001
+From: Robert Yang <[email protected]>
+Date: Tue, 14 Aug 2018 12:22:35 +0100

meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch line 13

Quoted 10 lines
meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch new file +10 -0
+Subject: [PATCH] as.c: Improve check for input file matching output file.
+
+When the assembler reports that the input and output are the same, report the
+file names involved, in order to help debugging.  Also do not equate two files
+are the same if the have the same inode value but reside on different file
+systems.
+
+Upstream-Status: Backport
+
+Robert Yang <[email protected]>

Sorry, here missed a SOB, I fixed it in the repo:

// Robert

Quoted 47 lines
meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch new file +46 -0
+---
+ gas/as.c      | 27 ++++++++++++++++++++-------
+ 2 files changed, 20 insertions(+), 7 deletions(-)
+
+diff --git a/gas/as.c b/gas/as.c
+index b2a908a..3105d06 100644
+--- a/gas/as.c
++++ b/gas/as.c
+@@ -1259,14 +1259,27 @@ main (int argc, char ** argv)
+ 	{
+ 	  struct stat sib;
+
+-	  if (stat (argv[i], &sib) == 0)
++	  /* Check that the input file and output file are different.  */
++	  if (stat (argv[i], &sib) == 0
++	      && sib.st_ino == sob.st_ino
++	      /* POSIX emulating systems may support stat() but if the
++		 underlying file system does not support a file serial number
++		 of some kind then they will return 0 for the inode.  So
++		 two files with an inode of 0 may not actually be the same.
++		 On real POSIX systems no ordinary file will ever have an
++		 inode of 0.  */
++	      && sib.st_ino != 0
++	      /* Different files may have the same inode number if they
++		 reside on different devices, so check the st_dev field as
++		 well.  */
++	      && sib.st_dev == sob.st_dev)
+ 	    {
+-	      if (sib.st_ino == sob.st_ino && sib.st_ino != 0)
+-		{
+-		  /* Don't let as_fatal remove the output file!  */
+-		  out_file_name = NULL;
+-		  as_fatal (_("The input and output files must be distinct"));
+-		}
++	      const char *saved_out_file_name = out_file_name;
++
++	      /* Don't let as_fatal remove the output file!  */
++	      out_file_name = NULL;
++	      as_fatal (_("The input '%s' and output '%s' files are the same"),
++			argv[i], saved_out_file_name);
+ 	    }
+ 	}
+     }
+--
+2.7.4
+
#3 lore raw

Re: [PATCH 1/1] binutils: Improve check for input file matching output file

Quoted 65 lines · Robert Yang
Quoted 54 lines · Robert Yang

When the assembler reports that the input and output are the same, report the
file names involved, in order to help debugging.  Also do not equate two files
are the same if the have the same inode value but reside on different file
systems.

---
  meta/recipes-devtools/binutils/binutils-2.31.inc   |  1 + ...check-for-input-file-matching-output-file.patch | 59
++++++++++++++++++++++

  2 files changed, 60 insertions(+)

  create mode 100644 meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch

meta/recipes-devtools/binutils/binutils-2.31.inc +1 -0
index 02d5bca..6603873 100644
@@ -36,6 +36,7 @@ SRC_URI = "\
        file://0014-Detect-64-bit-MIPS-targets.patch \
        file://0015-sync-with-OE-libtool-changes.patch \
        file://0016-add-i386pep-emulation-for-x86_64.patch \
+    
 file://0017-improve-check-for-input-file-matching-output-file.patch \

  "
  S  = "${WORKDIR}/git"
  diff --git a/meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch b/meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch

new file mode 100644
index 0000000..6d8d8a3
--- /dev/null
+++
b/meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch

meta/recipes-devtools/binutils/binutils-2.31.inc +4 -0
@@ -0,0 +1,59 @@
+From 2a50366ded329bfb39d387253450c9d5302c3503 Mon Sep 17 00:00:00 2001
+From: Robert Yang <[email protected]>
+Date: Tue, 14 Aug 2018 12:22:35 +0100
+Subject: [PATCH] as.c: Improve check for input file matching output

file.

meta/recipes-devtools/binutils/binutils-2.31.inc +2 -0
+
+When the assembler reports that the input and output are the same,

report the
+file names involved, in order to help debugging.  Also do not equate two files
+are the same if the have the same inode value but reside on different file

meta/recipes-devtools/binutils/binutils-2.31.inc

Quoted 5 lines
meta/recipes-devtools/binutils/binutils-2.31.inc +5 -0
+systems.
+
+Upstream-Status: Backport
+
+Robert Yang <[email protected]>

Sorry, here missed a SOB, I fixed it in the repo:

Quoted 1 line

patch is ok

Quoted 51 lines

// Robert

Quoted 48 lines
+---
+ gas/as.c      | 27 ++++++++++++++++++++-------

+ 2 files changed, 20 insertions(+), 7 deletions(-)

meta/recipes-devtools/binutils/binutils-2.31.inc +36 -0
+
+diff --git a/gas/as.c b/gas/as.c
+index b2a908a..3105d06 100644
+--- a/gas/as.c
++++ b/gas/as.c
+@@ -1259,14 +1259,27 @@ main (int argc, char ** argv)
+     {
+       struct stat sib;
+
+-      if (stat (argv[i], &sib) == 0)
++      /* Check that the input file and output file are different.  */
++      if (stat (argv[i], &sib) == 0
++          && sib.st_ino == sob.st_ino
++          /* POSIX emulating systems may support stat() but if the
++         underlying file system does not support a file serial number
++         of some kind then they will return 0 for the inode.  So
++         two files with an inode of 0 may not actually be the same.
++         On real POSIX systems no ordinary file will ever have an
++         inode of 0.  */
++          && sib.st_ino != 0
++          /* Different files may have the same inode number if they
++         reside on different devices, so check the st_dev field as
++         well.  */
++          && sib.st_dev == sob.st_dev)
+         {
+-          if (sib.st_ino == sob.st_ino && sib.st_ino != 0)
+-        {
+-          /* Don't let as_fatal remove the output file!  */
+-          out_file_name = NULL;
+-          as_fatal (_("The input and output files must be distinct"));
+-        }
++          const char *saved_out_file_name = out_file_name;
++
++          /* Don't let as_fatal remove the output file!  */
++          out_file_name = NULL;
++          as_fatal (_("The input '%s' and output '%s' files are the

same"),
++            argv[i], saved_out_file_name);
+         }
+     }
+     }
+--
+2.7.4
+

#4 lore raw

✗ patchtest: failure for binutils: backport a patch to fix file matching problem

In reply to Robert Yang

== Series Details ==

Series: binutils: backport a patch to fix file matching problem
Revision: 1
URL : https://patchwork.openembedded.org/series/13548/
State : failure

== Summary ==

Thank you for submitting this patch series to OpenEmbedded Core. This is an automated response. Several tests have been executed on the proposed series by patchtest resulting in the following failures:

* Issue A patch file has been added, but does not have a Signed-off-by tag [test_signed_off_by_presence]
Suggested fix Sign off the added patch file (meta/recipes-devtools/binutils/binutils/0017-improve-check-for-input-file-matching-output-file.patch)

If you believe any of these test results are incorrect, please reply to the mailing list ([email protected]) raising your concerns. Otherwise we would appreciate you correcting the issues and submitting a new version of the patchset if applicable. Please ensure you add/increment the version number when sending the new version (i.e. [PATCH] -> [PATCH v2] -> [PATCH v3] -> ...).

---

Guidelines:     https://www.openembedded.org/wiki/Commit_Patch_Message_Guidelines
Test framework: http://git.yoctoproject.org/cgit/cgit.cgi/patchtest
Test suite:     http://git.yoctoproject.org/cgit/cgit.cgi/patchtest-oe