gdb: use std::vector instead of alloca in core_target::get_core_register_section
As I was trying to compile gdb for an m68k host, I got this error: CXX corelow.o In file included from /binutils-gdb/gdb/gdbsupport/common-defs.h:120, from /binutils-gdb/gdb/defs.h:28, from /binutils-gdb/gdb/corelow.c:20: /binutils-gdb/gdb/corelow.c: In member function 'void core_target::get_core_register_section(regcache*, const regset*, const char*, int, int, const char*, bool)': /binutils-gdb/gdb/../include/libiberty.h:727:36: error: 'alloca' bound is unknown [-Werror=alloca-larger-than=] 727 | # define alloca(x) __builtin_alloca(x) | ~~~~~~~~~~~~~~~~^~~ /binutils-gdb/gdb/corelow.c:625:23: note: in expansion of macro 'alloca' 625 | contents = (char *) alloca (size); | ^~~~~~ We are using alloca to hold the contents of a the core register sections. These sections are typically fairly small, but there is no realy guarantee, so I think it would be more reasonable to just use dynamic allocation here. gdb/ChangeLog: * corelow.c (core_target::get_core_register_section): Use std::vector instead of alloca.
This commit is contained in:
parent
c0bd321d77
commit
d8b2f9e333
@ -1,3 +1,8 @@
|
||||
2020-01-13 Simon Marchi <simon.marchi@polymtl.ca>
|
||||
|
||||
* corelow.c (core_target::get_core_register_section): Use
|
||||
std::vector instead of alloca.
|
||||
|
||||
2020-01-13 Simon Marchi <simon.marchi@efficios.com>
|
||||
|
||||
* warning.m4: Add -Wmissing-declarations to build_warnings.
|
||||
|
@ -594,7 +594,6 @@ core_target::get_core_register_section (struct regcache *regcache,
|
||||
{
|
||||
struct bfd_section *section;
|
||||
bfd_size_type size;
|
||||
char *contents;
|
||||
bool variable_size_section = (regset != NULL
|
||||
&& regset->flags & REGSET_VARIABLE_SIZE);
|
||||
|
||||
@ -622,9 +621,9 @@ core_target::get_core_register_section (struct regcache *regcache,
|
||||
section_name.c_str ());
|
||||
}
|
||||
|
||||
contents = (char *) alloca (size);
|
||||
if (! bfd_get_section_contents (core_bfd, section, contents,
|
||||
(file_ptr) 0, size))
|
||||
std::vector<char> contents (size);
|
||||
if (!bfd_get_section_contents (core_bfd, section, contents.data (),
|
||||
(file_ptr) 0, size))
|
||||
{
|
||||
warning (_("Couldn't read %s registers from `%s' section in core file."),
|
||||
human_name, section_name.c_str ());
|
||||
@ -633,12 +632,12 @@ core_target::get_core_register_section (struct regcache *regcache,
|
||||
|
||||
if (regset != NULL)
|
||||
{
|
||||
regset->supply_regset (regset, regcache, -1, contents, size);
|
||||
regset->supply_regset (regset, regcache, -1, contents.data (), size);
|
||||
return;
|
||||
}
|
||||
|
||||
gdb_assert (m_core_vec != nullptr);
|
||||
m_core_vec->core_read_registers (regcache, contents, size, which,
|
||||
m_core_vec->core_read_registers (regcache, contents.data (), size, which,
|
||||
(CORE_ADDR) bfd_section_vma (section));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user