From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by sourceware.org (Postfix) with ESMTPS id 1F8083857805 for ; Sun, 14 Feb 2021 22:57:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1F8083857805 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from skylla.schaltzentrale ([93.238.156.195]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MVNAr-1lLdSb2QT9-00SPum for ; Sun, 14 Feb 2021 23:57:27 +0100 Date: Sun, 14 Feb 2021 23:57:18 +0100 From: Alexander Miller To: elfutils-devel@sourceware.org Subject: [PATCH] Improve building with LTO Message-ID: <20210214235718.7654b5f1.alex.miller@gmx.de> X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:cQaV1UzUaK2/9mVLOT+3U7YPqVrwNelsie1zMF26qJrKafqnjZN 1huPZkH8woGCzevI7u0fRTusYKm/zO7m9yBKewL53/imSpJye2tYLwLgKl1C6WBkp0X96Vx 3pvDdhl+ZJV+NiU+65YKsC1VFED1YH/nYV/M+JvsubpoySWjjnZnOzv9udRXxK5UYNOIK4b 2BQbY2WXDvJ7kFLm367EA== X-UI-Out-Filterresults: notjunk:1;V03:K0:2stBTpMGGZ0=:LLW9UfUZMRvxisseZFrk5t dkNY8DpUc5CQTigPPMjtRALUuEU0am41zSrmDDxXHwB76XW2yLY7v+14cMAxBONUOLiMyZDW6 qDqAayLlhEQ+4wrO9YjVHTP5eO6muW29i+1c3HrzQ5cwNnak8OcDejw4PZ8DFoMNIQY9IV4IA hDR2i8ViMCZO69osVV0RfcE/DlqLhSm+HO921hzcvRu+HnlfIlO1lCAcwcNE6gwFltNHJ+7dX XwSpUOsucc3mGVtNXb+jv4xOj01kZosb8HIMi5CnNh2KWOwOo8m7PuIk0vFRk/weH5OlU35kH S5gbRCjfA4SFwQYqNisKHd3QVUPFFTiyDwVPpUgVvAkc86lqibgVK3pB1nOUvD83Wu7FU7u5o PE8iw5L943FuAufD8/l+4PBpLx8QxSwfwWX1NznAFUWisDVFnKFaonF9sYJyf7ItiMkpdCWDn NweVejLgsAXcepfJCuktXJeceXv3g5qNCl2iDj7VTtMmUbcQ/7Dt+C1yldICg1d3jJu/GqlPF k6EaecKMQ8EMQYGvSokbKItKbhPKRaLzGh1syvJPGiN3esCihkindjKSEUKLrr6tuoklcpw6B BGyS8SnMNIsKMp5MSt8nOXVd490cW9vZugvD+8wpCiSE7fNSpEL8JPfqPdDrSIMCYMTlgbfTb ufVKLpDSakTdlp9PbsdAKHLkHwY+53xxy4xtbI13C+5c5GoavK1wD8xSO9fZy8LkQoqVO4fh6 yUX9MtiaNvuSjtmF1xvoIT5iDh+bND5aywT25Ph2RA+KoCh3Ch3cORJoX0d7xq/7jv1CGPiNS 0do7bIGmajZSHemToIQ5EWuH3qfmqT9Psk4FKpUBUwLTSZCu50mlWGzkJW2k35ZV/KkQlzc3w A5N4GKM9ciYWJ+Yko6KQ== X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_STOCKGEN, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Feb 2021 22:57:32 -0000 Here's my attempt to use gcc-10's new symver attribute to avoid global asm statements that cause trouble with LTO. That requires converting from triple @ syntax to double @ syntax. To satisfy those picky linkers, the unversioned name of the affected symbols has to be changed. The NEW_VERSION macros have to be moved before the function definitions. Also tried to improve the situation for older gcc versions. Although gcc-5 added a no_reorder attribute that's supposed to help here, it doesn't work reliably (but improves the situation substantially). I've tested the patch with different compilers (gcc-10, gcc-9, gcc-6, clang-11), linkers (bfd, gold, lld), 32/64 bit (x86), with/without LTO. Of course you need to cheat a bit to build elfutils with clang, and lld can't be used with every combination. The workaround for older gcc was enough for gcc-9 and 32bit gcc-6, but 64bit gcc-6 builds needed -flto-partition=3Dnone, so this seems to depend on the version and options used. Symbol versioning worked as expected in all cases, at least the list of dynamic symbols of the libs looked good to me. The test suite seems brittle, though. It fails on 32bit builds, with gold or lld, and with lto builds using clang (unknown object format) or gcc-6 (debug info not found). But that's not related to this patch. For 64bit builds with gcc-{9,10} and bfd, the test suite succeeds even with lto enabled. Additional notes: * The asm names for the compat versions seem unnecessary, but I've kept them. * Commenting out old versions in the .map file may not be needed. It's mostly a leftover from an earlier attempt, but I didn't want to re-run all test and I actually prefer it like this, so I left it in. * See commit message below. ------------------------ 8< ------------------------ Use symver attribute for symbol versioning instead of .symver assembler directive when available. Convert to use double @ syntax for default version in all cases (required when using the attribute). Add the attributes externally_visible, no_reorder if available when using assembler directives to improve the situation for < gcc-10. This is not 100% reliable, though; -flto-partition=3Dnone may still be needed in some cases. Note that -Wno-error=3Dstack-usage=3D is still needed to build with LTO. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=3D24498 Signed-off-by: Alexander Miller --- lib/ChangeLog | 13 +++++++ lib/eu-config.h | 63 +++++++++++++++++++++++++++------- libdw/ChangeLog | 13 +++++++ libdw/dwarf_aggregate_size.c | 4 +-- libdw/dwarf_arrayorder.c | 2 +- libdw/dwarf_bitoffset.c | 2 +- libdw/dwarf_bitsize.c | 2 +- libdw/dwarf_bytesize.c | 2 +- libdw/dwarf_decl_column.c | 2 +- libdw/dwarf_decl_file.c | 2 +- libdw/dwarf_decl_line.c | 2 +- libdw/dwarf_srclang.c | 4 +-- libdw/libdw.map | 41 +++++++++++----------- libdwelf/ChangeLog | 5 +++ libdwelf/dwelf_elf_begin.c | 2 +- libdwfl/ChangeLog | 7 ++++ libdwfl/core-file.c | 4 +-- libdwfl/dwfl_module_build_id.c | 4 +-- libdwfl/dwfl_report_elf.c | 4 +-- 19 files changed, 128 insertions(+), 50 deletions(-) diff --git a/lib/ChangeLog b/lib/ChangeLog index 371e213..1f4cd62 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,16 @@ +2021-02-14 Alexander Miller + + * eu-config.h (used_in_asm): New macro. + (NEW_INTDEF): New macro. + (NEW_VERSION): Mark symbol as used_in_asm. Use @@ symver and change + asm name instead. New variant using symver attribute if available. + (OLD_VERSION): Update new symbol name. Indent asm directives. New + variant using symver attribute. + (COMPAT_VERSION_NEWPROTO): Mark symbol as used_in_asm. Reorder + lines. Replace asm with __asm__ in declaration. New variant using + symver attribute. + (COMPAT_VERSION): Likewise. + 2021-02-05 Mark Wielaard =20 * printversion.c (print_version): Update copyright year. diff --git a/lib/eu-config.h b/lib/eu-config.h index f0e3d07..7e9bd1e 100644 --- a/lib/eu-config.h +++ b/lib/eu-config.h @@ -176,27 +176,66 @@ asm (".section predict_data, \"aw\"; .previous\n" /* This macro is used by the tests conditionalize for standalone building.= */ #define ELFUTILS_HEADER(name) =20 +/* Don't reorder with global asm blocks or optimize away. (Doesn't reliably + keep it in the same LTO partition, though; -flto-partition=3Dnone may be + still needed for some gcc versions < 10.) */ +#ifdef __has_attribute +# if __has_attribute(no_reorder) +# define used_in_asm __attribute__ ((externally_visible, no_reorder)) +# endif +#endif +#ifndef used_in_asm +# define used_in_asm /* empty */ +#endif =20 #ifdef SYMBOL_VERSIONING -# define OLD_VERSION(name, version) \ - asm (".globl _compat." #version "." #name "\n" \ - "_compat." #version "." #name " =3D " #name "\n" \ - ".symver _compat." #version "." #name "," #name "@" #version); -# define NEW_VERSION(name, version) \ - asm (".symver " #name "," #name "@@@" #version); -# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ - asm (".symver _compat." #version "." #name "," #name "@" #version); \ +# define NEW_INTDEF(name) __typeof (name) INTUSE(name) \ + __attribute__ ((alias ("_new." #name))) attribute_hidden; +# ifdef __has_attribute +# if __has_attribute(symver) +# define NEW_VERSION(name, version) \ + __typeof (name) name __asm__ ("_new." #name) \ + __attribute__ ((symver (#name "@@" #version))); +# define OLD_VERSION(name, version) \ + __typeof (name) _compat_old##__COUNTER__##_##name \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((alias ("_new." #name), symver (#name "@" #version))); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ - asm ("_compat." #version "." #name); -# define COMPAT_VERSION(name, version, prefix) \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((symver (#name "@" #version))); +# define COMPAT_VERSION(name, version, prefix) \ asm (".symver _compat." #version "." #name "," #name "@" #version); \ - __typeof (name) _compat_##prefix##_##name asm ("_compat." #version "." #= name); + __typeof (name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) \ + __attribute__ ((symver (#name "@" #version))); +# endif +# endif +# ifndef NEW_VERSION +# define OLD_VERSION(name, version) \ + asm (".globl _compat." #version "." #name "\n\t" \ + "_compat." #version "." #name " =3D _new." #name "\n\t" \ + ".symver _compat." #version "." #name "," #name "@" #version); +# define NEW_VERSION(name, version) \ + __typeof (name) name __asm__ ("_new." #name) used_in_asm; \ + asm (".symver _new." #name ", " #name "@@" #version); +# define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ + __typeof (_compat_##prefix##_##name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) used_in_asm; \ + asm (".symver _compat." #version "." #name ", " #name "@" #version); +# define COMPAT_VERSION(name, version, prefix) \ + __typeof (name) _compat_##prefix##_##name \ + __asm__ ("_compat." #version "." #name) used_in_asm; \ + asm (".symver _compat." #version "." #name ", " #name "@" #version); +# endif #else +# define NEW_INTDEF(name) INTDEF(name) # define OLD_VERSION(name, version) /* Nothing for static linking. */ # define NEW_VERSION(name, version) /* Nothing for static linking. */ # define COMPAT_VERSION_NEWPROTO(name, version, prefix) \ error "should use #ifdef SYMBOL_VERSIONING" -# define COMPAT_VERSION(name, version, prefix) error "should use #ifdef SY= MBOL_VERSIONING" +# define COMPAT_VERSION(name, version, prefix) \ + error "should use #ifdef SYMBOL_VERSIONING" #endif =20 #ifndef FALLTHROUGH diff --git a/libdw/ChangeLog b/libdw/ChangeLog index b8038f0..aa14f00 100644 --- a/libdw/ChangeLog +++ b/libdw/ChangeLog @@ -1,3 +1,16 @@ +2021-02-14 Alexander Miller + + * libdw.map: Move local symbols to node ELFUTILS_0. Comment + out old symbol versions. + * dwarf_aggregate_size.c (dwarf_aggregate_size): Move NEW_VERSION + before definition. Replace INTDEF with NEW_INTDEF. + * dwarf_srclang.c (dwarf_srclang): Likewise. + * dwarf_arrayorder.c (dwarf_arrayorder): Move NEW_VERSION. + * dwarf_bitoffset.c (dwarf_bitoffset): Likewise. + * dwarf_bitsize.c (dwarf_bitsize): Likewise. + * dwarf_bytesize.c (dwarf_bytesize): Likewise. + * dwarf_decl_column.c (dwarf_decl_column): Likewise. + 2020-12-20 Dmitry V. Levin =20 * .gitignore: New file. diff --git a/libdw/dwarf_aggregate_size.c b/libdw/dwarf_aggregate_size.c index 75105e4..552f122 100644 --- a/libdw/dwarf_aggregate_size.c +++ b/libdw/dwarf_aggregate_size.c @@ -209,6 +209,7 @@ aggregate_size (Dwarf_Die *die, Dwarf_Word *size, return -1; } =20 +NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) int dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) { @@ -219,6 +220,5 @@ dwarf_aggregate_size (Dwarf_Die *die, Dwarf_Word *size) =20 return aggregate_size (&die_mem, size, &type_mem, 0); } -INTDEF (dwarf_aggregate_size) +NEW_INTDEF (dwarf_aggregate_size) OLD_VERSION (dwarf_aggregate_size, ELFUTILS_0.144) -NEW_VERSION (dwarf_aggregate_size, ELFUTILS_0.161) diff --git a/libdw/dwarf_arrayorder.c b/libdw/dwarf_arrayorder.c index da64f99..782e075 100644 --- a/libdw/dwarf_arrayorder.c +++ b/libdw/dwarf_arrayorder.c @@ -35,6 +35,7 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) int dwarf_arrayorder (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_arrayorder (Dwarf_Die *die) &value) =3D=3D 0 ? (int) value : -1; } OLD_VERSION (dwarf_arrayorder, ELFUTILS_0.122) -NEW_VERSION (dwarf_arrayorder, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitoffset.c b/libdw/dwarf_bitoffset.c index c1a3a34..61a0d59 100644 --- a/libdw/dwarf_bitoffset.c +++ b/libdw/dwarf_bitoffset.c @@ -35,6 +35,7 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) int dwarf_bitoffset (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bitoffset (Dwarf_Die *die) &value) =3D=3D 0 ? (int) value : -1; } OLD_VERSION (dwarf_bitoffset, ELFUTILS_0.122) -NEW_VERSION (dwarf_bitoffset, ELFUTILS_0.143) diff --git a/libdw/dwarf_bitsize.c b/libdw/dwarf_bitsize.c index 0ed9b71..35e8744 100644 --- a/libdw/dwarf_bitsize.c +++ b/libdw/dwarf_bitsize.c @@ -35,6 +35,7 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) int dwarf_bitsize (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bitsize (Dwarf_Die *die) &value) =3D=3D 0 ? (int) value : -1; } OLD_VERSION (dwarf_bitsize, ELFUTILS_0.122) -NEW_VERSION (dwarf_bitsize, ELFUTILS_0.143) diff --git a/libdw/dwarf_bytesize.c b/libdw/dwarf_bytesize.c index 116cd32..6d1ff9a 100644 --- a/libdw/dwarf_bytesize.c +++ b/libdw/dwarf_bytesize.c @@ -35,6 +35,7 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) int dwarf_bytesize (Dwarf_Die *die) { @@ -46,4 +47,3 @@ dwarf_bytesize (Dwarf_Die *die) &value) =3D=3D 0 ? (int) value : -1; } OLD_VERSION (dwarf_bytesize, ELFUTILS_0.122) -NEW_VERSION (dwarf_bytesize, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_column.c b/libdw/dwarf_decl_column.c index 08d36b8..3225fd1 100644 --- a/libdw/dwarf_decl_column.c +++ b/libdw/dwarf_decl_column.c @@ -35,10 +35,10 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) int dwarf_decl_column (Dwarf_Die *decl, int *colp) { return __libdw_attr_intval (decl, colp, DW_AT_decl_column); } OLD_VERSION (dwarf_decl_column, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_column, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_file.c b/libdw/dwarf_decl_file.c index d4aa0a1..75662a3 100644 --- a/libdw/dwarf_decl_file.c +++ b/libdw/dwarf_decl_file.c @@ -36,6 +36,7 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) const char * dwarf_decl_file (Dwarf_Die *die) { @@ -86,4 +87,3 @@ dwarf_decl_file (Dwarf_Die *die) return cu->files->info[idx].name; } OLD_VERSION (dwarf_decl_file, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_file, ELFUTILS_0.143) diff --git a/libdw/dwarf_decl_line.c b/libdw/dwarf_decl_line.c index 80fae6c..6b31eeb 100644 --- a/libdw/dwarf_decl_line.c +++ b/libdw/dwarf_decl_line.c @@ -37,13 +37,13 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) int dwarf_decl_line (Dwarf_Die *func, int *linep) { return __libdw_attr_intval (func, linep, DW_AT_decl_line); } OLD_VERSION (dwarf_decl_line, ELFUTILS_0.122) -NEW_VERSION (dwarf_decl_line, ELFUTILS_0.143) =20 =20 int internal_function diff --git a/libdw/dwarf_srclang.c b/libdw/dwarf_srclang.c index f10e764..77bd58c 100644 --- a/libdw/dwarf_srclang.c +++ b/libdw/dwarf_srclang.c @@ -35,6 +35,7 @@ #include "libdwP.h" =20 =20 +NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) int dwarf_srclang (Dwarf_Die *die) { @@ -45,6 +46,5 @@ dwarf_srclang (Dwarf_Die *die) (die, DW_AT_language, &attr_mem), &value) =3D=3D 0 ? (int) value : -1; } -INTDEF (dwarf_srclang) +NEW_INTDEF (dwarf_srclang) OLD_VERSION (dwarf_srclang, ELFUTILS_0.122) -NEW_VERSION (dwarf_srclang, ELFUTILS_0.143) diff --git a/libdw/libdw.map b/libdw/libdw.map index 8ab0a2a..356ae4c 100644 --- a/libdw/libdw.map +++ b/libdw/libdw.map @@ -1,21 +1,25 @@ -ELFUTILS_0 { }; +ELFUTILS_0 { + local: + *; +}; + ELFUTILS_0.122 { global: dwarf_abbrevhaschildren; dwarf_addrdie; - dwarf_arrayorder; + #dwarf_arrayorder; dwarf_attr; dwarf_attr_integrate; dwarf_begin; dwarf_begin_elf; - dwarf_bitoffset; - dwarf_bitsize; - dwarf_bytesize; + #dwarf_bitoffset; + #dwarf_bitsize; + #dwarf_bytesize; dwarf_child; dwarf_cuoffset; - dwarf_decl_column; - dwarf_decl_file; - dwarf_decl_line; + #dwarf_decl_column; + #dwarf_decl_file; + #dwarf_decl_line; dwarf_diecu; dwarf_diename; dwarf_dieoffset; @@ -84,7 +88,7 @@ ELFUTILS_0.122 { dwarf_onesrcline; dwarf_ranges; dwarf_siblingof; - dwarf_srclang; + #dwarf_srclang; dwarf_tag; dwarf_whatattr; dwarf_whatform; @@ -133,16 +137,13 @@ ELFUTILS_0.122 { dwfl_offline_section_address; dwfl_onesrcline; dwfl_report_begin; - dwfl_report_elf; + #dwfl_report_elf; dwfl_report_end; dwfl_report_module; dwfl_report_offline; dwfl_standard_argp; dwfl_standard_find_debuginfo; dwfl_version; - - local: - *; } ELFUTILS_0; =20 ELFUTILS_0.126 { @@ -165,7 +166,7 @@ ELFUTILS_0.130 { global: dwfl_build_id_find_elf; dwfl_build_id_find_debuginfo; - dwfl_module_build_id; + #dwfl_module_build_id; dwfl_module_report_build_id; =20 } ELFUTILS_0.127; @@ -218,13 +219,13 @@ ELFUTILS_0.143 { } ELFUTILS_0.142; =20 ELFUTILS_0.144 { - global: - dwarf_aggregate_size; + #global: + #dwarf_aggregate_size; } ELFUTILS_0.143; =20 ELFUTILS_0.146 { - global: - dwfl_core_file_report; + #global: + #dwfl_core_file_report; } ELFUTILS_0.144; =20 ELFUTILS_0.148 { @@ -348,8 +349,8 @@ ELFUTILS_0.173 { } ELFUTILS_0.171; =20 ELFUTILS_0.175 { - global: - dwelf_elf_begin; + #global: + #dwelf_elf_begin; } ELFUTILS_0.173; =20 ELFUTILS_0.177 { diff --git a/libdwelf/ChangeLog b/libdwelf/ChangeLog index a0ff9f4..cbfe1ec 100644 --- a/libdwelf/ChangeLog +++ b/libdwelf/ChangeLog @@ -1,3 +1,8 @@ +2021-02-14 Alexander Miller + + * dwelf_elf_begin.c (dwelf_elf_begin): Move NEW_VERSION before + definition. + 2020-12-12 Dmitry V. Levin =20 * libdwelf.h: Fix spelling typos in comments. diff --git a/libdwelf/dwelf_elf_begin.c b/libdwelf/dwelf_elf_begin.c index c7d63a1..c3cfe63 100644 --- a/libdwelf/dwelf_elf_begin.c +++ b/libdwelf/dwelf_elf_begin.c @@ -36,6 +36,7 @@ =20 #include =20 +NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) Elf * dwelf_elf_begin (int fd) { @@ -61,4 +62,3 @@ dwelf_elf_begin (int fd) return NULL; } OLD_VERSION (dwelf_elf_begin, ELFUTILS_0.175) -NEW_VERSION (dwelf_elf_begin, ELFUTILS_0.177) diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog index d107e78..c96c716 100644 --- a/libdwfl/ChangeLog +++ b/libdwfl/ChangeLog @@ -1,3 +1,10 @@ +2021-02-14 Alexander Miller + + * core-file.c (dwfl_core_file_report): Move NEW_VERSION before + definition. Replace INTDEF with NEW_INTDEF. + * dwfl_module_build_id.c (dwfl_module_build_id): Likewise. + * dwfl_report_elf.c (dwfl_report_elf): Likewise. + 2021-02-01 =C3=89rico Nogueira =20 * dwfl_error.c (strerror_r): Only use the GNU version when available. diff --git a/libdwfl/core-file.c b/libdwfl/core-file.c index a0ccc9b..4e4c9b3 100644 --- a/libdwfl/core-file.c +++ b/libdwfl/core-file.c @@ -440,6 +440,7 @@ __libdwfl_dynamic_vaddr_get (Elf *elf, GElf_Addr *vaddr= p) return false; } =20 +NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) int dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char *executable) { @@ -625,8 +626,7 @@ dwfl_core_file_report (Dwfl *dwfl, Elf *elf, const char= *executable) error rather than just nothing found. */ return listed > 0 ? listed : retval; } -INTDEF (dwfl_core_file_report) -NEW_VERSION (dwfl_core_file_report, ELFUTILS_0.158) +NEW_INTDEF (dwfl_core_file_report) =20 #ifdef SYMBOL_VERSIONING int _compat_without_executable_dwfl_core_file_report (Dwfl *dwfl, Elf *elf= ); diff --git a/libdwfl/dwfl_module_build_id.c b/libdwfl/dwfl_module_build_id.c index 6ca9376..0c198f2 100644 --- a/libdwfl/dwfl_module_build_id.c +++ b/libdwfl/dwfl_module_build_id.c @@ -77,6 +77,7 @@ __libdwfl_find_build_id (Dwfl_Module *mod, bool set, Elf = *elf) return found_build_id (mod, set, build_id_bits, build_id_len, build_id_v= addr); } =20 +NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) int dwfl_module_build_id (Dwfl_Module *mod, const unsigned char **bits, GElf_Addr *vaddr) @@ -102,8 +103,7 @@ dwfl_module_build_id (Dwfl_Module *mod, *vaddr =3D mod->build_id_vaddr; return mod->build_id_len; } -INTDEF (dwfl_module_build_id) -NEW_VERSION (dwfl_module_build_id, ELFUTILS_0.138) +NEW_INTDEF (dwfl_module_build_id) =20 #ifdef SYMBOL_VERSIONING COMPAT_VERSION (dwfl_module_build_id, ELFUTILS_0.130, vaddr_at_end) diff --git a/libdwfl/dwfl_report_elf.c b/libdwfl/dwfl_report_elf.c index 9da8669..a5f0e5e 100644 --- a/libdwfl/dwfl_report_elf.c +++ b/libdwfl/dwfl_report_elf.c @@ -287,6 +287,7 @@ __libdwfl_report_elf (Dwfl *dwfl, const char *name, con= st char *file_name, return m; } =20 +NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) Dwfl_Module * dwfl_report_elf (Dwfl *dwfl, const char *name, const char *file_name, int = fd, GElf_Addr base, bool add_p_vaddr) @@ -322,8 +323,7 @@ dwfl_report_elf (Dwfl *dwfl, const char *name, const ch= ar *file_name, int fd, =20 return mod; } -INTDEF (dwfl_report_elf) -NEW_VERSION (dwfl_report_elf, ELFUTILS_0.156) +NEW_INTDEF (dwfl_report_elf) =20 #ifdef SYMBOL_VERSIONING Dwfl_Module * --=20 2.26.2