Re: [PATCH 4/7] Use the loaded reader.

Tom Tromey
2011-08-15T20:21:14Z

>>>>> "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