From ec0d868ca53a069bf81510ea57611270dd2a9193 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 24 Jan 2022 14:03:56 +0000 Subject: [PATCH] Add upstream patch to use the directory name in .file 0, fixes ccache FTBFS Resolves: #2043970 --- ...as-Use-the-directory-name-in-.file-0.patch | 292 ++++++++++++++++++ binutils.spec | 9 +- 2 files changed, 300 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..e3e7526 --- /dev/null +++ b/binutils-gas-Use-the-directory-name-in-.file-0.patch @@ -0,0 +1,292 @@ +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/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 -rup binutils.orig/gas/dwarf2dbg.c binutils-2.35.2/gas/dwarf2dbg.c +--- binutils.orig/gas/dwarf2dbg.c 2021-11-08 14:59:19.759524743 +0000 ++++ binutils-2.35.2/gas/dwarf2dbg.c 2021-11-08 15:00:55.179909708 +0000 +@@ -588,6 +588,7 @@ get_basename (const char * pathname) + + static unsigned int + get_directory_table_entry (const char * dirname, ++ const char * file0_dirname, + size_t dirlen, + bfd_boolean can_use_zero) + { +@@ -617,7 +618,7 @@ get_directory_table_entry (const char * + { + 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) + { +@@ -626,7 +627,7 @@ get_directory_table_entry (const char * + 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 +@@ -722,7 +723,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. */ +@@ -762,6 +763,7 @@ allocate_filename_to_slot (const char * + 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. */ +@@ -836,7 +838,8 @@ allocate_filename_to_slot (const char * + 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 -rup binutils.orig/gas/testsuite/gas/elf/elf.exp binutils-2.35.2/gas/testsuite/gas/elf/elf.exp +--- binutils.orig/gas/testsuite/gas/elf/elf.exp 2021-11-08 14:59:19.856524118 +0000 ++++ binutils-2.35.2/gas/testsuite/gas/elf/elf.exp 2021-11-08 14:59:36.225418609 +0000 +@@ -274,6 +274,7 @@ if { [is_elf_format] } then { + run_dump_test "dwarf2-18" $dump_opts + run_dump_test "dwarf2-19" $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 + diff --git a/binutils.spec b/binutils.spec index 5373e55..48b3dae 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.35.2 -Release: 16%{?dist} +Release: 17%{?dist} License: GPLv3+ URL: https://sourceware.org/binutils @@ -398,6 +398,10 @@ Patch50: binutils-AArch64-EFI.patch # Lifetime: Fixed in 2.37 Patch51: binutils-x86-AMX-insns.patch +# Purpose: Fix ccache test failure introduced with 2.37 +# Lifetime: Fixed in 2.38. +Patch52: binutils-gas-Use-the-directory-name-in-.file-0.patch + #---------------------------------------------------------------------------- Provides: bundled(libiberty) @@ -986,6 +990,9 @@ exit 0 #---------------------------------------------------------------------------- %changelog +* Mon Jan 24 2022 Nick Clifton - 2.35.2-17 +- Add upstream patch to use the directory name in .file 0, fixes ccache FTBFS (#2043970) + * Fri Jan 21 2022 Nick Clifton - 2.35.2-16 - Fix the handling of the /usr/bin/ld file. (#2042447)