#33 Add upstream patch to use the directory name in .file 0, fixes ccache FTBFS (bz#1996936)
Merged 2 years ago by nickc. Opened 2 years ago by orion.
rpms/ orion/binutils ccache  into  rawhide

@@ -0,0 +1,323 @@ 

+ commit 58f3b6a3495074da39ba6e19935e4401dcbacf88

+ Author: H.J. Lu <hjl.tools@gmail.com>

+ Date:   Thu Sep 9 09:14:42 2021 -0700

+ 

+     gas: Use the directory name in .file 0

+     

+     DWARF5 allows .file 0 to take an optional directory name.  Set the entry

+     0 of the directory table to the directory name in .file 0.

+     

+             PR gas/28266

+             * dwarf2dbg.c (get_directory_table_entry): Add an argument for

+             the directory name in .file 0 and use it, instead of PWD.

+             (allocate_filenum): Pass NULL to get_directory_table_entry.

+             (allocate_filename_to_slot): Pass the incoming dirname to

+             get_directory_table_entry.

+             * testsuite/gas/elf/dwarf-5-file0-2.d: New file.

+             * testsuite/gas/elf/dwarf-5-file0-2.s: Likewise.

+             * testsuite/gas/elf/elf.exp: Run dwarf-5-file0-2.

+ 

+ diff --git a/gas/dwarf2dbg.c b/gas/dwarf2dbg.c

+ index 8f5248534ad..9e3437b8948 100644

+ --- a/gas/dwarf2dbg.c

+ +++ b/gas/dwarf2dbg.c

+ @@ -592,6 +592,7 @@ get_basename (const char * pathname)

+  

+  static unsigned int

+  get_directory_table_entry (const char *dirname,

+ +			   const char *file0_dirname,

+  			   size_t dirlen,

+  			   bool can_use_zero)

