From ca8ef333004d447b03bbfcf9f966eda0aaee1317 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Tue, 26 Oct 2021 20:20:10 -0600 Subject: [PATCH] Add upstream patch to use the directory name in .file 0, fixes ccache FTBFS (bz#1996936) --- ...as-Use-the-directory-name-in-.file-0.patch | 323 ++++++++++++++++++ binutils.spec | 10 +- 2 files changed, 332 insertions(+), 1 deletion(-) create mode 100644 binutils-gas-Use-the-directory-name-in-.file-0.patch diff --git a/binutils-gas-Use-the-directory-name-in-.file-0.patch b/binutils-gas-Use-the-directory-name-in-.file-0.patch new file mode 100644 index 0000000..5a7f797 --- /dev/null +++ b/binutils-gas-Use-the-directory-name-in-.file-0.patch @@ -0,0 +1,323 @@ +commit 58f3b6a3495074da39ba6e19935e4401dcbacf88 +Author: H.J. Lu +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 +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 diff --git a/binutils.spec b/binutils.spec index 6343cea..7e5e04f 100644 --- a/binutils.spec +++ b/binutils.spec @@ -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 @@ Patch22: binutils-ld-default-entry-of-0-for-shared.patch # 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 @@ exit 0 #---------------------------------------------------------------------------- %changelog +* Wed Oct 27 2021 Orion Poplawski - 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 - 2.27-15 - Fix linker seg-fault compiling efivar libraries. (#2012247)