Fix formatting and apply clang-tidy fixes

This commit is contained in:
Les De Ridder 2020-07-10 18:17:38 +02:00
parent 43ba294701
commit d82430d33c
1 changed files with 92 additions and 88 deletions

180
gdb/pdb.c
View File

@ -19,7 +19,6 @@ HACK: Honestly, this whole thing is a hack:
#undef QUIT #undef QUIT
#include <libr/r_pdb.h> #include <libr/r_pdb.h>
#include <libr/r_core.h>
#undef QUIT #undef QUIT
#define QUIT maybe_quit () #define QUIT maybe_quit ()
@ -38,22 +37,21 @@ HACK: Honestly, this whole thing is a hack:
//BEGIN radare2 imports //BEGIN radare2 imports
#include "pdb_types.h" #include "pdb_types.h"
typedef void (*parse_stream_)(void *stream, R_STREAM_FILE *stream_file); typedef void (*parse_stream_) (void *stream, R_STREAM_FILE *stream_file);
typedef struct typedef struct {
{ int indx;
int indx; parse_stream_ parse_stream;
parse_stream_ parse_stream; void *stream;
void *stream; EStream type;
EStream type; free_func free;
free_func free; } SStreamParseFunc;
} SStreamParseFunc;
//END radare2 imports //END radare2 imports
static std::unique_ptr<R_PDB> static std::unique_ptr<R_PDB>
get_r_pdb (std::string path) get_r_pdb (const std::string & path)
{ {
R_PDB pdb = { 0 }; R_PDB pdb = {nullptr};
if (std::ifstream (path).good ()) if (std::ifstream (path).good ())
{ {
if (init_pdb_parser (&pdb, path.c_str ())) if (init_pdb_parser (&pdb, path.c_str ()))
@ -63,58 +61,61 @@ get_r_pdb (std::string path)
{ {
auto target = find_target_at (process_stratum); auto target = find_target_at (process_stratum);
void* buffer; void *buffer;
size_t length; size_t length;
{ //begin read PDB into buffer { //begin read PDB into buffer
int errno; int errno;
auto fd = target->fileio_open (nullptr, auto fd = target->fileio_open (nullptr,
path.c_str () + sizeof ("target:") - 1, path.c_str () + sizeof ("target:") - 1,
FILEIO_O_RDONLY, /* mode */ 0, /* warn_if_slow */ true, &errno); FILEIO_O_RDONLY,
/* mode */ 0,
/* warn_if_slow */ true,
&errno);
if (fd == -1) if (fd == -1)
{ {
return nullptr; return nullptr;
} }
struct stat st; struct stat st{};
if (target->fileio_fstat (fd, &st, &errno) == -1) if (target->fileio_fstat (fd, &st, &errno) == -1)
{ {
return nullptr; return nullptr;
} }
length = st.st_size; length = st.st_size;
buffer = xmalloc (length); buffer = xmalloc (length);
file_ptr pos = 0, bytes; file_ptr pos = 0, bytes;
while (length > pos) while (length > pos)
{ {
bytes = target->fileio_pread (fd, bytes = target->fileio_pread (fd,
(gdb_byte *) buffer + pos, (gdb_byte *) buffer + pos,
length - pos, length - pos,
pos, pos,
&errno); &errno);
if (bytes == 0) if (bytes == 0)
{ {
break; break;
} }
else if (bytes == -1) else if (bytes == -1)
{ {
xfree (buffer); xfree (buffer);
return nullptr; return nullptr;
} }
else else
{ {
pos += bytes; pos += bytes;
} }
} }
assert (pos == length); assert (pos == length);
target->fileio_close (fd, &errno); target->fileio_close (fd, &errno);
} //end read PDB into buffer } //end read PDB into buffer
auto r_buffer = r_buf_new_with_bytes ((const ut8*) buffer, length); auto r_buffer = r_buf_new_with_bytes ((const ut8 *) buffer, length);
if (init_pdb_parser_with_buf (&pdb, r_buffer)) if (init_pdb_parser_with_buf (&pdb, r_buffer))
{ {
xfree (buffer); xfree (buffer);
@ -136,12 +137,12 @@ get_pdb_path (struct objfile *objfile)
auto real_path = gdb_realpath (objfile->original_name); auto real_path = gdb_realpath (objfile->original_name);
auto pdb_path = std::regex_replace (std::string (real_path.get ()), auto pdb_path = std::regex_replace (std::string (real_path.get ()),
std::regex ("\\.[^.]*$"), ".pdb"); std::regex ("\\.[^.]*$"),
".pdb");
return pdb_path; return pdb_path;
} }
struct find_section_by_name_args struct find_section_by_name_args {
{
const char *name; const char *name;
asection **resultp; asection **resultp;
}; };
@ -149,17 +150,19 @@ struct find_section_by_name_args
static void static void
find_section_by_name_filter (bfd *abfd, asection *sect, void *obj) find_section_by_name_filter (bfd *abfd, asection *sect, void *obj)
{ {
struct find_section_by_name_args *args = (struct find_section_by_name_args *) obj; (void) abfd;
auto *args = (struct find_section_by_name_args *) obj;
if (strcmp (sect->name, args->name) == 0) if (strcmp (sect->name, args->name) == 0)
*args->resultp = sect; *args->resultp = sect;
} }
static struct bfd_section* static struct bfd_section *
section_by_name (const char* name, struct objfile *objfile) section_by_name (const char *name, struct objfile *objfile)
{ {
asection *sect = NULL; asection *sect = nullptr;
struct find_section_by_name_args args; struct find_section_by_name_args args{};
args.name = name; args.name = name;
args.resultp = &sect; args.resultp = &sect;
bfd_map_over_sections (objfile->obfd, find_section_by_name_filter, &args); bfd_map_over_sections (objfile->obfd, find_section_by_name_filter, &args);
@ -167,7 +170,7 @@ section_by_name (const char* name, struct objfile *objfile)
} }
void void
read_pdb (struct objfile *objfile, minimal_symbol_reader &reader) read_pdb (struct objfile *objfile, minimal_symbol_reader & reader)
{ {
auto pdb_path = get_pdb_path (objfile); auto pdb_path = get_pdb_path (objfile);
@ -176,13 +179,13 @@ read_pdb (struct objfile *objfile, minimal_symbol_reader &reader)
{ {
if (pdb->pdb_parse (pdb.get ())) if (pdb->pdb_parse (pdb.get ()))
{ {
SStreamParseFunc *omap = 0, *sctns = 0, *sctns_orig = 0, *gsym = 0, *tmp = 0; SStreamParseFunc *omap = nullptr, *sctns = nullptr, *sctns_orig = nullptr, *gsym = nullptr, *tmp;
SIMAGE_SECTION_HEADER *sctn_header = 0; SIMAGE_SECTION_HEADER *sctn_header;
SGDATAStream *gsym_data_stream = 0; SGDATAStream *gsym_data_stream;
SPEStream *pe_stream = 0; SPEStream *pe_stream = nullptr;
SGlobal *gdata = 0; SGlobal *gdata;
RListIter *it = 0; RListIter *it;
RList *l = 0; RList *l;
l = pdb->pdb_streams2; l = pdb->pdb_streams2;
it = r_list_iterator (l); it = r_list_iterator (l);
@ -191,20 +194,20 @@ read_pdb (struct objfile *objfile, minimal_symbol_reader &reader)
tmp = (SStreamParseFunc *) r_list_iter_get (it); tmp = (SStreamParseFunc *) r_list_iter_get (it);
switch (tmp->type) switch (tmp->type)
{ {
case ePDB_STREAM_SECT__HDR_ORIG: case ePDB_STREAM_SECT__HDR_ORIG:
sctns_orig = tmp; sctns_orig = tmp;
break; break;
case ePDB_STREAM_SECT_HDR: case ePDB_STREAM_SECT_HDR:
sctns = tmp; sctns = tmp;
break; break;
case ePDB_STREAM_OMAP_FROM_SRC: case ePDB_STREAM_OMAP_FROM_SRC:
omap = tmp; omap = tmp;
break; break;
case ePDB_STREAM_GSYM: case ePDB_STREAM_GSYM:
gsym = tmp; gsym = tmp;
break;
default:
break; break;
default:
break;
} }
} }
if (!gsym) if (!gsym)
@ -213,7 +216,7 @@ read_pdb (struct objfile *objfile, minimal_symbol_reader &reader)
return; return;
} }
gsym_data_stream = (SGDATAStream *) gsym->stream; gsym_data_stream = (SGDATAStream *) gsym->stream;
if ((omap != 0) && (sctns_orig != 0)) if ((omap != nullptr) && (sctns_orig != nullptr))
{ {
pe_stream = (SPEStream *) sctns_orig->stream; pe_stream = (SPEStream *) sctns_orig->stream;
} }
@ -226,7 +229,7 @@ read_pdb (struct objfile *objfile, minimal_symbol_reader &reader)
return; return;
} }
printf_filtered (_("Reading symbols from %s...\n"), pdb_path.c_str()); printf_filtered (_("Reading symbols from %s...\n"), pdb_path.c_str ());
//TODO: Use this. For now, we allocate the symtab so we don't print we found no symbols. //TODO: Use this. For now, we allocate the symtab so we don't print we found no symbols.
auto psymtab = allocate_psymtab (objfile->original_name, objfile); auto psymtab = allocate_psymtab (objfile->original_name, objfile);
@ -239,14 +242,15 @@ read_pdb (struct objfile *objfile, minimal_symbol_reader &reader)
sctn_header = (SIMAGE_SECTION_HEADER*) r_list_get_n (pe_stream->sections_hdrs, (gdata->segment - 1)); sctn_header = (SIMAGE_SECTION_HEADER*) r_list_get_n (pe_stream->sections_hdrs, (gdata->segment - 1));
if (sctn_header) if (sctn_header)
{ {
asection *sect = section_by_name(sctn_header->name, objfile); asection *sect = section_by_name (sctn_header->name, objfile);
auto section = sect ? sect->index : -1; auto section = sect ? sect->index : -1;
auto section_address = sect ? bfd_section_vma(sect) : 0; auto section_address = sect ? bfd_section_vma (sect) : 0;
auto address = section_address + gdata->offset; auto address = section_address + gdata->offset;
if (address == 0) continue; //we don't want to record unresolved symbols or something? if (address == 0)
auto type = mst_unknown; //FIXME continue; //we don't want to record unresolved symbols or something?
reader.record_with_info(gdata->name.name, address, type, section); auto type = mst_text; //FIXME
reader.record_with_info (gdata->name.name, address, type, section);
} }
} }
} }