/* Get information from a source line record returned by libdwfl.
   Copyright (C) 2005 Red Hat, Inc.

   This program is Open Source software; you can redistribute it and/or
   modify it under the terms of the Open Software License version 1.0 as
   published by the Open Source Initiative.

   You should have received a copy of the Open Software License along
   with this program; if not, you may obtain a copy of the Open Software
   License version 1.0 from http://www.opensource.org/licenses/osl.php or
   by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
   3001 King Ranch Road, Ukiah, CA 95482.   */

#include "libdwflP.h"
#include "../libdw/libdwP.h"

extern const char *
dwfl_lineinfo (Dwfl_Line *line, Dwarf_Addr *addr, int *linep, int *colp,
	       Dwarf_Word *mtime, Dwarf_Word *length)
{
  if (line == NULL)
    return NULL;

  struct dwfl_cu *cu = dwfl_linecu (line);
  const Dwarf_Line *info = &cu->die.cu->lines->info[line->idx];

  if (addr != NULL)
    *addr = info->addr - cu->mod->debug.bias;
  if (linep != NULL)
    *linep = info->line;
  if (colp != NULL)
    *colp = info->column;

  struct Dwarf_Fileinfo_s *file = &info->files->info[info->file];
  if (mtime != NULL)
    *mtime = file->mtime;
  if (length != NULL)
    *length = file->length;
  return file->name;
}
