mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-27 01:28:46 +00:00
Sync libiberty/ & include/ with GCC
Note this brings in the interface files for libcc1/G++ as well, which we will be needing in GDB soon anyway. That commit renamed a method in the C interface and that required a small update to GDB's compile/ code, which I've included that in this patch to keep the tree building. include/ChangeLog: 2017-09-15 Pedro Alves <palves@redhat.com> * ansidecl.h (DISABLE_COPY_AND_ASSIGN): New macro. 2017-09-12 Jiong Wang <jiong.wang@arm.com> * dwarf2.def (DW_CFA_AARCH64_negate_ra_state): New DW_CFA_DUP. * dwarf2.h (DW_CFA_DUP): New define. 2017-08-21 Richard Biener <rguenther@suse.de> * simple-object.h (simple_object_copy_lto_debug_sections): New function. 2017-05-18 Martin Liska <mliska@suse.cz> * ansidecl.h: Define CONSTEXPR macro. 2017-05-24 Nathan Sidwell <nathan@acm.org> * libiberty.h (ASTRDUP): Adjust cast to avoid warning. 2017-01-30 Alexandre Oliva <aoliva@redhat.com> Introduce C++ support in libcc1. * gcc-c-fe.def (int_type_v0): Rename from... (int_type): ... this. Introduce new version. (float_type_v0): Rename from... (float_type): ... this. Introduce new version. (char_type): New. * gcc-c-interface.h (gcc_c_api_version): Add GCC_C_FE_VERSION_1. (gcc_type_array): Move... * gcc-interface.h: ... here. * gcc-cp-fe.def: New. * gcc-cp-interface.h: New. 2016-04-29 Oleg Endo <olegendo@gcc.gnu.org> * longlong.h (umul_ppmm): Remove SHMEDIA checks. (__umulsidi3, count_leading_zeros): Remove SHMEDIA implementations. 2017-09-15 Yao Qi <yao.qi@linaro.org> Pedro Alves <palves@redhat.com> * ansidecl.h (DISABLE_COPY_AND_ASSIGN): New macro. 2017-09-12 Jiong Wang <jiong.wang@arm.com> * dwarf2.def (DW_CFA_AARCH64_negate_ra_state): New DW_CFA_DUP. * dwarf2.h (DW_CFA_DUP): New define. 2017-08-21 Richard Biener <rguenther@suse.de> * simple-object.h (simple_object_copy_lto_debug_sections): New function. 2017-05-18 Martin Liska <mliska@suse.cz> * ansidecl.h: Define CONSTEXPR macro. 2017-05-24 Nathan Sidwell <nathan@acm.org> * libiberty.h (ASTRDUP): Adjust cast to avoid warning. 2017-01-30 Alexandre Oliva <aoliva@redhat.com> Introduce C++ support in libcc1. * gcc-c-fe.def (int_type_v0): Rename from... (int_type): ... this. Introduce new version. (float_type_v0): Rename from... (float_type): ... this. Introduce new version. (char_type): New. * gcc-c-interface.h (gcc_c_api_version): Add GCC_C_FE_VERSION_1. (gcc_type_array): Move... * gcc-interface.h: ... here. * gcc-cp-fe.def: New. * gcc-cp-interface.h: New. 2016-04-29 Oleg Endo <olegendo@gcc.gnu.org> * longlong.h (umul_ppmm): Remove SHMEDIA checks. (__umulsidi3, count_leading_zeros): Remove SHMEDIA implementations. libiberty/ChangeLog: 2017-09-15 Nathan Sidwell <nathan@acm.org> PR demangler/82195 * cp-demangle.c (d_name): Add 'toplevel' parm. Pass to ... (d_local_name): ... here. Parse trailing function args on nested local_name. (d_encoding, d_special_name, d_class_enum_type): Adjust d_name calls. * testsuite/demangle-expected: Add tests. 2017-09-15 Richard Biener <rguenther@suse.de> PR lto/81968 * simple-object-elf.c (simple_object_elf_copy_lto_debug_sections): Iterate marking dependent sections necessary. 2017-09-15 Nathan Sidwell <nathan@acm.org> * cp-demangle.c (is_fnqual_component_type): Reimplement using FNQUAL_COMPONENT_CASE. (d_encoding): Hold bare_function_type in local var. (d_local_name): Build name in both cases and build result once. Collapse switch-if to single conditional. (d_local_name): * testsuite/demangle-expected: Realign blank lines with tests. 2017-09-12 Jiong Wang <jiong.wang@arm.com> * dwarfnames.c (DW_CFA_DUP): New define. gdb/ChangeLog: 2017-09-15 Pedro Alves <palves@redhat.com> * compile/compile-c-types.c (convert_enum, convert_int) (convert_float): Adjust to refer to int_type_v0 and float_type_v0.
This commit is contained in:
@@ -425,7 +425,7 @@ is_ctor_dtor_or_conversion (struct demangle_component *);
|
||||
|
||||
static struct demangle_component *d_encoding (struct d_info *, int);
|
||||
|
||||
static struct demangle_component *d_name (struct d_info *);
|
||||
static struct demangle_component *d_name (struct d_info *, int);
|
||||
|
||||
static struct demangle_component *d_nested_name (struct d_info *);
|
||||
|
||||
@@ -484,7 +484,7 @@ static struct demangle_component *d_expression (struct d_info *);
|
||||
|
||||
static struct demangle_component *d_expr_primary (struct d_info *);
|
||||
|
||||
static struct demangle_component *d_local_name (struct d_info *);
|
||||
static struct demangle_component *d_local_name (struct d_info *, int);
|
||||
|
||||
static int d_discriminator (struct d_info *);
|
||||
|
||||
@@ -568,22 +568,6 @@ static int d_demangle_callback (const char *, int,
|
||||
demangle_callbackref, void *);
|
||||
static char *d_demangle (const char *, int, size_t *);
|
||||
|
||||
/* True iff TYPE is a demangling component representing a
|
||||
function-type-qualifier. */
|
||||
|
||||
static int
|
||||
is_fnqual_component_type (enum demangle_component_type type)
|
||||
{
|
||||
return (type == DEMANGLE_COMPONENT_RESTRICT_THIS
|
||||
|| type == DEMANGLE_COMPONENT_VOLATILE_THIS
|
||||
|| type == DEMANGLE_COMPONENT_CONST_THIS
|
||||
|| type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS
|
||||
|| type == DEMANGLE_COMPONENT_TRANSACTION_SAFE
|
||||
|| type == DEMANGLE_COMPONENT_NOEXCEPT
|
||||
|| type == DEMANGLE_COMPONENT_THROW_SPEC
|
||||
|| type == DEMANGLE_COMPONENT_REFERENCE_THIS);
|
||||
}
|
||||
|
||||
#define FNQUAL_COMPONENT_CASE \
|
||||
case DEMANGLE_COMPONENT_RESTRICT_THIS: \
|
||||
case DEMANGLE_COMPONENT_VOLATILE_THIS: \
|
||||
@@ -594,6 +578,23 @@ is_fnqual_component_type (enum demangle_component_type type)
|
||||
case DEMANGLE_COMPONENT_NOEXCEPT: \
|
||||
case DEMANGLE_COMPONENT_THROW_SPEC
|
||||
|
||||
/* True iff TYPE is a demangling component representing a
|
||||
function-type-qualifier. */
|
||||
|
||||
static int
|
||||
is_fnqual_component_type (enum demangle_component_type type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
FNQUAL_COMPONENT_CASE:
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CP_DEMANGLE_DEBUG
|
||||
|
||||
static void
|
||||
@@ -1305,9 +1306,9 @@ d_encoding (struct d_info *di, int top_level)
|
||||
return d_special_name (di);
|
||||
else
|
||||
{
|
||||
struct demangle_component *dc;
|
||||
struct demangle_component *dc, *dcr;
|
||||
|
||||
dc = d_name (di);
|
||||
dc = d_name (di, top_level);
|
||||
|
||||
if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0)
|
||||
{
|
||||
@@ -1327,8 +1328,6 @@ d_encoding (struct d_info *di, int top_level)
|
||||
which is local to a function. */
|
||||
if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
|
||||
{
|
||||
struct demangle_component *dcr;
|
||||
|
||||
dcr = d_right (dc);
|
||||
while (is_fnqual_component_type (dcr->type))
|
||||
dcr = d_left (dcr);
|
||||
@@ -1341,8 +1340,8 @@ d_encoding (struct d_info *di, int top_level)
|
||||
peek = d_peek_char (di);
|
||||
if (dc == NULL || peek == '\0' || peek == 'E')
|
||||
return dc;
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
|
||||
d_bare_function_type (di, has_return_type (dc)));
|
||||
dcr = d_bare_function_type (di, has_return_type (dc));
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc, dcr);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1384,7 +1383,7 @@ d_abi_tags (struct d_info *di, struct demangle_component *dc)
|
||||
*/
|
||||
|
||||
static struct demangle_component *
|
||||
d_name (struct d_info *di)
|
||||
d_name (struct d_info *di, int top_level)
|
||||
{
|
||||
char peek = d_peek_char (di);
|
||||
struct demangle_component *dc;
|
||||
@@ -1395,7 +1394,7 @@ d_name (struct d_info *di)
|
||||
return d_nested_name (di);
|
||||
|
||||
case 'Z':
|
||||
return d_local_name (di);
|
||||
return d_local_name (di, top_level);
|
||||
|
||||
case 'U':
|
||||
return d_unqualified_name (di);
|
||||
@@ -2080,11 +2079,11 @@ d_special_name (struct d_info *di)
|
||||
|
||||
case 'H':
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_TLS_INIT,
|
||||
d_name (di), NULL);
|
||||
d_name (di, 0), NULL);
|
||||
|
||||
case 'W':
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_TLS_WRAPPER,
|
||||
d_name (di), NULL);
|
||||
d_name (di, 0), NULL);
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
@@ -2095,11 +2094,12 @@ d_special_name (struct d_info *di)
|
||||
switch (d_next_char (di))
|
||||
{
|
||||
case 'V':
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_GUARD,
|
||||
d_name (di, 0), NULL);
|
||||
|
||||
case 'R':
|
||||
{
|
||||
struct demangle_component *name = d_name (di);
|
||||
struct demangle_component *name = d_name (di, 0);
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, name,
|
||||
d_number_component (di));
|
||||
}
|
||||
@@ -2935,7 +2935,7 @@ d_bare_function_type (struct d_info *di, int has_return_type)
|
||||
static struct demangle_component *
|
||||
d_class_enum_type (struct d_info *di)
|
||||
{
|
||||
return d_name (di);
|
||||
return d_name (di, 0);
|
||||
}
|
||||
|
||||
/* <array-type> ::= A <(positive dimension) number> _ <(element) type>
|
||||
@@ -3568,9 +3568,10 @@ d_expr_primary (struct d_info *di)
|
||||
*/
|
||||
|
||||
static struct demangle_component *
|
||||
d_local_name (struct d_info *di)
|
||||
d_local_name (struct d_info *di, int top_level)
|
||||
{
|
||||
struct demangle_component *function;
|
||||
struct demangle_component *name;
|
||||
|
||||
if (! d_check_char (di, 'Z'))
|
||||
return NULL;
|
||||
@@ -3585,13 +3586,10 @@ d_local_name (struct d_info *di)
|
||||
d_advance (di, 1);
|
||||
if (! d_discriminator (di))
|
||||
return NULL;
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
|
||||
d_make_name (di, "string literal",
|
||||
sizeof "string literal" - 1));
|
||||
name = d_make_name (di, "string literal", sizeof "string literal" - 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
struct demangle_component *name;
|
||||
int num = -1;
|
||||
|
||||
if (d_peek_char (di) == 'd')
|
||||
@@ -3603,22 +3601,36 @@ d_local_name (struct d_info *di)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
name = d_name (di);
|
||||
if (name)
|
||||
switch (name->type)
|
||||
{
|
||||
/* Lambdas and unnamed types have internal discriminators. */
|
||||
case DEMANGLE_COMPONENT_LAMBDA:
|
||||
case DEMANGLE_COMPONENT_UNNAMED_TYPE:
|
||||
break;
|
||||
default:
|
||||
if (! d_discriminator (di))
|
||||
return NULL;
|
||||
}
|
||||
name = d_name (di, 0);
|
||||
|
||||
if (name
|
||||
/* Lambdas and unnamed types have internal discriminators
|
||||
and are not functions. */
|
||||
&& name->type != DEMANGLE_COMPONENT_LAMBDA
|
||||
&& name->type != DEMANGLE_COMPONENT_UNNAMED_TYPE)
|
||||
{
|
||||
if (!top_level
|
||||
&& d_peek_char (di) != 0 /* Not end of string. */
|
||||
&& d_peek_char (di) != 'E' /* Not end of nested encoding. */
|
||||
&& d_peek_char (di) != '_') /* Not discriminator. */
|
||||
{
|
||||
struct demangle_component *args;
|
||||
|
||||
args = d_bare_function_type (di, has_return_type (name));
|
||||
name = d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME,
|
||||
name, args);
|
||||
}
|
||||
|
||||
/* Read and ignore an optional discriminator. */
|
||||
if (! d_discriminator (di))
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (num >= 0)
|
||||
name = d_make_default_arg (di, num, name);
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
|
||||
}
|
||||
|
||||
return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
|
||||
}
|
||||
|
||||
/* <discriminator> ::= _ <number> # when number < 10
|
||||
|
||||
Reference in New Issue
Block a user