From eb9b0e389d4a385dda1e053a9ba7493c0a4d3cb7 Mon Sep 17 00:00:00 2001 From: Konstantin Demin Date: Sat, 16 Aug 2025 22:54:21 +0300 Subject: [PATCH] sync with Debian version: 2.45-4 (released to unstable) commit: 6f0b22a3261e3f255a7ff03d9fc510f37bf721fb --- debian/control | 1 - debian/control.in | 1 - debian/patches/branch-updates.diff | 347 ++++++++++++++++++++++++++++- 3 files changed, 344 insertions(+), 5 deletions(-) diff --git a/debian/control b/debian/control index ca1d560..ea9e38a 100644 --- a/debian/control +++ b/debian/control @@ -193,7 +193,6 @@ Architecture: any Priority: optional Depends: binutils (= ${binary:Version}), libbinutils (= ${binary:Version}), libctf0 (= ${binary:Version}), libctf-nobfd0 (= ${binary:Version}), - libsframe-dev (= ${binary:Version}), libgprofng0 (= ${binary:Version}) [amd64 arm64 i386 riscv64 x32], Conflicts: libbfd-dev Provides: libbfd-dev diff --git a/debian/control.in b/debian/control.in index 02d8a9e..41410b1 100644 --- a/debian/control.in +++ b/debian/control.in @@ -193,7 +193,6 @@ Architecture: any Priority: optional Depends: binutils (= ${binary:Version}), libbinutils (= ${binary:Version}), libctf0 (= ${binary:Version}), libctf-nobfd0 (= ${binary:Version}), - libsframe-dev (= ${binary:Version}), libgprofng0 (= ${binary:Version}) [amd64 arm64 i386 riscv64 x32], Conflicts: libbfd-dev Provides: libbfd-dev diff --git a/debian/patches/branch-updates.diff b/debian/patches/branch-updates.diff index f9ba491..d9db242 100644 --- a/debian/patches/branch-updates.diff +++ b/debian/patches/branch-updates.diff @@ -1,6 +1,6 @@ # DP: updates from the binutils-2.45 branch -# git diff 2bc7af1ff7732451b6a7b09462a815c3284f9613 f57c0f19710c6fb2052d3709da7081327918ddf9 +# git diff 2bc7af1ff7732451b6a7b09462a815c3284f9613 f3723832ffdd77f7b387d2c26d73eecf0321b3bd diff --git a/bfd/archive.c b/bfd/archive.c index 8e20554d781..c61d4b12658 100644 @@ -434,7 +434,7 @@ index 46fafb332de..505f1196987 100644 } } diff --git a/bfd/version.h b/bfd/version.h -index beed058a6be..c7bbd1445ca 100644 +index beed058a6be..87fce6dafb3 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -16,7 +16,7 @@ @@ -442,7 +442,7 @@ index beed058a6be..c7bbd1445ca 100644 In releases, the date is not included in either version strings or sonames. */ -#define BFD_VERSION_DATE 20250727 -+#define BFD_VERSION_DATE 20250810 ++#define BFD_VERSION_DATE 20250816 #define BFD_VERSION @bfd_version@ #define BFD_VERSION_STRING @bfd_version_package@ @bfd_version_string@ #define REPORT_BUGS_TO @report_bugs_to@ @@ -1228,6 +1228,347 @@ index 00000000000..e02e16b7d26 +.globl _start +.set _start, 1b +.size _start, 2b - 1b +diff --git a/libctf/configure b/libctf/configure +index 7466d56a18b..89c99c2ddbf 100755 +--- a/libctf/configure ++++ b/libctf/configure +@@ -15966,6 +15966,14 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + ++case "${host}" in ++ # PR libctf/29292 ++ # libctf's use of mmap doesn't work on Solaris 11.4, so disable it. ++ *-*-solaris2.11*) ++ ac_cv_func_mmap_fixed_mapped=no ++ ;; ++esac ++ + + + +@@ -17015,7 +17023,7 @@ if test -n "$decommented_version_script"; then + # used by GNU ld. Use cpp to strip the comments out. (cpp exists under this + # name on all platforms that support ld -z gnu-version-script.) + /lib/cpp < $srcdir/libctf.ver > libctf-decommented.ver +- /lib/cpp < $srcdir/libctf-nobfd.ver > libctf-nobfd-decommented.ver ++ /lib/cpp < libctf-nobfd.ver > libctf-nobfd-decommented.ver + VERSION_FLAGS="$ac_cv_libctf_version_script='libctf-decommented.ver'" + VERSION_FLAGS_NOBFD="$ac_cv_libctf_version_script='libctf-nobfd-decommented.ver'" + elif test -z "$no_version_script"; then +diff --git a/libctf/configure.ac b/libctf/configure.ac +index fbd8ec12a14..40d00e8eb18 100644 +--- a/libctf/configure.ac ++++ b/libctf/configure.ac +@@ -65,6 +65,14 @@ AM_MAINTAINER_MODE + AM_INSTALL_LIBBFD + ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_libctf_warn_cflags]) + ++case "${host}" in ++ # PR libctf/29292 ++ # libctf's use of mmap doesn't work on Solaris 11.4, so disable it. ++ *-*-solaris2.11*) ++ ac_cv_func_mmap_fixed_mapped=no ++ ;; ++esac ++ + GCC_AC_FUNC_MMAP + # Needed for BFD capability checks. + AC_SEARCH_LIBS(dlsym, dl) +@@ -293,7 +301,7 @@ if test -n "$decommented_version_script"; then + # used by GNU ld. Use cpp to strip the comments out. (cpp exists under this + # name on all platforms that support ld -z gnu-version-script.) + /lib/cpp < $srcdir/libctf.ver > libctf-decommented.ver +- /lib/cpp < $srcdir/libctf-nobfd.ver > libctf-nobfd-decommented.ver ++ /lib/cpp < libctf-nobfd.ver > libctf-nobfd-decommented.ver + VERSION_FLAGS="$ac_cv_libctf_version_script='libctf-decommented.ver'" + VERSION_FLAGS_NOBFD="$ac_cv_libctf_version_script='libctf-nobfd-decommented.ver'" + elif test -z "$no_version_script"; then +diff --git a/libctf/ctf-link.c b/libctf/ctf-link.c +index 2d4401d2210..524ed7e2466 100644 +--- a/libctf/ctf-link.c ++++ b/libctf/ctf-link.c +@@ -20,10 +20,6 @@ + #include + #include + +-#if defined (PIC) +-#pragma weak ctf_open +-#endif +- + /* CTF linking consists of adding CTF archives full of content to be merged into + this one to the current file (which must be writable) by calling + ctf_link_add_ctf. Once this is done, a call to ctf_link will merge the type +@@ -145,56 +141,33 @@ ctf_link_add_ctf_internal (ctf_dict_t *fp, ctf_archive_t *ctf, + return ctf_set_errno (fp, ENOMEM); + } + +-/* Add a file, memory buffer, or unopened file (by name) to a link. +- +- You can call this with: +- +- CTF and NAME: link the passed ctf_archive_t, with the given NAME. +- NAME alone: open NAME as a CTF file when needed. +- BUF and NAME: open the BUF (of length N) as CTF, with the given NAME. (Not +- yet implemented.) ++/* Add an opened CTF archive or unopened file (by name) to a link. ++ If CTF is NULL and NAME is non-null, an unopened file is meant: ++ otherwise, the specified archive is assumed to have the given NAME. + +- Passed in CTF args are owned by the dictionary and will be freed by it. +- The BUF arg is *not* owned by the dictionary, and the user should not free +- its referent until the link is done. ++ If CTF is NULL, the NAME is only opened when needed, and is closed when no ++ longer needed, so that large cu-mapped links will only use memory for their ++ cu-mapped inputs briefly (compensating for the memory usage of the ++ smushed-together cu-mapped verion). + +- The order of calls to this function influences the order of types in the +- final link output, but otherwise is not important. ++ Passed in CTF args are owned by the dictionary and will be freed by it. + +- Repeated additions of the same NAME have no effect; repeated additions of +- different dicts with the same NAME add all the dicts with unique NAMEs +- derived from NAME. ++ The order of calls to this function influences the order of types in the ++ final link output, but otherwise is not important. + +- Private for now, but may in time become public once support for BUF is +- implemented. */ ++ Repeated additions of the same NAME have no effect; repeated additions of ++ different dicts with the same NAME add all the dicts with unique NAMEs ++ derived from NAME. */ + +-static int +-ctf_link_add (ctf_dict_t *fp, ctf_archive_t *ctf, const char *name, +- void *buf _libctf_unused_, size_t n _libctf_unused_) ++int ++ctf_link_add_ctf (ctf_dict_t *fp, ctf_archive_t *ctf, const char *name) + { +- if (buf) +- return (ctf_set_errno (fp, ECTF_NOTYET)); +- +- if (!((ctf && name && !buf) +- || (name && !buf && !ctf) +- || (buf && name && !ctf))) ++ if (!name) + return (ctf_set_errno (fp, EINVAL)); + +- /* We can only lazily open files if libctf.so is in use rather than +- libctf-nobfd.so. This is a little tricky: in shared libraries, we can use +- a weak symbol so that -lctf -lctf-nobfd works, but in static libraries we +- must distinguish between the two libraries explicitly. */ +- +-#if defined (PIC) +- if (!buf && !ctf && name && !ctf_open) +- return (ctf_set_errno (fp, ECTF_NEEDSBFD)); +-#elif NOBFD +- if (!buf && !ctf && name) +- return (ctf_set_errno (fp, ECTF_NEEDSBFD)); +-#endif +- + if (fp->ctf_link_outputs) + return (ctf_set_errno (fp, ECTF_LINKADDEDLATE)); ++ + if (fp->ctf_link_inputs == NULL) + fp->ctf_link_inputs = ctf_dynhash_create (ctf_hash_string, + ctf_hash_eq_string, free, +@@ -203,22 +176,15 @@ ctf_link_add (ctf_dict_t *fp, ctf_archive_t *ctf, const char *name, + if (fp->ctf_link_inputs == NULL) + return (ctf_set_errno (fp, ENOMEM)); + +- return ctf_link_add_ctf_internal (fp, ctf, NULL, name); +-} +- +-/* Add an opened CTF archive or unopened file (by name) to a link. +- If CTF is NULL and NAME is non-null, an unopened file is meant: +- otherwise, the specified archive is assumed to have the given NAME. +- +- Passed in CTF args are owned by the dictionary and will be freed by it. ++ /* We can only lazily open files if libctf.so is in use rather than ++ libctf-nobfd.so. */ + +- The order of calls to this function influences the order of types in the +- final link output, but otherwise is not important. */ ++#if NOBFD ++ if (!ctf) ++ return (ctf_set_errno (fp, ECTF_NEEDSBFD)); ++#endif + +-int +-ctf_link_add_ctf (ctf_dict_t *fp, ctf_archive_t *ctf, const char *name) +-{ +- return ctf_link_add (fp, ctf, name, NULL, 0); ++ return ctf_link_add_ctf_internal (fp, ctf, NULL, name); + } + + /* Lazily open a CTF archive for linking, if not already open. +@@ -238,12 +204,12 @@ ctf_link_lazy_open (ctf_dict_t *fp, ctf_link_input_t *input) + return 1; + + /* See ctf_link_add_ctf. */ +-#if defined (PIC) || !NOBFD +- input->clin_arc = ctf_open (input->clin_filename, NULL, &err); +-#else ++#if NOBFD + ctf_err_warn (fp, 0, ECTF_NEEDSBFD, _("cannot open %s lazily"), + input->clin_filename); + return ctf_set_errno (fp, ECTF_NEEDSBFD); ++#else ++ input->clin_arc = ctf_open (input->clin_filename, NULL, &err); + #endif + + /* Having no CTF sections is not an error. We just don't need to do +diff --git a/libctf/ctf-serialize.c b/libctf/ctf-serialize.c +index 8c35a2b2489..f04c278344c 100644 +--- a/libctf/ctf-serialize.c ++++ b/libctf/ctf-serialize.c +@@ -74,6 +74,12 @@ ctf_symtab_skippable (ctf_link_sym_t *sym) + || sym->st_shndx == SHN_UNDEF + || strcmp (sym->st_name, "_START_") == 0 + || strcmp (sym->st_name, "_END_") == 0 ++ || strcmp (sym->st_name, "_DYNAMIC") == 0 ++ || strcmp (sym->st_name, "_GLOBAL_OFFSET_TABLE_") == 0 ++ || strcmp (sym->st_name, "_PROCEDURE_LINKAGE_TABLE_") == 0 ++ || strcmp (sym->st_name, "_edata") == 0 ++ || strcmp (sym->st_name, "_end") == 0 ++ || strcmp (sym->st_name, "_etext") == 0 + || (sym->st_type == STT_OBJECT && sym->st_shndx == SHN_EXTABS + && sym->st_value == 0)); + } +diff --git a/libctf/testsuite/config/default.exp b/libctf/testsuite/config/default.exp +index f24482620b6..d5e51f418ca 100644 +--- a/libctf/testsuite/config/default.exp ++++ b/libctf/testsuite/config/default.exp +@@ -34,6 +34,10 @@ if ![info exists as] then { + set as [findfile $base_dir/../gas/as-new $base_dir/../gas/as-new [transform as]] + } + ++if ![info exists objdump] then { ++ set objdump [findfile $base_dir/../binutils/objdump] ++} ++ + remote_exec host "mkdir -p tmpdir" + + # Make symlinks from tmpdir/libctf to the linker and assembler in the +@@ -63,10 +67,12 @@ if {![info exists CFLAGS_FOR_TARGET]} { + if ![info exists AR] then { + set AR [findfile $base_dir/../binutils/ar] + } +- + if {![info exists OBJDUMP]} { + set OBJDUMP [findfile $base_dir/../binutils/objdump] + } ++if ![info exists OBJDUMPFLAGS] then { ++ set OBJDUMPFLAGS {} ++} + + # load the utility procedures + load_lib ctf-lib.exp +diff --git a/libctf/testsuite/lib/ctf-lib.exp b/libctf/testsuite/lib/ctf-lib.exp +index 64d2a40ad9f..4df6619606b 100644 +--- a/libctf/testsuite/lib/ctf-lib.exp ++++ b/libctf/testsuite/lib/ctf-lib.exp +@@ -20,6 +20,51 @@ + + load_file $srcdir/../../ld/testsuite/lib/ld-lib.exp + ++# Returns true if the target linker deduplicates CTF. ++proc check_ctf_linker_dedup { } { ++ global ctf_linker_dedup_saved ++ ++ if {![info exists ctf_linker_dedup_saved]} { ++ set ctf_linker_dedup_saved 0 ++ ++ if ([check_ctf_available]) { ++ global objdump srcdir ++ ++ set basename "tmpdir/ctf_linker_dedups[pid]" ++ compile_one_cc $srcdir/libctf-lookup/ambiguous-struct-A.c ${basename}-A.o "-gctf -fPIC -c" ++ compile_one_cc $srcdir/libctf-lookup/ambiguous-struct-B.c ${basename}-B.o "-gctf -fPIC -c" ++ compile_one_cc "${basename}-A.o ${basename}-B.o" $basename.so "-gctf -fPIC -shared" ++ if {! [remote_file host exists $basename.so] } { ++ return 0 ++ } ++ ++ # Don't use run_host_cmd: it dumps the entire output into the log, ++ # even on success. ++ set cmdret [remote_exec host [concat sh -c [list "$objdump --ctf $basename.so >dump.out 2>dump.err"]] "" "/dev/null"] ++ set cmdret [lindex $cmdret 0] ++ remote_upload host "dump.out" ++ remote_upload host "dump.err" ++ set dump_out [prune_warnings [file_contents "dump.out"]] ++ set dump_err [prune_warnings [file_contents "dump.err"]] ++ remote_file host delete "dump.out" "dump.err" ++ remote_file build delete "dump.out" "dump.err" ++ ++ if {$cmdret != 0} { ++ verbose -log "failed with $cmdret: stderr: $dump_err" ++ verbose -log "output: $dump_out" ++ return 0; ++ } ++ ++ remote_file host delete $basename.so ${basename}-A.o ${basename}-B.o ++ if [regexp {CTF archive member: } $dump_out] { ++ set ctf_linker_dedup_saved 1 ++ } ++ } ++ } ++ return $ctf_linker_dedup_saved ++} ++ ++ + proc run_native_host_cmd { command } { + global link_output + global ld +diff --git a/libctf/testsuite/libctf-lookup/lookup.exp b/libctf/testsuite/libctf-lookup/lookup.exp +index a8b09c2df78..d15c315729d 100644 +--- a/libctf/testsuite/libctf-lookup/lookup.exp ++++ b/libctf/testsuite/libctf-lookup/lookup.exp +@@ -28,6 +28,11 @@ if {![check_ctf_available]} { + return 0 + } + ++if {![check_ctf_linker_dedup]} { ++ unsupported "no CTF deduplication support in the linker" ++ return 0 ++} ++ + if {[info exists env(LC_ALL)]} { + set old_lc_all $env(LC_ALL) + } +diff --git a/libctf/testsuite/libctf-regression/libctf-repeat-cu.exp b/libctf/testsuite/libctf-regression/libctf-repeat-cu.exp +index e29cf63fce9..7c19fe8f6a7 100644 +--- a/libctf/testsuite/libctf-regression/libctf-repeat-cu.exp ++++ b/libctf/testsuite/libctf-regression/libctf-repeat-cu.exp +@@ -37,6 +37,11 @@ if {![check_ctf_available]} { + return 0 + } + ++if {![check_ctf_linker_dedup]} { ++ unsupported "no CTF deduplication support in the linker" ++ return 0 ++} ++ + if {[info exists env(LC_ALL)]} { + set old_lc_all $env(LC_ALL) + } +diff --git a/libctf/testsuite/libctf-regression/regression.exp b/libctf/testsuite/libctf-regression/regression.exp +index e4b63473691..0270cca0cba 100644 +--- a/libctf/testsuite/libctf-regression/regression.exp ++++ b/libctf/testsuite/libctf-regression/regression.exp +@@ -23,6 +23,11 @@ if {![check_ctf_available]} { + return 0 + } + ++if {![check_ctf_linker_dedup]} { ++ unsupported "no CTF deduplication support in the linker" ++ return 0 ++} ++ + if ![is_elf_format] { + unsupported "CTF needs bfd changes to be emitted on non-ELF" + return 0 diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 2ae5626ed2e..b072d0bed52 100644 --- a/libiberty/ChangeLog