aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog25
-rw-r--r--binutils/Makefile.am5
-rw-r--r--binutils/Makefile.in9
-rw-r--r--binutils/aclocal.m41
-rw-r--r--binutils/config.in3
-rwxr-xr-xbinutils/configure39
-rw-r--r--binutils/configure.ac6
-rw-r--r--binutils/doc/Makefile.in1
-rw-r--r--binutils/objdump.c27
-rw-r--r--binutils/readelf.c8
-rw-r--r--ld/ChangeLog30
-rw-r--r--ld/Makefile.am4
-rw-r--r--ld/Makefile.in5
-rw-r--r--ld/aclocal.m41
-rw-r--r--ld/config.in3
-rwxr-xr-xld/configure42
-rw-r--r--ld/configure.ac9
-rw-r--r--ld/ldelfgen.c14
-rw-r--r--ld/ldlang.c35
19 files changed, 257 insertions, 10 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 6db2be3..1532a37 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,28 @@
+2020-06-26 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure.ac [--enable-libctf]: New, default yes.
+ Set ENABLE_LIBCTF accordingly.
+ * Makefile.am [!ENABLE_LIBCTF]: Empty LIBCTF and LIBCTF_NOBFD.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * objdump.c (usage): Conditionalize portions on ENABLE_LIBCTF.
+ (option_values): Likewise.
+ (long_options): Likewise.
+ (main): Likewise.
+ (dump_ctf_indent_lines): Conditionalize out when !ENABLE_LIBCTF.
+ (make_ctfsect): Likewise.
+ (dump_ctf_archive_member): Likewise.
+ (dump_ctf) [ENABLE_LIBCTF]: Likewise.
+ (dump_ctf) [!ENABLE_LIBCTF]: New empty stub.
+ * readelf.c (options): Conditionalize portions on ENABLE_LIBCTF.
+ (usage): Likewise.
+ (process_section_contents): Likewise.
+ (shdr_to_ctf_sect): Conditionalize out when !ENABLE_LIBCTF.
+ (dump_ctf_indent_lines): Likewise.
+ (dump_section_as_ctf) [ENABLE_LIBCTF]: Likewise.
+
2020-06-26 Jan Beulich <jbeulich@suse.com>
* doc/binutils.texi: Adjust description of x86's -Msuffix. Drop
diff --git a/binutils/Makefile.am b/binutils/Makefile.am
index e5cf563..2ee1196 100644
--- a/binutils/Makefile.am
+++ b/binutils/Makefile.am
@@ -164,8 +164,13 @@ BFDLIB = ../bfd/libbfd.la
OPCODES = ../opcodes/libopcodes.la
+if ENABLE_LIBCTF
LIBCTF = ../libctf/libctf.la
LIBCTF_NOBFD = ../libctf/libctf-nobfd.la
+else
+LIBCTF =
+LIBCTF_NOBFD =
+endif
LIBIBERTY = ../libiberty/libiberty.a
diff --git a/binutils/Makefile.in b/binutils/Makefile.in
index ee6f267..7ef2af4 100644
--- a/binutils/Makefile.in
+++ b/binutils/Makefile.in
@@ -122,6 +122,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
$(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gettext-sister.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/largefile.m4 \
@@ -222,6 +223,7 @@ objcopy_LDADD = $(LDADD)
am_objdump_OBJECTS = objdump.$(OBJEXT) dwarf.$(OBJEXT) prdbg.$(OBJEXT) \
$(am__objects_3) $(am__objects_1) $(am__objects_2)
objdump_OBJECTS = $(am_objdump_OBJECTS)
+@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_2 = ../libctf/libctf.la
am_ranlib_OBJECTS = ar.$(OBJEXT) is-ranlib.$(OBJEXT) arparse.$(OBJEXT) \
arlex.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \
binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1)
@@ -229,6 +231,7 @@ ranlib_OBJECTS = $(am_ranlib_OBJECTS)
am_readelf_OBJECTS = readelf.$(OBJEXT) version.$(OBJEXT) \
unwind-ia64.$(OBJEXT) dwarf.$(OBJEXT) $(am__objects_2)
readelf_OBJECTS = $(am_readelf_OBJECTS)
+@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_3 = ../libctf/libctf-nobfd.la
am_size_OBJECTS = size.$(OBJEXT) $(am__objects_1)
size_OBJECTS = $(am_size_OBJECTS)
size_LDADD = $(LDADD)
@@ -658,8 +661,10 @@ BULIBS = bucomm.c version.c filemode.c
ELFLIBS = elfcomm.c
BFDLIB = ../bfd/libbfd.la
OPCODES = ../opcodes/libopcodes.la
-LIBCTF = ../libctf/libctf.la
-LIBCTF_NOBFD = ../libctf/libctf-nobfd.la
+@ENABLE_LIBCTF_FALSE@LIBCTF =
+@ENABLE_LIBCTF_TRUE@LIBCTF = ../libctf/libctf.la
+@ENABLE_LIBCTF_FALSE@LIBCTF_NOBFD =
+@ENABLE_LIBCTF_TRUE@LIBCTF_NOBFD = ../libctf/libctf-nobfd.la
LIBIBERTY = ../libiberty/libiberty.a
POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES)
EXPECT = expect
diff --git a/binutils/aclocal.m4 b/binutils/aclocal.m4
index 4fa32ff..8bf2e9e 100644
--- a/binutils/aclocal.m4
+++ b/binutils/aclocal.m4
@@ -1189,6 +1189,7 @@ m4_include([../bfd/acinclude.m4])
m4_include([../bfd/warning.m4])
m4_include([../config/acx.m4])
m4_include([../config/depstand.m4])
+m4_include([../config/enable.m4])
m4_include([../config/gettext-sister.m4])
m4_include([../config/iconv.m4])
m4_include([../config/largefile.m4])
diff --git a/binutils/config.in b/binutils/config.in
index 703f7b1..3adc32b 100644
--- a/binutils/config.in
+++ b/binutils/config.in
@@ -21,6 +21,9 @@
/* Should strings use -a behavior by default? */
#undef DEFAULT_STRINGS_ALL
+/* Handle .ctf type-info sections */
+#undef ENABLE_LIBCTF
+
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
diff --git a/binutils/configure b/binutils/configure
index 782fffa..bdc93e0 100755
--- a/binutils/configure
+++ b/binutils/configure
@@ -684,6 +684,8 @@ WARN_WRITE_STRINGS
NO_WERROR
WARN_CFLAGS_FOR_BUILD
WARN_CFLAGS
+ENABLE_LIBCTF_FALSE
+ENABLE_LIBCTF_TRUE
LIBDEBUGINFOD
OTOOL64
OTOOL
@@ -815,6 +817,7 @@ enable_targets
enable_deterministic_archives
enable_default_strings_all
with_debuginfod
+enable_libctf
enable_werror
enable_build_warnings
enable_nls
@@ -1472,6 +1475,7 @@ Optional Features:
ar and ranlib default to -D behavior
--disable-default-strings-all
strings defaults to --data behavior
+ --enable-libctf Handle .ctf type-info sections [default=yes]
--enable-werror treat compile warnings as errors
--enable-build-warnings enable build-time compiler warnings
--disable-nls do not use Native Language Support
@@ -11529,7 +11533,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11532 "configure"
+#line 11536 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11635,7 +11639,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11638 "configure"
+#line 11642 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12331,6 +12335,33 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
+ # Check whether --enable-libctf was given.
+if test "${enable_libctf+set}" = set; then :
+ enableval=$enable_libctf;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_libctf=yes
+fi
+
+
+if test "${enable_libctf}" = yes; then
+
+$as_echo "#define ENABLE_LIBCTF 1" >>confdefs.h
+
+fi
+ if test "${enable_libctf}" = yes; then
+ ENABLE_LIBCTF_TRUE=
+ ENABLE_LIBCTF_FALSE='#'
+else
+ ENABLE_LIBCTF_TRUE='#'
+ ENABLE_LIBCTF_FALSE=
+fi
+
+
# Set the 'development' global.
. $srcdir/../bfd/development.sh
@@ -15413,6 +15444,10 @@ else
am__EXEEXT_FALSE=
fi
+if test -z "${ENABLE_LIBCTF_TRUE}" && test -z "${ENABLE_LIBCTF_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_LIBCTF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/binutils/configure.ac b/binutils/configure.ac
index 385ab01..4ac1f34 100644
--- a/binutils/configure.ac
+++ b/binutils/configure.ac
@@ -69,6 +69,12 @@ AC_DEBUGINFOD
AC_DEFINE_UNQUOTED(DEFAULT_STRINGS_ALL, $default_strings_all,
[Should strings use -a behavior by default?])
+GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
+if test "${enable_libctf}" = yes; then
+ AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
+fi
+AM_CONDITIONAL(ENABLE_LIBCTF, test "${enable_libctf}" = yes)
+
AM_BINUTILS_WARNINGS
AC_CONFIG_HEADERS(config.h:config.in)
diff --git a/binutils/doc/Makefile.in b/binutils/doc/Makefile.in
index b00260b..e925b81 100644
--- a/binutils/doc/Makefile.in
+++ b/binutils/doc/Makefile.in
@@ -111,6 +111,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
$(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gettext-sister.m4 \
$(top_srcdir)/../config/iconv.m4 \
$(top_srcdir)/../config/largefile.m4 \
diff --git a/binutils/objdump.c b/binutils/objdump.c
index c582feb..93508e2 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -235,7 +235,13 @@ usage (FILE *stream, int status)
=gdb_index,=trace_info,=trace_abbrev,=trace_aranges,\n\
=addr,=cu_index,=links,=follow-links]\n\
Display DWARF info in the file\n\
+"));
+#ifdef ENABLE_LIBCTF
+ fprintf (stream, _("\
--ctf=SECTION Display CTF info from SECTION\n\
+"));
+#endif
+ fprintf (stream, _("\
-t, --syms Display the contents of the symbol table(s)\n\
-T, --dynamic-syms Display the contents of the dynamic symbol table\n\
-r, --reloc Display the relocation entries in the file\n\
@@ -284,9 +290,12 @@ usage (FILE *stream, int status)
--dwarf-depth=N Do not display DIEs at depth N or greater\n\
--dwarf-start=N Display DIEs starting with N, at the same depth\n\
or deeper\n\
- --dwarf-check Make additional dwarf internal consistency checks.\
- \n\
- --ctf-parent=SECTION Use SECTION as the CTF parent\n\
+ --dwarf-check Make additional dwarf internal consistency checks.\n"));
+#ifdef ENABLE_LIBCTF
+ fprintf (stream, _("\
+ --ctf-parent=SECTION Use SECTION as the CTF parent\n"));
+#endif
+ fprintf (stream, _("\
--visualize-jumps Visualize jumps by drawing ASCII art lines\n\
--visualize-jumps=color Use colors in the ASCII art\n\
--visualize-jumps=extended-color Use extended 8-bit color codes\n\
@@ -328,8 +337,10 @@ enum option_values
OPTION_NO_RECURSE_LIMIT,
OPTION_INLINES,
OPTION_SOURCE_COMMENT,
+#ifdef ENABLE_LIBCTF
OPTION_CTF,
OPTION_CTF_PARENT,
+#endif
OPTION_VISUALIZE_JUMPS
};
@@ -375,8 +386,10 @@ static struct option long_options[]=
{"special-syms", no_argument, &dump_special_syms, 1},
{"include", required_argument, NULL, 'I'},
{"dwarf", optional_argument, NULL, OPTION_DWARF},
+#ifdef ENABLE_LIBCTF
{"ctf", required_argument, NULL, OPTION_CTF},
{"ctf-parent", required_argument, NULL, OPTION_CTF_PARENT},
+#endif
{"stabs", no_argument, NULL, 'G'},
{"start-address", required_argument, NULL, OPTION_START_ADDRESS},
{"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS},
@@ -4026,6 +4039,7 @@ dump_bfd_header (bfd *abfd)
}
+#ifdef ENABLE_LIBCTF
/* Formatting callback function passed to ctf_dump. Returns either the pointer
it is passed, or a pointer to newly-allocated storage, in which case
dump_ctf() will free it when it no longer needs it. */
@@ -4167,6 +4181,11 @@ dump_ctf (bfd *abfd, const char *sect_name, const char *parent_name)
free (parentdata);
free (ctfdata);
}
+#else
+static void
+dump_ctf (bfd *abfd ATTRIBUTE_UNUSED, const char *sect_name ATTRIBUTE_UNUSED,
+ const char *parent_name ATTRIBUTE_UNUSED) {}
+#endif
static void
@@ -5348,6 +5367,7 @@ main (int argc, char **argv)
case OPTION_DWARF_CHECK:
dwarf_check = TRUE;
break;
+#ifdef ENABLE_LIBCTF
case OPTION_CTF:
dump_ctf_section_info = TRUE;
dump_ctf_section_name = xstrdup (optarg);
@@ -5356,6 +5376,7 @@ main (int argc, char **argv)
case OPTION_CTF_PARENT:
dump_ctf_parent_name = xstrdup (optarg);
break;
+#endif
case 'G':
dump_stab_section_info = TRUE;
seenflag = TRUE;
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 25f0e23..2f0cd77 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -4502,11 +4502,13 @@ static struct option options[] =
{"dwarf-start", required_argument, 0, OPTION_DWARF_START},
{"dwarf-check", no_argument, 0, OPTION_DWARF_CHECK},
+#ifdef ENABLE_LIBCTF
{"ctf", required_argument, 0, OPTION_CTF_DUMP},
{"ctf-symbols", required_argument, 0, OPTION_CTF_SYMBOLS},
{"ctf-strings", required_argument, 0, OPTION_CTF_STRINGS},
{"ctf-parent", required_argument, 0, OPTION_CTF_PARENT},
+#endif
{"version", no_argument, 0, 'v'},
{"wide", no_argument, 0, 'W'},
@@ -4558,6 +4560,7 @@ usage (FILE * stream)
--dwarf-depth=N Do not display DIEs at depth N or greater\n\
--dwarf-start=N Display DIEs starting with N, at the same depth\n\
or deeper\n"));
+#ifdef ENABLE_LIBCTF
fprintf (stream, _("\
--ctf=<number|name> Display CTF info from section <number|name>\n\
--ctf-parent=<number|name>\n\
@@ -4566,6 +4569,7 @@ usage (FILE * stream)
Use section <number|name> as the CTF external symtab\n\n\
--ctf-strings=<number|name>\n\
Use section <number|name> as the CTF external strtab\n\n"));
+#endif
#ifdef SUPPORT_DISASSEMBLY
fprintf (stream, _("\
@@ -14132,6 +14136,7 @@ dump_section_as_bytes (Elf_Internal_Shdr * section,
return FALSE;
}
+#ifdef ENABLE_LIBCTF
static ctf_sect_t *
shdr_to_ctf_sect (ctf_sect_t *buf, Elf_Internal_Shdr *shdr, Filedata *filedata)
{
@@ -14292,6 +14297,7 @@ dump_section_as_ctf (Elf_Internal_Shdr * section, Filedata * filedata)
free (strdata);
return ret;
}
+#endif
static bfd_boolean
load_specific_debug_section (enum dwarf_section_display_enum debug,
@@ -14777,11 +14783,13 @@ process_section_contents (Filedata * filedata)
res = FALSE;
}
+#ifdef ENABLE_LIBCTF
if (dump & CTF_DUMP)
{
if (! dump_section_as_ctf (section, filedata))
res = FALSE;
}
+#endif
}
/* Check to see if the user requested a
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 1a06dc9..4cf1204 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,33 @@
+2020-06-26 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure.ac [--enable-libctf]: New, default yes.
+ Set ENABLE_LIBCTF accordingly.
+ * Makefile.am [!ENABLE_LIBCTF]: Empty LIBCTF.
+ * configure: Regenerate.
+ * config.in: Regenerate.
+ * Makefile.in: Regenerate.
+ * aclocal.m4: Regenerate.
+ * ldlang.c (ctf_output): Conditionalize on ENABLE_LIBCTF.
+ (ldlang_open_ctf): Likewise.
+ (lang_merge_ctf): Likewise.
+ (ldlang_ctf_apply_strsym): Likewise.
+ (lang_write_ctf): Likewise.
+ (ldlang_write_ctf_late): Likewise.
+ (ldlang_open_ctf) [!ENABLE_LIBCTF]: Warn about the presence of CTF
+ sections.
+ (lang_merge_ctf) [!ENABLE_LIBCTF]: New stub.
+ (ldlang_ctf_apply_strsym) [!ENABLE_LIBCTF]: Likewise.
+ (lang_write_ctf) [!ENABLE_LIBCTF]: Likewise.
+ (ldlang_write_ctf_late) [!ENABLE_LIBCTF]: Likewise.
+ * ldelfgen.c (ldelf_emit_ctf_early): Conditionalize on
+ ENABLE_LIBCTF.
+ (struct ctf_strsym_iter_cb_arg): Likewise.
+ (ldelf_ctf_strtab_iter_cb): Likewise.
+ (ldelf_ctf_symbols_iter_cb): Likewise.
+ (ldelf_examine_strtab_for_ctf): Likewise.
+ (ldelf_emit_ctf_early) [!ENABLE_LIBCTF]: New stub.
+ (ldelf_examine_strtab_for_ctf) [!ENABLE_LIBCTF]: New stub.
+
2020-06-26 Jan Beulich <jbeulich@suse.com>
* testsuite/ld-x86-64/x86-64.exp: Run K1OM tests.
diff --git a/ld/Makefile.am b/ld/Makefile.am
index f0767f2..5035c5d 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -144,7 +144,11 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @zlibinc@ \
BFDLIB = ../bfd/libbfd.la
LIBIBERTY = ../libiberty/libiberty.a
+if ENABLE_LIBCTF
LIBCTF = ../libctf/libctf.la
+else
+LIBCTF =
+endif
# These all start with e so 'make clean' can find them.
ALL_EMULATION_SOURCES = \
diff --git a/ld/Makefile.in b/ld/Makefile.in
index be0291c..49e1f85 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -113,6 +113,7 @@ ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \
$(top_srcdir)/../bfd/warning.m4 $(top_srcdir)/../config/acx.m4 \
$(top_srcdir)/../config/depstand.m4 \
+ $(top_srcdir)/../config/enable.m4 \
$(top_srcdir)/../config/gettext-sister.m4 \
$(top_srcdir)/../config/largefile.m4 \
$(top_srcdir)/../config/lcmessage.m4 \
@@ -180,6 +181,7 @@ am_ld_new_OBJECTS = ldgram.$(OBJEXT) ldlex-wrapper.$(OBJEXT) \
plugin.$(OBJEXT) ldbuildid.$(OBJEXT)
ld_new_OBJECTS = $(am_ld_new_OBJECTS)
am__DEPENDENCIES_1 =
+@ENABLE_LIBCTF_TRUE@am__DEPENDENCIES_2 = ../libctf/libctf.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -628,7 +630,8 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @zlibinc@ \
BFDLIB = ../bfd/libbfd.la
LIBIBERTY = ../libiberty/libiberty.a
-LIBCTF = ../libctf/libctf.la
+@ENABLE_LIBCTF_FALSE@LIBCTF =
+@ENABLE_LIBCTF_TRUE@LIBCTF = ../libctf/libctf.la
# These all start with e so 'make clean' can find them.
ALL_EMULATION_SOURCES = \
diff --git a/ld/aclocal.m4 b/ld/aclocal.m4
index 7df8bf6..f6e87a2 100644
--- a/ld/aclocal.m4
+++ b/ld/aclocal.m4
@@ -1189,6 +1189,7 @@ m4_include([../bfd/acinclude.m4])
m4_include([../bfd/warning.m4])
m4_include([../config/acx.m4])
m4_include([../config/depstand.m4])
+m4_include([../config/enable.m4])
m4_include([../config/gettext-sister.m4])
m4_include([../config/largefile.m4])
m4_include([../config/lcmessage.m4])
diff --git a/ld/config.in b/ld/config.in
index 8cadcba..f171210 100644
--- a/ld/config.in
+++ b/ld/config.in
@@ -33,6 +33,9 @@
*/
#undef DEFAULT_NEW_DTAGS
+/* Handle .ctf type-info sections */
+#undef ENABLE_LIBCTF
+
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
diff --git a/ld/configure b/ld/configure
index fba65c5..11c69be 100755
--- a/ld/configure
+++ b/ld/configure
@@ -678,6 +678,8 @@ WARN_WRITE_STRINGS
NO_WERROR
WARN_CFLAGS_FOR_BUILD
WARN_CFLAGS
+ENABLE_LIBCTF_FALSE
+ENABLE_LIBCTF_TRUE
installed_linker
install_as_default
TARGET_SYSTEM_ROOT_DEFINE
@@ -832,6 +834,7 @@ enable_relro
enable_textrel_check
enable_separate_code
enable_default_hash_style
+enable_libctf
enable_werror
enable_build_warnings
enable_nls
@@ -1502,6 +1505,7 @@ Optional Features:
--enable-separate-code enable -z separate-code in ELF linker by default
--enable-default-hash-style={sysv,gnu,both}
use this default hash style
+ --enable-libctf Handle .ctf type-info sections [default=yes]
--enable-werror treat compile warnings as errors
--enable-build-warnings enable build-time compiler warnings
--disable-nls do not use Native Language Support
@@ -12033,7 +12037,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12036 "configure"
+#line 12040 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -12139,7 +12143,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 12142 "configure"
+#line 12146 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15926,6 +15930,33 @@ case "${enable_default_hash_style}" in
*) ac_default_emit_gnu_hash=0 ;;
esac
+ # Check whether --enable-libctf was given.
+if test "${enable_libctf+set}" = set; then :
+ enableval=$enable_libctf;
+ case "$enableval" in
+ yes|no) ;;
+ *) as_fn_error $? "Argument to enable/disable libctf must be yes or no" "$LINENO" 5 ;;
+ esac
+
+else
+ enable_libctf=yes
+fi
+
+
+if test "${enable_libctf}" = yes; then
+
+$as_echo "#define ENABLE_LIBCTF 1" >>confdefs.h
+
+fi
+ if test "${enable_libctf}" = yes; then
+ ENABLE_LIBCTF_TRUE=
+ ENABLE_LIBCTF_FALSE='#'
+else
+ ENABLE_LIBCTF_TRUE='#'
+ ENABLE_LIBCTF_FALSE=
+fi
+
+
# Set the 'development' global.
. $srcdir/../bfd/development.sh
@@ -17700,6 +17731,9 @@ else
TESTBFDLIB="../bfd/.libs/libbfd.a"
TESTCTFLIB="../libctf/.libs/libctf.a"
fi
+if test "${enable_libctf}" = no; then
+ TESTCTFLIB=
+fi
@@ -17872,6 +17906,10 @@ if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${ENABLE_LIBCTF_TRUE}" && test -z "${ENABLE_LIBCTF_FALSE}"; then
+ as_fn_error $? "conditional \"ENABLE_LIBCTF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
diff --git a/ld/configure.ac b/ld/configure.ac
index 2b6c048..5a4938a 100644
--- a/ld/configure.ac
+++ b/ld/configure.ac
@@ -221,6 +221,12 @@ case "${enable_default_hash_style}" in
*) ac_default_emit_gnu_hash=0 ;;
esac
+GCC_ENABLE([libctf], [yes], [], [Handle .ctf type-info sections])
+if test "${enable_libctf}" = yes; then
+ AC_DEFINE(ENABLE_LIBCTF, 1, [Handle .ctf type-info sections])
+fi
+AM_CONDITIONAL(ENABLE_LIBCTF, test "${enable_libctf}" = yes)
+
AM_BINUTILS_WARNINGS
AM_LC_MESSAGES
@@ -524,6 +530,9 @@ else
TESTBFDLIB="../bfd/.libs/libbfd.a"
TESTCTFLIB="../libctf/.libs/libctf.a"
fi
+if test "${enable_libctf}" = no; then
+ TESTCTFLIB=
+fi
AC_SUBST(TESTBFDLIB)
AC_SUBST(TESTCTFLIB)
diff --git a/ld/ldelfgen.c b/ld/ldelfgen.c
index c0568f1..3a56194 100644
--- a/ld/ldelfgen.c
+++ b/ld/ldelfgen.c
@@ -88,6 +88,7 @@ ldelf_map_segments (bfd_boolean need_layout)
}
}
+#ifdef ENABLE_LIBCTF
/* We want to emit CTF early if and only if we are not targetting ELF with this
invocation. */
@@ -197,3 +198,16 @@ ldelf_examine_strtab_for_ctf
"cost: %s\n"), ctf_errmsg (ctf_errno (ctf_output)));
}
}
+#else
+extern int ldelf_emit_ctf_early (void)
+{
+ return 0;
+}
+
+extern void ldelf_examine_strtab_for_ctf
+ (struct ctf_file *ctf_output ATTRIBUTE_UNUSED,
+ struct elf_sym_strtab *syms ATTRIBUTE_UNUSED,
+ bfd_size_type symcount ATTRIBUTE_UNUSED,
+ struct elf_strtab_hash *symstrtab ATTRIBUTE_UNUSED)
+{}
+#endif
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 38ed83a..23e787a 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -131,7 +131,9 @@ bfd_boolean delete_output_file_on_failure = FALSE;
struct lang_phdr *lang_phdr_list;
struct lang_nocrossrefs *nocrossref_list;
struct asneeded_minfo **asneeded_list_tail;
+#ifdef ENABLE_LIBCTF
static ctf_file_t *ctf_output;
+#endif
/* Functions that traverse the linker script and might evaluate
DEFINED() need to increment this at the start of the traversal. */
@@ -3669,6 +3671,7 @@ open_input_bfds (lang_statement_union_type *s, enum open_bfd_mode mode)
einfo ("%F");
}
+#ifdef ENABLE_LIBCTF
/* Open the CTF sections in the input files with libctf: if any were opened,
create a fake input file that we'll write the merged CTF data to later
on. */
@@ -3848,6 +3851,38 @@ ldlang_write_ctf_late (void)
lang_write_ctf (1);
}
+#else
+static void
+ldlang_open_ctf (void)
+{
+ LANG_FOR_EACH_INPUT_STATEMENT (file)
+ {
+ asection *sect;
+
+ /* If built without CTF, warn and delete all CTF sections from the output.
+ (The alternative would be to simply concatenate them, which does not
+ yield a valid CTF section.) */
+
+ if ((sect = bfd_get_section_by_name (file->the_bfd, ".ctf")) != NULL)
+ {
+ einfo (_("%P: warning: CTF section in `%pI' not linkable: "
+ "%P was built without support for CTF\n"), file);
+ sect->size = 0;
+ sect->flags |= SEC_EXCLUDE;
+ }
+ }
+}
+
+static void lang_merge_ctf (void) {}
+void
+ldlang_ctf_apply_strsym (struct elf_sym_strtab *syms ATTRIBUTE_UNUSED,
+ bfd_size_type symcount ATTRIBUTE_UNUSED,
+ struct elf_strtab_hash *symstrtab ATTRIBUTE_UNUSED)
+{
+}
+static void lang_write_ctf (int late ATTRIBUTE_UNUSED) {}
+void ldlang_write_ctf_late (void) {}
+#endif
/* Add the supplied name to the symbol table as an undefined reference.
This is a two step process as the symbol table doesn't even exist at