This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 4/7] Use the loaded reader.
>>>>> "Sanjoy" == Sanjoy Das <sanjoy@playingwithpointers.com> writes:
Sanjoy> Invoke the loaded JIT debug info reader to parse the registered symbol
Sanjoy> files.
Thanks.
Sanjoy> +/* Remember a mapping from entry_addr to objfile. */
Sanjoy> +static void
Sanjoy> +add_objfile_entry (struct objfile *objfile, CORE_ADDR entry)
Sanjoy> +{
Sanjoy> + CORE_ADDR *entry_addr_ptr;
Sanjoy> +
Sanjoy> + entry_addr_ptr = xmalloc (sizeof (CORE_ADDR));
Sanjoy> + *entry_addr_ptr = entry;
Sanjoy> + set_objfile_data (objfile, jit_objfile_data, entry_addr_ptr);
Sanjoy> +}
Sanjoy> +/* Returns true if the block corrensponding to old should be placed
Typo, "corresponding".
Sanjoy> +static struct gdb_block *
Sanjoy> +jit_block_open_impl (struct gdb_symbol_callbacks *cb, struct gdb_symtab *symtab,
This line is too long.
Every new function should have some kind of introductory comment. There
should be a blank line between the comment and the start of the
function.
Sanjoy> static void
Sanjoy> -jit_register_code (struct gdbarch *gdbarch,
Sanjoy> - CORE_ADDR entry_addr, struct jit_code_entry *code_entry)
Sanjoy> +jit_symtab_line_mapping_add_impl (struct gdb_symbol_callbacks *cb,
Sanjoy> + struct gdb_symtab *stab, int nlines,
Sanjoy> + struct gdb_line_mapping *map)
Sanjoy> +{
Sanjoy> + int i;
Sanjoy> + if (!nlines)
Blank line between declarations and code.
For safety this check should probably be 'if (nlines < 1)'.
Sanjoy> + stab->linetable = xmalloc (sizeof (struct linetable) + (nlines - 1) *
Sanjoy> + sizeof (struct linetable_entry));
Break before "*", not after it. This is a GNU style thing.
Personally I'd prefer a break before the "+" instead.
Sanjoy> +static void
Sanjoy> +jit_symtab_close_impl (struct gdb_symbol_callbacks *cb, struct gdb_symtab *stab)
Line too long.
Sanjoy> + int actual_nblocks = FIRST_LOCAL_BLOCK + stab->nblocks, i, blockvector_size;
Line too long.
Sanjoy> + int size = (stab->linetable->nitems - 1) *
Sanjoy> + sizeof (struct linetable_entry) + sizeof (struct linetable);
Line breaks before operators.
According to GNU style you have to parenthesize the RHS here, and
further indent the second line.
Sanjoy> + blockvector_size = (sizeof (struct blockvector) +
Sanjoy> + (actual_nblocks - 1) * sizeof (struct block *));
... like this :-)
Sanjoy> + block_name->symtab = symtab;
You can use SYMBOL_SYMTAB here.
Sanjoy> + block_name->ginfo.name = obstack_alloc (&objfile->objfile_obstack, 1 +
Sanjoy> + strlen (gdb_block_iter->name));
I think it needs to be strlen() + 1 -- but you can just use obsavestring
instead.
Sanjoy> +/* Convert OBJ to a proper objfile. */
Sanjoy> +static void
Sanjoy> +jit_object_close_impl (struct gdb_symbol_callbacks *cb, struct gdb_object *obj)
Line too long.
Sanjoy> + objfile->msymbols = obstack_alloc (&objfile->objfile_obstack,
Sanjoy> + sizeof (struct minimal_symbol));
Sanjoy> + objfile->msymbols[0].ginfo.name = NULL;
Sanjoy> + objfile->msymbols[0].ginfo.value.address = 0;
A little surprising maybe, but I guess it is ok.
Sanjoy> + objfile->name = xstrdup ("JIT");
You have to xfree the old name first.
Sanjoy> static void
Sanjoy> jit_unregister_code (struct objfile *objfile)
Sanjoy> {
Sanjoy> + xfree (objfile_data (objfile, jit_objfile_data));
Sanjoy> free_objfile (objfile);
Sanjoy> }
I think a better fix for this problem would be to change the
initialization of jit_objfile_data to use register_objfile_data_with_cleanup.
Tom