+  {

+ @@ -621,7 +622,7 @@ get_directory_table_entry (const char *dirname,

+      {

+        if (dirs == NULL || dirs[0] == NULL)

+  	{

+ -	  const char * pwd = getpwd ();

+ +	  const char * pwd = file0_dirname ? file0_dirname : getpwd ();

+  

+  	  if (dwarf_level >= 5 && strcmp (dirname, pwd) != 0)

+  	    {

+ @@ -630,7 +631,8 @@ get_directory_table_entry (const char *dirname,

+  		 directory).  Since we are about to create a directory entry that

+  		 is not the same, allocate the current directory first.

+  		 FIXME: Alternatively we could generate an error message here.  */

+ -	      (void) get_directory_table_entry (pwd, strlen (pwd), true);

+ +	      (void) get_directory_table_entry (pwd, NULL, strlen (pwd),

+ +						true);

+  	      d = 1;

+  	    }

+  	  else

+ @@ -726,7 +728,7 @@ allocate_filenum (const char * pathname)

+    file = get_basename (pathname);

+    dir_len = file - pathname;

+  

+ -  dir = get_directory_table_entry (pathname, dir_len, false);

+ +  dir = get_directory_table_entry (pathname, NULL, dir_len, false);

+  

+    /* Do not use slot-0.  That is specifically reserved for use by

+       the '.file 0 "name"' directive.  */

+ @@ -766,6 +768,7 @@ allocate_filename_to_slot (const char *dirname,

+    const char *file;

+    size_t dirlen;

+    unsigned int i, d;

+ +  const char *file0_dirname = dirname;

+  

+    /* Short circuit the common case of adding the same pathname

+       as last time.  */

+ @@ -856,7 +859,8 @@ allocate_filename_to_slot (const char *dirname,

+        file = filename;

+      }

+  

+ -  d = get_directory_table_entry (dirname, dirlen, num == 0);

+ +  d = get_directory_table_entry (dirname, file0_dirname, dirlen,

+ +				 num == 0);

+    i = num;

+  

+    if (! assign_file_to_slot (i, file, d))

+ diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.d b/gas/testsuite/gas/elf/dwarf-5-file0-2.d

+ new file mode 100644

+ index 00000000000..4b3ed29f4c9

+ --- /dev/null

+ +++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.d

+ @@ -0,0 +1,15 @@

+ +#as: --gdwarf-5

+ +#name: DWARF5 .file 0 dir file

+ +#readelf: -wl

+ +

+ +#...

+ + The Directory Table \(offset 0x.*, lines 1, columns 1\):

+ +  Entry	Name

+ +#...

+ +  0	\(indirect line string, offset: 0x.*\): /example

+ +

+ + The File Name Table \(offset 0x.*, lines 2, columns 2\):

+ +  Entry	Dir	Name

+ +  0	0	\(indirect line string, offset: 0x.*\): test.c

+ +  1	0	\(indirect line string, offset: 0x.*\): test.c

+ +#pass

+ diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.s b/gas/testsuite/gas/elf/dwarf-5-file0-2.s

+ new file mode 100644

+ index 00000000000..135a03bf493

+ --- /dev/null

+ +++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.s

+ @@ -0,0 +1,111 @@

+ +	.file	"test.c"

+ +	.text

+ +.Ltext0:

+ +	.file 0 "/example" "test.c"

+ +	.globl	x

+ +	.section	.bss

+ +	.balign 4

+ +	.type	x, @object

+ +	.size	x, 4

+ +x:

+ +	.zero	4

+ +	.text

+ +.Letext0:

+ +	.file 1 "test.c"

+ +	.section	.debug_info,"",%progbits

+ +.Ldebug_info0:

+ +	.long	0x32

+ +	.2byte	0x5

+ +	.byte	0x1

+ +	.byte	0x4

+ +	.long	.Ldebug_abbrev0

+ +	.uleb128 0x1

+ +	.long	.LASF2

+ +	.byte	0x1d

+ +	.long	.LASF0

+ +	.long	.LASF1

+ +	.long	.Ldebug_line0

+ +	.uleb128 0x2

+ +	.string	"x"

+ +	.byte	0x1

+ +	.byte	0x1

+ +	.byte	0x5

+ +	.long	0x2e

+ +	.uleb128 0x5

+ +	.byte	0x3

+ +	.long	x

+ +	.uleb128 0x3

+ +	.byte	0x4

+ +	.byte	0x5

+ +	.string	"int"

+ +	.byte	0

+ +	.section	.debug_abbrev,"",%progbits

+ +.Ldebug_abbrev0:

+ +	.uleb128 0x1

+ +	.uleb128 0x11

+ +	.byte	0x1

+ +	.uleb128 0x25

+ +	.uleb128 0xe

+ +	.uleb128 0x13

+ +	.uleb128 0xb

+ +	.uleb128 0x3

+ +	.uleb128 0x1f

+ +	.uleb128 0x1b

+ +	.uleb128 0x1f

+ +	.uleb128 0x10

+ +	.uleb128 0x17

+ +	.byte	0

+ +	.byte	0

+ +	.uleb128 0x2

+ +	.uleb128 0x34

+ +	.byte	0

+ +	.uleb128 0x3

+ +	.uleb128 0x8

+ +	.uleb128 0x3a

+ +	.uleb128 0xb

+ +	.uleb128 0x3b

+ +	.uleb128 0xb

+ +	.uleb128 0x39

+ +	.uleb128 0xb

+ +	.uleb128 0x49

+ +	.uleb128 0x13

+ +	.uleb128 0x3f

+ +	.uleb128 0x19

+ +	.uleb128 0x2

+ +	.uleb128 0x18

+ +	.byte	0

+ +	.byte	0

+ +	.uleb128 0x3

+ +	.uleb128 0x24

+ +	.byte	0

+ +	.uleb128 0xb

+ +	.uleb128 0xb

+ +	.uleb128 0x3e

+ +	.uleb128 0xb

+ +	.uleb128 0x3

+ +	.uleb128 0x8

+ +	.byte	0

+ +	.byte	0

+ +	.byte	0

+ +	.section	.debug_aranges,"",%progbits

+ +	.long	0x14

+ +	.2byte	0x2

+ +	.long	.Ldebug_info0

+ +	.byte	0x4

+ +	.byte	0

+ +	.2byte	0

+ +	.2byte	0

+ +	.long	0

+ +	.long	0

+ +	.section	.debug_line,"",%progbits

+ +.Ldebug_line0:

+ +	.section	.debug_str,"MS",%progbits,1

+ +.LASF2:

+ +	.string	"GNU C17 11.2.1 -g"

+ +	.section	.debug_line_str,"MS",%progbits,1

+ +.LASF1:

+ +	.string	"/example"

+ +.LASF0:

+ +	.string	"test.c"

+ +	.ident	"GCC: (GNU) 11.2.1"

+ +	.section	.note.GNU-stack,"",%progbits

+ diff --git a/gas/testsuite/gas/elf/elf.exp b/gas/testsuite/gas/elf/elf.exp

+ index 18bc1db8c70..2485008d569 100644

+ --- a/gas/testsuite/gas/elf/elf.exp

+ +++ b/gas/testsuite/gas/elf/elf.exp

+ @@ -297,6 +297,7 @@ if { [is_elf_format] } then {

+      run_dump_test "dwarf2-19" $dump_opts

+      run_dump_test "dwarf2-20" $dump_opts

+      run_dump_test "dwarf-5-file0" $dump_opts

+ +    run_dump_test "dwarf-5-file0-2" $dump_opts

+      run_dump_test "dwarf-5-dir0" $dump_opts

+      run_dump_test "dwarf-4-cu" $dump_opts

+      run_dump_test "dwarf-5-cu" $dump_opts

+ commit 9f81b99e2426d19760c20c07f8cd3ae5cd85e8df

+ Author: Alan Modra <amodra@gmail.com>

+ Date:   Fri Sep 10 18:01:43 2021 +0930

+ 

+     Re: gas: Use the directory name in .file 0

+     

+             PR gas/28266

+             * testsuite/gas/elf/dwarf-5-file0-2.s: Use %object rather than

+             @object, .4byte instead of .long, and .asciz instead of .string.

+ 

+ diff --git a/gas/testsuite/gas/elf/dwarf-5-file0-2.s b/gas/testsuite/gas/elf/dwarf-5-file0-2.s

+ index 135a03bf493..bab4a16b56b 100644

+ --- a/gas/testsuite/gas/elf/dwarf-5-file0-2.s

+ +++ b/gas/testsuite/gas/elf/dwarf-5-file0-2.s

+ @@ -5,7 +5,7 @@

+  	.globl	x

+  	.section	.bss

+  	.balign 4

+ -	.type	x, @object

+ +	.type	x, %object

+  	.size	x, 4

+  x:

+  	.zero	4

+ @@ -14,30 +14,30 @@ x:

+  	.file 1 "test.c"

+  	.section	.debug_info,"",%progbits

+  .Ldebug_info0:

+ -	.long	0x32

+ +	.4byte	0x32

+  	.2byte	0x5

+  	.byte	0x1

+  	.byte	0x4

+ -	.long	.Ldebug_abbrev0

+ +	.4byte	.Ldebug_abbrev0

+  	.uleb128 0x1

+ -	.long	.LASF2

+ +	.4byte	.LASF2

+  	.byte	0x1d

+ -	.long	.LASF0

+ -	.long	.LASF1

+ -	.long	.Ldebug_line0

+ +	.4byte	.LASF0

+ +	.4byte	.LASF1

+ +	.4byte	.Ldebug_line0

+  	.uleb128 0x2

+ -	.string	"x"

+ +	.asciz	"x"

+  	.byte	0x1

+  	.byte	0x1

+  	.byte	0x5

+ -	.long	0x2e

+ +	.4byte	0x2e

+  	.uleb128 0x5

+  	.byte	0x3

+ -	.long	x

+ +	.4byte	x

+  	.uleb128 0x3

+  	.byte	0x4

+  	.byte	0x5

+ -	.string	"int"

+ +	.asciz	"int"

+  	.byte	0

+  	.section	.debug_abbrev,"",%progbits

+  .Ldebug_abbrev0:

+ @@ -88,24 +88,24 @@ x:

+  	.byte	0

+  	.byte	0

+  	.section	.debug_aranges,"",%progbits

+ -	.long	0x14

+ +	.4byte	0x14

+  	.2byte	0x2

+ -	.long	.Ldebug_info0

+ +	.4byte	.Ldebug_info0

+  	.byte	0x4

+  	.byte	0

+  	.2byte	0

+  	.2byte	0

+ -	.long	0

+ -	.long	0

+ +	.4byte	0

+ +	.4byte	0

+  	.section	.debug_line,"",%progbits

+  .Ldebug_line0:

+  	.section	.debug_str,"MS",%progbits,1

+  .LASF2:

+ -	.string	"GNU C17 11.2.1 -g"

+ +	.asciz	"GNU C17 11.2.1 -g"

+  	.section	.debug_line_str,"MS",%progbits,1

+  .LASF1:

+ -	.string	"/example"

+ +	.asciz	"/example"

+  .LASF0:

+ -	.string	"test.c"

+ +	.asciz	"test.c"

+  	.ident	"GCC: (GNU) 11.2.1"

+  	.section	.note.GNU-stack,"",%progbits

file modified
+9 -1
@@ -39,7 +39,7 @@ 

  Summary: A GNU collection of binary utilities

  Name: binutils%{?name_cross}%{?_with_debug:-debug}

  Version: 2.37

- Release: 15%{?dist}

+ Release: 16%{?dist}

  License: GPLv3+

  URL: https://sourceware.org/binutils

  
@@ -305,6 +305,10 @@ 

  # Lifetime: Fixed in 2.38.

  Patch23: binutils-empty-MIND-string.patch

  

+ # Purpose:  Fix ccache test failure introduced with 

+ # Lifetime: Fixed in 2.38.

+ Patch24: binutils-gas-Use-the-directory-name-in-.file-0.patch

+ 

  #----------------------------------------------------------------------------

  

  Provides: bundled(libiberty)
@@ -915,6 +919,10 @@ 

  

  #----------------------------------------------------------------------------

  %changelog

+ * Wed Oct 27 2021 Orion Poplawski <orion@nwra.com> - 2.37-16

+ - Add upstream patch to use the directory name in .file 0, fixes ccache FTBFS

+   (bz#1996936)

+ 

  * Wed Oct 13 2021 Nick Clifton  <nickc@redhat.com> - 2.27-15

  - Fix linker seg-fault compiling efivar libraries.  (#2012247)

  

This fixes a change that was introduced with the update from 2.35.1-41.fc34 to 2.35.2-4.fc34 and broke a ccache test:

https://koschei.fedoraproject.org/package/ccache?last_seen_ts=1631215764&collection=f34
https://github.com/ccache/ccache/issues/919#issuecomment-904918762
https://sourceware.org/bugzilla/show_bug.cgi?id=28266

I would also like to see this fixed in F35 and F34 if possible. What is the desired mechanism for this? Thank you.

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

Pull-Request has been merged by nickc

2 years ago