 484f71f4e6
			
		
	
	484f71f4e6
	
	
	
		
			
			In some versions of Xcode, some C++ header has an include of the standard C++ header "stack" while "." is in the include paths which can conflict with the binary "stack" built by elfutils. This leads to a decode error as the binary is interpreted as text. Add an arbitrary dependency between stack and the C++ program. Signed-off-by: Michael Pratt <mcpratt@pm.me>
		
			
				
	
	
		
			301 lines
		
	
	
		
			8.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			301 lines
		
	
	
		
			8.9 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[] =
 | |
| --- a/src/Makefile.am
 | |
| +++ b/src/Makefile.am
 | |
| @@ -92,6 +92,7 @@ strings_LDADD = $(libelf) $(libeu) $(arg
 | |
|  ar_LDADD = libar.a $(libelf) $(libeu) $(argp_LDADD) $(obstack_LIBS)
 | |
|  unstrip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
 | |
|  stack_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD) $(demanglelib)
 | |
| +EXTRA_stack_DEPENDENCIES = $(if $(findstring srcfiles,$(bin_PROGRAMS)),$(srcfiles_OBJECTS))
 | |
|  elfcompress_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
 | |
|  elfclassify_LDADD = $(libelf) $(libdw) $(libeu) $(argp_LDADD)
 | |
|  srcfiles_SOURCES = srcfiles.cxx
 |