mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 08:51:13 +00:00
f560588b05
In order for linking the static libraries from elfutils to work, other libraries need to be included to handle the references to functions made in the library's objects that are not included as they would already be if the library was a shared object instead. A shared object library stores this list of libraries when it was made, so that the dynamic linker can refer to that list at runtime, but a static library has no such functionality so the list of libraries for missing functions must be included at link time. This information was already added to the pc file for libelf using the definitions in src/Makefile.am, so extend this to the rest of the pc files in the project. For situations where the libraries may be used without pkg-config setting the flags and library list, this patch and the pc files can serve as a quick reference. Signed-off-by: Michael Pratt <mcpratt@pm.me> Link: https://github.com/openwrt/openwrt/pull/15690 Signed-off-by: Robert Marko <robimarko@gmail.com>
291 lines
8.4 KiB
Diff
291 lines
8.4 KiB
Diff
--- a/configure.ac
|
|
+++ b/configure.ac
|
|
@@ -44,6 +44,7 @@ fi
|
|
|
|
AC_CONFIG_AUX_DIR([config])
|
|
AC_CONFIG_FILES([config/Makefile])
|
|
+AC_CONFIG_FILES([libgnu/Makefile])
|
|
|
|
AC_COPYRIGHT([Copyright (C) 1996-2024 The elfutils developers.])
|
|
AC_PREREQ(2.63) dnl Minimum Autoconf version required.
|
|
@@ -88,11 +89,14 @@ AS_IF([test "$use_locks" = yes],
|
|
|
|
AH_TEMPLATE([USE_LOCKS], [Defined if libraries should be thread-safe.])
|
|
|
|
+AC_USE_SYSTEM_EXTENSIONS()
|
|
+
|
|
m4_version_prereq([2.70], [AC_PROG_CC], [AC_PROG_CC_C99])
|
|
AC_PROG_CXX
|
|
AC_PROG_RANLIB
|
|
AC_PROG_YACC
|
|
AC_PROG_LEX([noyywrap])
|
|
+gl_EARLY
|
|
# Only available since automake 1.12
|
|
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
|
|
AC_CHECK_TOOL([READELF], [readelf])
|
|
@@ -635,6 +639,8 @@ AC_COMPILE_IFELSE([AC_LANG_SOURCE([])],
|
|
CFLAGS="$old_CFLAGS"])
|
|
AS_IF([test "x$ac_cv_fno_addrsig" = "xyes"], CFLAGS="$CFLAGS -fno-addrsig")
|
|
|
|
+gl_INIT
|
|
+
|
|
saved_LIBS="$LIBS"
|
|
AC_SEARCH_LIBS([argp_parse], [argp])
|
|
LIBS="$saved_LIBS"
|
|
--- a/lib/eu-config.h
|
|
+++ b/lib/eu-config.h
|
|
@@ -59,14 +59,19 @@
|
|
# define once(once_control, init_routine) init_routine()
|
|
#endif /* USE_LOCKS */
|
|
|
|
-#include <libintl.h>
|
|
+#include <gettext.h>
|
|
/* gettext helper macros. */
|
|
#define N_(Str) Str
|
|
#define _(Str) dgettext ("elfutils", Str)
|
|
|
|
/* Compiler-specific definitions. */
|
|
+#define __PRAGMA(str) _Pragma (#str)
|
|
+#ifdef __APPLE__
|
|
+#define strong_alias(name, aliasname) __PRAGMA(weak aliasname = name)
|
|
+#else
|
|
#define strong_alias(name, aliasname) \
|
|
extern __typeof (name) aliasname __attribute__ ((alias (#name)));
|
|
+#endif
|
|
|
|
#ifdef __i386__
|
|
# define internal_function __attribute__ ((regparm (3), stdcall))
|
|
@@ -77,7 +82,7 @@
|
|
#define internal_strong_alias(name, aliasname) \
|
|
extern __typeof (name) aliasname __attribute__ ((alias (#name))) internal_function;
|
|
|
|
-#ifdef HAVE_VISIBILITY
|
|
+#if defined(HAVE_VISIBILITY) && !defined(__APPLE__)
|
|
#define attribute_hidden \
|
|
__attribute__ ((visibility ("hidden")))
|
|
#else
|
|
@@ -166,7 +171,7 @@ asm (".section predict_data, \"aw\"; .pr
|
|
#endif
|
|
|
|
/* Avoid PLT entries. */
|
|
-#ifdef PIC
|
|
+#if defined(PIC) && !defined(__APPLE__)
|
|
# define INTUSE(name) _INTUSE(name)
|
|
# define _INTUSE(name) __##name##_internal
|
|
# define INTDEF(name) _INTDEF(name)
|
|
--- a/backends/i386_auxv.c
|
|
+++ b/backends/i386_auxv.c
|
|
@@ -48,5 +48,4 @@ EBLHOOK(auxv_info) (GElf_Xword a_type, c
|
|
return 1;
|
|
}
|
|
|
|
-__typeof (i386_auxv_info) x86_64_auxv_info
|
|
- __attribute__ ((alias ("i386_auxv_info")));
|
|
+auxv_info_alias(x86_64)
|
|
--- a/backends/ppc_regs.c
|
|
+++ b/backends/ppc_regs.c
|
|
@@ -204,5 +204,11 @@ ppc_register_info (Ebl *ebl __attribute_
|
|
return namelen;
|
|
}
|
|
|
|
-__typeof (ppc_register_info)
|
|
- ppc64_register_info __attribute__ ((alias ("ppc_register_info")));
|
|
+ssize_t
|
|
+ppc64_register_info (Ebl *ebl,
|
|
+ int regno, char *name, size_t namelen,
|
|
+ const char **prefix, const char **setname,
|
|
+ int *bits, int *type)
|
|
+{
|
|
+ return ppc_register_info(ebl, regno, name, namelen, prefix, setname, bits, type);
|
|
+}
|
|
--- a/backends/libebl_CPU.h
|
|
+++ b/backends/libebl_CPU.h
|
|
@@ -97,4 +97,10 @@ dwarf_is_pointer (int tag)
|
|
case DW_TAG_reference_type: \
|
|
case DW_TAG_rvalue_reference_type
|
|
|
|
+#define auxv_info_alias(arch) \
|
|
+ int EBLHOOK_1(arch ## _, auxv_info) (GElf_Xword a_type, const char **name, const char **format) \
|
|
+ { \
|
|
+ return EBLHOOK(auxv_info)(a_type, name, format); \
|
|
+ }
|
|
+
|
|
#endif /* libebl_CPU.h */
|
|
--- a/backends/ppc_auxv.c
|
|
+++ b/backends/ppc_auxv.c
|
|
@@ -51,5 +51,4 @@ EBLHOOK(auxv_info) (GElf_Xword a_type, c
|
|
return 1;
|
|
}
|
|
|
|
-__typeof (ppc_auxv_info) ppc64_auxv_info
|
|
- __attribute__ ((alias ("ppc_auxv_info")));
|
|
+auxv_info_alias(ppc64)
|
|
--- a/backends/ppc_cfi.c
|
|
+++ b/backends/ppc_cfi.c
|
|
@@ -72,6 +72,7 @@ ppc_abi_cfi (Ebl *ebl __attribute__ ((un
|
|
return 0;
|
|
}
|
|
|
|
-__typeof (ppc_abi_cfi)
|
|
- ppc64_abi_cfi
|
|
- __attribute__ ((alias ("ppc_abi_cfi")));
|
|
+int ppc64_abi_cfi(Ebl *ebl, Dwarf_CIE *abi_info)
|
|
+{
|
|
+ return ppc_abi_cfi(ebl, abi_info);
|
|
+}
|
|
--- a/backends/ppc_initreg.c
|
|
+++ b/backends/ppc_initreg.c
|
|
@@ -68,9 +68,10 @@ ppc_dwarf_to_regno (Ebl *ebl __attribute
|
|
abort ();
|
|
}
|
|
|
|
-__typeof (ppc_dwarf_to_regno)
|
|
- ppc64_dwarf_to_regno
|
|
- __attribute__ ((alias ("ppc_dwarf_to_regno")));
|
|
+bool ppc64_dwarf_to_regno (Ebl *ebl, unsigned *regno)
|
|
+{
|
|
+ return ppc_dwarf_to_regno(ebl, regno);
|
|
+}
|
|
|
|
bool
|
|
ppc_set_initial_registers_tid (pid_t tid __attribute__ ((unused)),
|
|
@@ -127,6 +128,7 @@ ppc_set_initial_registers_tid (pid_t tid
|
|
#endif /* __powerpc__ */
|
|
}
|
|
|
|
-__typeof (ppc_set_initial_registers_tid)
|
|
- ppc64_set_initial_registers_tid
|
|
- __attribute__ ((alias ("ppc_set_initial_registers_tid")));
|
|
+bool ppc64_set_initial_registers_tid(pid_t tid, ebl_tid_registers_t *setfunc, void *arg)
|
|
+{
|
|
+ return ppc_set_initial_registers_tid(tid, setfunc, arg);
|
|
+}
|
|
--- a/backends/ppc_attrs.c
|
|
+++ b/backends/ppc_attrs.c
|
|
@@ -81,6 +81,9 @@ ppc_check_object_attribute (Ebl *ebl __a
|
|
return false;
|
|
}
|
|
|
|
-__typeof (ppc_check_object_attribute)
|
|
- ppc64_check_object_attribute
|
|
- __attribute__ ((alias ("ppc_check_object_attribute")));
|
|
+bool ppc64_check_object_attribute(Ebl *ebl,
|
|
+ const char *vendor, int tag, uint64_t value,
|
|
+ const char **tag_name, const char **value_name)
|
|
+{
|
|
+ return ppc_check_object_attribute(ebl, vendor, tag, value, tag_name, value_name);
|
|
+}
|
|
--- a/libdwfl/libdwflP.h
|
|
+++ b/libdwfl/libdwflP.h
|
|
@@ -31,6 +31,7 @@
|
|
|
|
#include <libdwfl.h>
|
|
#include <libebl.h>
|
|
+#include <libeu.h>
|
|
#include <assert.h>
|
|
#include <dirent.h>
|
|
#include <errno.h>
|
|
--- /dev/null
|
|
+++ b/lib/stdio_ext.h
|
|
@@ -0,0 +1,6 @@
|
|
+#include <stdio.h>
|
|
+#ifndef __APPLE__
|
|
+#include_next <stdio_ext.h>
|
|
+#else
|
|
+#define __fsetlocking(...) 0
|
|
+#endif
|
|
--- a/libdw/libdwP.h
|
|
+++ b/libdw/libdwP.h
|
|
@@ -32,6 +32,7 @@
|
|
#include <stdbool.h>
|
|
#include <pthread.h>
|
|
|
|
+#include <libeu.h>
|
|
#include <libdw.h>
|
|
#include <dwarf.h>
|
|
|
|
--- a/config/libdebuginfod.pc.in
|
|
+++ b/config/libdebuginfod.pc.in
|
|
@@ -8,5 +8,5 @@ Description: elfutils library to query d
|
|
Version: @VERSION@
|
|
URL: http://elfutils.org/
|
|
|
|
-Libs: -L${libdir} -ldebuginfod
|
|
+Libs: -L${libdir} -ldebuginfod -lpthread
|
|
Cflags: -I${includedir}
|
|
--- a/config/libdw.pc.in
|
|
+++ b/config/libdw.pc.in
|
|
@@ -8,7 +8,7 @@ Description: elfutils library for DWARF
|
|
Version: @VERSION@
|
|
URL: http://elfutils.org/
|
|
|
|
-Libs: -L${libdir} -ldw
|
|
+Libs: -L${libdir} -ldw -lz -lelf -lz -ldl -lpthread
|
|
Cflags: -I${includedir}
|
|
|
|
# We need the exact matching elfutils libelf version since internal data
|
|
--- a/config/libelf.pc.in
|
|
+++ b/config/libelf.pc.in
|
|
@@ -8,7 +8,7 @@ Description: elfutils libelf library to
|
|
Version: @VERSION@
|
|
URL: http://elfutils.org/
|
|
|
|
-Libs: -L${libdir} -lelf
|
|
+Libs: -L${libdir} -lelf -lz
|
|
Cflags: -I${includedir}
|
|
|
|
Requires.private: zlib @LIBZSTD@
|
|
--- a/lib/next_prime.c
|
|
+++ b/lib/next_prime.c
|
|
@@ -27,6 +27,7 @@
|
|
the GNU Lesser General Public License along with this program. If
|
|
not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
+#include <config.h>
|
|
#include <stddef.h>
|
|
|
|
|
|
--- a/libebl/eblopenbackend.c
|
|
+++ b/libebl/eblopenbackend.c
|
|
@@ -200,8 +200,6 @@ static bool default_object_note (const c
|
|
uint32_t descsz, const char *desc);
|
|
static bool default_debugscn_p (const char *name);
|
|
static bool default_copy_reloc_p (int reloc);
|
|
-static bool default_none_reloc_p (int reloc);
|
|
-static bool default_relative_reloc_p (int reloc);
|
|
static bool default_check_special_symbol (Elf *elf,
|
|
const GElf_Sym *sym,
|
|
const char *name,
|
|
@@ -253,8 +251,8 @@ fill_defaults (Ebl *result)
|
|
result->object_note = default_object_note;
|
|
result->debugscn_p = default_debugscn_p;
|
|
result->copy_reloc_p = default_copy_reloc_p;
|
|
- result->none_reloc_p = default_none_reloc_p;
|
|
- result->relative_reloc_p = default_relative_reloc_p;
|
|
+ result->none_reloc_p = default_copy_reloc_p;
|
|
+ result->relative_reloc_p = default_copy_reloc_p;
|
|
result->check_special_symbol = default_check_special_symbol;
|
|
result->data_marker_symbol = default_data_marker_symbol;
|
|
result->check_st_other_bits = default_check_st_other_bits;
|
|
@@ -636,8 +634,6 @@ default_copy_reloc_p (int reloc __attrib
|
|
{
|
|
return false;
|
|
}
|
|
-strong_alias (default_copy_reloc_p, default_none_reloc_p)
|
|
-strong_alias (default_copy_reloc_p, default_relative_reloc_p)
|
|
|
|
static bool
|
|
default_check_special_symbol (Elf *elf __attribute__ ((unused)),
|
|
--- a/src/srcfiles.cxx
|
|
+++ b/src/srcfiles.cxx
|
|
@@ -78,7 +78,9 @@ ARGP_PROGRAM_VERSION_HOOK_DEF = print_ve
|
|
/* Bug report address. */
|
|
ARGP_PROGRAM_BUG_ADDRESS_DEF = PACKAGE_BUGREPORT;
|
|
|
|
+#ifdef HAVE_LIBARCHIVE
|
|
constexpr size_t BUFFER_SIZE = 8192;
|
|
+#endif
|
|
|
|
/* Definitions of arguments for argp functions. */
|
|
static const struct argp_option options[] =
|