2020-01-01 15:57:01 +08:00
|
|
|
/* Copyright (C) 2019-2020 Free Software Foundation, Inc.
|
libctf: installable libctf as a shared library
This lets other programs read and write CTF-format data.
Two versioned shared libraries are created: libctf.so and
libctf-nobfd.so. They contain identical content except that
libctf-nobfd.so contains no references to libbfd and does not implement
ctf_open, ctf_fdopen, ctf_bfdopen or ctf_bfdopen_ctfsect, so it can be
used by programs that cannot use BFD, like readelf.
The soname major version is presently .0 until the linker API
stabilizes, when it will flip to .1 and hopefully never change again.
New in v3.
v4: libtoolize and turn into a pair of shared libraries. Drop
--enable-install-ctf: now controlled by --enable-shared and
--enable-install-libbfd, like everything else.
v5: Add ../bfd to ACLOCAL_AMFLAGS and AC_CONFIG_MACRO_DIR. Fix tabdamage.
* Makefile.def (host_modules): libctf is no longer no_install.
* Makefile.in: Regenerated.
libctf/
* configure.ac (AC_DISABLE_SHARED): New, like opcodes/.
(LT_INIT): Likewise.
(AM_INSTALL_LIBBFD): Likewise.
(dlopen): Note why this is necessary in a comment.
(SHARED_LIBADD): Initialize for possibly-PIC libiberty: derived from
opcodes/.
(SHARED_LDFLAGS): Likewise.
(BFD_LIBADD): Likewise, for libbfd.
(BFD_DEPENDENCIES): Likewise.
(VERSION_FLAGS): Initialize, using a version script if ld supports
one, or libtool -export-symbols-regex otherwise.
(AC_CONFIG_MACRO_DIR): Add ../BFD.
* Makefile.am (ACLOCAL_AMFLAGS): Likewise.
(INCDIR): New.
(AM_CPPFLAGS): Use $(srcdir), not $(top_srcdir).
(noinst_LIBRARIES): Replace with...
[INSTALL_LIBBFD] (lib_LTLIBRARIES): This, or...
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES): ... this, mentioning new
libctf-nobfd.la as well.
[INSTALL_LIBCTF] (include_HEADERS): Add the CTF headers.
[!INSTALL_LIBCTF] (include_HEADERS): New, empty.
(libctf_a_SOURCES): Rename to...
(libctf_nobfd_la_SOURCES): ... this, all of libctf other than
ctf-open-bfd.c.
(libctf_la_SOURCES): Now derived from libctf_nobfd_la_SOURCES,
with ctf-open-bfd.c added.
(libctf_nobfd_la_LIBADD): New, using @SHARED_LIBADD@.
(libctf_la_LIBADD): New, using @BFD_LIBADD@ as well.
(libctf_la_DEPENDENCIES): New, using @BFD_DEPENDENCIES@.
* Makefile.am [INSTALL_LIBCTF]: Use it.
* aclocal.m4: Add ../bfd/acinclude.m4, ../config/acx.m4, and the
libtool macros.
* libctf.ver: New, everything is version LIBCTF_1.0 currently (even
the unstable components).
* Makefile.in: Regenerated.
* config.h.in: Likewise.
* configure: Likewise.
binutils/
* Makefile.am (LIBCTF): Mention the .la file.
(LIBCTF_NOBFD): New.
(readelf_DEPENDENCIES): Use it.
(readelf_LDADD): Likewise.
* Makefile.in: Regenerated.
ld/
* configure.ac (TESTCTFLIB): Set to the .so or .a, like TESTBFDLIB.
* Makefile.am (TESTCTFLIB): Use it.
(LIBCTF): Use the .la file.
(check-DEJAGNU): Use it.
* Makefile.in: Regenerated.
* configure: Likewise.
include/
* ctf-api.h: Note the instability of the ctf_link interfaces.
2019-07-20 21:45:12 +08:00
|
|
|
|
|
|
|
This file is part of libctf.
|
|
|
|
|
|
|
|
libctf is free software; you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU General Public License as published by the Free
|
|
|
|
Software Foundation; either version 3, or (at your option) any later
|
|
|
|
version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful, but
|
|
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; see the file COPYING. If not see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
LIBCTF_1.0 {
|
|
|
|
global:
|
|
|
|
/* In libctf and libctf-nobfd. */
|
|
|
|
|
|
|
|
ctf_bufopen;
|
|
|
|
ctf_simple_open;
|
|
|
|
ctf_create;
|
|
|
|
ctf_close;
|
|
|
|
ctf_file_close;
|
|
|
|
|
|
|
|
ctf_cuname;
|
|
|
|
ctf_cuname_set;
|
|
|
|
ctf_parent_file;
|
|
|
|
ctf_parent_name;
|
|
|
|
ctf_parent_name_set;
|
|
|
|
ctf_type_isparent;
|
|
|
|
ctf_type_ischild;
|
|
|
|
|
|
|
|
ctf_import;
|
|
|
|
ctf_setmodel;
|
|
|
|
ctf_getmodel;
|
|
|
|
|
|
|
|
ctf_setspecific;
|
|
|
|
ctf_getspecific;
|
|
|
|
|
|
|
|
ctf_errno;
|
|
|
|
ctf_errmsg;
|
|
|
|
ctf_version;
|
|
|
|
|
|
|
|
ctf_func_info;
|
|
|
|
ctf_func_args;
|
|
|
|
ctf_func_type_info;
|
|
|
|
ctf_func_type_args;
|
|
|
|
|
|
|
|
ctf_lookup_by_name;
|
|
|
|
ctf_lookup_by_symbol;
|
|
|
|
ctf_lookup_variable;
|
|
|
|
|
|
|
|
ctf_type_resolve;
|
|
|
|
ctf_type_lname;
|
|
|
|
ctf_type_name;
|
|
|
|
ctf_type_aname;
|
|
|
|
ctf_type_aname_raw;
|
|
|
|
ctf_type_size;
|
|
|
|
ctf_type_align;
|
|
|
|
ctf_type_kind;
|
|
|
|
ctf_type_reference;
|
|
|
|
ctf_type_pointer;
|
|
|
|
ctf_type_encoding;
|
|
|
|
ctf_type_visit;
|
|
|
|
ctf_type_cmp;
|
|
|
|
ctf_type_compat;
|
|
|
|
|
|
|
|
ctf_member_info;
|
|
|
|
ctf_array_info;
|
|
|
|
|
|
|
|
ctf_enum_name;
|
|
|
|
ctf_enum_value;
|
|
|
|
|
|
|
|
ctf_label_set;
|
|
|
|
ctf_label_get;
|
|
|
|
|
|
|
|
ctf_label_topmost;
|
|
|
|
ctf_label_info;
|
|
|
|
|
|
|
|
ctf_member_iter;
|
|
|
|
ctf_enum_iter;
|
|
|
|
ctf_type_iter;
|
|
|
|
ctf_type_iter_all;
|
|
|
|
ctf_label_iter;
|
|
|
|
ctf_variable_iter;
|
|
|
|
|
|
|
|
ctf_add_array;
|
|
|
|
ctf_add_const;
|
|
|
|
ctf_add_enum;
|
|
|
|
ctf_add_enum_encoded;
|
|
|
|
ctf_add_float;
|
|
|
|
ctf_add_forward;
|
|
|
|
ctf_add_function;
|
|
|
|
ctf_add_integer;
|
|
|
|
ctf_add_pointer;
|
|
|
|
ctf_add_type;
|
|
|
|
ctf_add_typedef;
|
|
|
|
ctf_add_restrict;
|
|
|
|
ctf_add_slice;
|
|
|
|
ctf_add_struct;
|
|
|
|
ctf_add_union;
|
|
|
|
ctf_add_struct_sized;
|
|
|
|
ctf_add_union_sized;
|
|
|
|
ctf_add_volatile;
|
|
|
|
|
|
|
|
ctf_add_enumerator;
|
|
|
|
ctf_add_member;
|
|
|
|
ctf_add_member_offset;
|
|
|
|
ctf_add_member_encoded;
|
|
|
|
ctf_add_variable;
|
|
|
|
|
|
|
|
ctf_set_array;
|
|
|
|
|
|
|
|
ctf_update;
|
|
|
|
ctf_discard;
|
|
|
|
ctf_snapshot;
|
|
|
|
ctf_rollback;
|
|
|
|
ctf_write;
|
|
|
|
ctf_write_mem;
|
|
|
|
ctf_gzwrite;
|
|
|
|
ctf_compress_write;
|
|
|
|
ctf_getdatasect;
|
|
|
|
|
|
|
|
ctf_arc_write;
|
|
|
|
ctf_arc_write_fd;
|
|
|
|
ctf_arc_open;
|
libctf, binutils: support CTF archives like objdump
objdump and readelf have one major CTF-related behavioural difference:
objdump can read .ctf sections that contain CTF archives and extract and
dump their members, while readelf cannot. Since the linker often emits
CTF archives, this means that readelf intermittently and (from the
user's perspective) randomly fails to read CTF in files that ld emits,
with a confusing error message wrongly claiming that the CTF content is
corrupt. This is purely because the archive-opening code in libctf was
needlessly tangled up with the BFD code, so readelf couldn't use it.
Here, we disentangle it, moving ctf_new_archive_internal from
ctf-open-bfd.c into ctf-archive.c and merging it with the helper
function in ctf-archive.c it was already using. We add a new public API
function ctf_arc_bufopen, that looks very like ctf_bufopen but returns
an archive given suitable section data rather than a ctf_file_t: the
archive is a ctf_archive_t, so it can be called on raw CTF dictionaries
(with no archive present) and will return a single-member synthetic
"archive".
There is a tiny lifetime tweak here: before now, the archive code could
assume that the symbol section in the ctf_archive_internal wrapper
structure was always owned by BFD if it was present and should always be
freed: now, the caller can pass one in via ctf_arc_bufopen, wihch has
the usual lifetime rules for such sections (caller frees): so we add an
extra field to track whether this is an internal call from ctf-open-bfd,
in which case we still free the symbol section.
include/
* ctf-api.h (ctf_arc_bufopen): New.
libctf/
* ctf-impl.h (ctf_new_archive_internal): Declare.
(ctf_arc_bufopen): Remove.
(ctf_archive_internal) <ctfi_free_symsect>: New.
* ctf-archive.c (ctf_arc_close): Use it.
(ctf_arc_bufopen): Fuse into...
(ctf_new_archive_internal): ... this, moved across from...
* ctf-open-bfd.c: ... here.
(ctf_bfdopen_ctfsect): Use ctf_arc_bufopen.
* libctf.ver: Add it.
binutils/
* readelf.c (dump_section_as_ctf): Support .ctf archives using
ctf_arc_bufopen. Automatically load the .ctf member of such
archives as the parent of all other members, unless specifically
overridden via --ctf-parent. Split out dumping code into...
(dump_ctf_archive_member): ... here, as in objdump, and call
it once per archive member.
(dump_ctf_indent_lines): Code style fix.
2019-12-13 20:01:12 +08:00
|
|
|
ctf_arc_bufopen;
|
libctf: installable libctf as a shared library
This lets other programs read and write CTF-format data.
Two versioned shared libraries are created: libctf.so and
libctf-nobfd.so. They contain identical content except that
libctf-nobfd.so contains no references to libbfd and does not implement
ctf_open, ctf_fdopen, ctf_bfdopen or ctf_bfdopen_ctfsect, so it can be
used by programs that cannot use BFD, like readelf.
The soname major version is presently .0 until the linker API
stabilizes, when it will flip to .1 and hopefully never change again.
New in v3.
v4: libtoolize and turn into a pair of shared libraries. Drop
--enable-install-ctf: now controlled by --enable-shared and
--enable-install-libbfd, like everything else.
v5: Add ../bfd to ACLOCAL_AMFLAGS and AC_CONFIG_MACRO_DIR. Fix tabdamage.
* Makefile.def (host_modules): libctf is no longer no_install.
* Makefile.in: Regenerated.
libctf/
* configure.ac (AC_DISABLE_SHARED): New, like opcodes/.
(LT_INIT): Likewise.
(AM_INSTALL_LIBBFD): Likewise.
(dlopen): Note why this is necessary in a comment.
(SHARED_LIBADD): Initialize for possibly-PIC libiberty: derived from
opcodes/.
(SHARED_LDFLAGS): Likewise.
(BFD_LIBADD): Likewise, for libbfd.
(BFD_DEPENDENCIES): Likewise.
(VERSION_FLAGS): Initialize, using a version script if ld supports
one, or libtool -export-symbols-regex otherwise.
(AC_CONFIG_MACRO_DIR): Add ../BFD.
* Makefile.am (ACLOCAL_AMFLAGS): Likewise.
(INCDIR): New.
(AM_CPPFLAGS): Use $(srcdir), not $(top_srcdir).
(noinst_LIBRARIES): Replace with...
[INSTALL_LIBBFD] (lib_LTLIBRARIES): This, or...
[!INSTALL_LIBBFD] (noinst_LTLIBRARIES): ... this, mentioning new
libctf-nobfd.la as well.
[INSTALL_LIBCTF] (include_HEADERS): Add the CTF headers.
[!INSTALL_LIBCTF] (include_HEADERS): New, empty.
(libctf_a_SOURCES): Rename to...
(libctf_nobfd_la_SOURCES): ... this, all of libctf other than
ctf-open-bfd.c.
(libctf_la_SOURCES): Now derived from libctf_nobfd_la_SOURCES,
with ctf-open-bfd.c added.
(libctf_nobfd_la_LIBADD): New, using @SHARED_LIBADD@.
(libctf_la_LIBADD): New, using @BFD_LIBADD@ as well.
(libctf_la_DEPENDENCIES): New, using @BFD_DEPENDENCIES@.
* Makefile.am [INSTALL_LIBCTF]: Use it.
* aclocal.m4: Add ../bfd/acinclude.m4, ../config/acx.m4, and the
libtool macros.
* libctf.ver: New, everything is version LIBCTF_1.0 currently (even
the unstable components).
* Makefile.in: Regenerated.
* config.h.in: Likewise.
* configure: Likewise.
binutils/
* Makefile.am (LIBCTF): Mention the .la file.
(LIBCTF_NOBFD): New.
(readelf_DEPENDENCIES): Use it.
(readelf_LDADD): Likewise.
* Makefile.in: Regenerated.
ld/
* configure.ac (TESTCTFLIB): Set to the .so or .a, like TESTBFDLIB.
* Makefile.am (TESTCTFLIB): Use it.
(LIBCTF): Use the .la file.
(check-DEJAGNU): Use it.
* Makefile.in: Regenerated.
* configure: Likewise.
include/
* ctf-api.h: Note the instability of the ctf_link interfaces.
2019-07-20 21:45:12 +08:00
|
|
|
ctf_arc_close;
|
|
|
|
ctf_arc_open_by_name;
|
|
|
|
ctf_arc_open_by_name_sections;
|
|
|
|
ctf_archive_iter;
|
|
|
|
ctf_archive_raw_iter;
|
|
|
|
ctf_get_arc;
|
|
|
|
|
|
|
|
ctf_dump;
|
|
|
|
|
|
|
|
ctf_setdebug;
|
|
|
|
ctf_getdebug;
|
|
|
|
|
|
|
|
/* Not yet part of the stable API. */
|
|
|
|
|
|
|
|
ctf_link_add_ctf;
|
|
|
|
ctf_link_add_cu_mapping;
|
|
|
|
ctf_link_set_memb_name_changer;
|
|
|
|
ctf_link;
|
|
|
|
ctf_link_add_strtab;
|
|
|
|
ctf_link_shuffle_syms;
|
|
|
|
ctf_link_write;
|
|
|
|
|
|
|
|
/* In libctf alone. */
|
|
|
|
|
|
|
|
ctf_fdopen;
|
|
|
|
ctf_open;
|
|
|
|
ctf_bfdopen;
|
|
|
|
ctf_bfdopen_ctfsect;
|
|
|
|
local:
|
|
|
|
*;
|
|
|
|
};
|