aboutsummaryrefslogtreecommitdiff
path: root/ld/ldlang.c
diff options
context:
space:
mode:
authorNick Alcock <nick.alcock@oracle.com>2020-06-05 23:18:06 +0100
committerNick Alcock <nick.alcock@oracle.com>2020-07-22 18:03:57 +0100
commit5dba6f05b7ba3d0e1c99da54592815564c782b39 (patch)
tree61183e2ed21e7b52a7f8540a844f2208cb6e28b9 /ld/ldlang.c
parentf320bba50ff0aab7ce342ab9e3d25f49fc45d468 (diff)
downloadgdb-5dba6f05b7ba3d0e1c99da54592815564c782b39.zip
gdb-5dba6f05b7ba3d0e1c99da54592815564c782b39.tar.gz
gdb-5dba6f05b7ba3d0e1c99da54592815564c782b39.tar.bz2
ld: new options --ctf-variables and --ctf-share-types
libctf recently changed to make it possible to not emit the CTF variables section. Make this the default for ld: the variables section is a simple name -> type mapping, and the names can be quite voluminous. Nothing in the variables section appears in the symbol table, by definition, so GDB cannot make use of them: special-purpose projects that implement their own analogues of symbol table lookup can do so, but they'll need to tell the linker to emit the variables section after all. The new --ctf-variables option does this. The --ctf-share-types option (valid values "share-duplicated" and "share-unconflicted") allow the caller to specify the CTF link mode. Most users will want share-duplicated, since it allows for more convenient debugging: but very large projects composed of many decoupled components may want to use share-unconflicted mode, which places types that appear in only one TU into per-TU dicts. (They may also want to relink the CTF using the ctf_link API and cu-mapping, to make their "components" larger than a single TU. Right now the linker does not expose the CU-mapping machinery. Perhaps it should in future to make this use case easier.) For now, giving the linker the ability to emit share-duplicated CTF lets us add testcases for that mode to the testsuite. ld/ * ldlex.h (option_values) <OPTION_CTF_VARIABLES, OPTION_NO_CTF_VARIABLES, OPTION_CTF_SHARE_TYPES>: New. * ld.h (ld_config_type) <ctf_variables, ctf_share_duplicated>: New fields. * ldlang.c (lang_merge_ctf): Use them. * lexsup.c (ld_options): Add ctf-variables, no-ctf-variables, ctf-share-types. (parse_args) <OPTION_CTF_VARIABLES, OPTION_NO_CTF_VARIABLES, OPTION_CTF_SHARE_TYPES>: New cases. * ld.texi: Document new options. * NEWS: Likewise.
Diffstat (limited to 'ld/ldlang.c')
-rw-r--r--ld/ldlang.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ld/ldlang.c b/ld/ldlang.c
index b0231a1..bf29144 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -3755,6 +3755,7 @@ static void
lang_merge_ctf (void)
{
asection *output_sect;
+ int flags = 0;
if (!ctf_output)
return;
@@ -3791,7 +3792,14 @@ lang_merge_ctf (void)
}
}
- if (ctf_link (ctf_output, CTF_LINK_SHARE_UNCONFLICTED) < 0)
+ if (!config.ctf_share_duplicated)
+ flags = CTF_LINK_SHARE_UNCONFLICTED;
+ else
+ flags = CTF_LINK_SHARE_DUPLICATED;
+ if (!config.ctf_variables)
+ flags |= CTF_LINK_OMIT_VARIABLES_SECTION;
+
+ if (ctf_link (ctf_output, flags) < 0)
{
einfo (_("%P: warning: CTF linking failed; "
"output will have no CTF section: `%s'\n"),