diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2020-01-13 14:32:52 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@efficios.com> | 2020-01-13 14:33:19 -0500 |
commit | d8b2f9e3330ae76e33679c2628a6196542f329ca (patch) | |
tree | 85915b47e7adcea2989620b907b366562bc88634 /gdb/corelow.c | |
parent | c0bd321d770f3829d5dba3abb2e47443197a2e23 (diff) | |
download | binutils-d8b2f9e3330ae76e33679c2628a6196542f329ca.zip binutils-d8b2f9e3330ae76e33679c2628a6196542f329ca.tar.gz binutils-d8b2f9e3330ae76e33679c2628a6196542f329ca.tar.bz2 |
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.
Diffstat (limited to 'gdb/corelow.c')
-rw-r--r-- | gdb/corelow.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/gdb/corelow.c b/gdb/corelow.c index f162a1b..0418ec2 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -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)); } |