diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 6db2be3262..1532a37c39 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,28 @@ +2020-06-26 Nick Alcock + + * 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 * doc/binutils.texi: Adjust description of x86's -Msuffix. Drop diff --git a/binutils/Makefile.am b/binutils/Makefile.am index e5cf5634a7..2ee1196790 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 ee6f267df9..7ef2af4aff 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 4fa32fffd8..8bf2e9e242 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 703f7b15e7..3adc32bb1f 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 782fffac6f..bdc93e0207 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 385ab01a26..4ac1f34a6d 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 b00260bc25..e925b81e0d 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 c582feb70a..93508e2a34 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 25f0e2354c..2f0cd77ecf 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= Display CTF info from section \n\ --ctf-parent=\n\ @@ -4566,6 +4569,7 @@ usage (FILE * stream) Use section as the CTF external symtab\n\n\ --ctf-strings=\n\ Use section 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 1a06dc9624..4cf120413e 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,33 @@ +2020-06-26 Nick Alcock + + * 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 * testsuite/ld-x86-64/x86-64.exp: Run K1OM tests. diff --git a/ld/Makefile.am b/ld/Makefile.am index f0767f2be3..5035c5d1d5 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 be0291ceec..49e1f857d2 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 7df8bf68f1..f6e87a228a 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 8cadcba60f..f171210736 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 fba65c58e2..11c69bec7b 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 2b6c0480e9..5a4938afdb 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 c0568f169f..3a5619435c 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 38ed83a274..23e787a3b2 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