Home | History | Annotate | Download | only in libdw
      1 /* Return DIE at given offset.
      2    Copyright (C) 2002, 2003 Red Hat, Inc.
      3    Written by Ulrich Drepper <drepper (at) redhat.com>, 2002.
      4 
      5    This program is Open Source software; you can redistribute it and/or
      6    modify it under the terms of the Open Software License version 1.0 as
      7    published by the Open Source Initiative.
      8 
      9    You should have received a copy of the Open Software License along
     10    with this program; if not, you may obtain a copy of the Open Software
     11    License version 1.0 from http://www.opensource.org/licenses/osl.php or
     12    by writing the Open Source Initiative c/o Lawrence Rosen, Esq.,
     13    3001 King Ranch Road, Ukiah, CA 95482.   */
     14 
     15 #ifdef HAVE_CONFIG_H
     16 # include <config.h>
     17 #endif
     18 
     19 #include <string.h>
     20 #include "libdwP.h"
     21 
     22 
     23 Dwarf_Die *
     24 dwarf_offdie (dbg, offset, result)
     25      Dwarf *dbg;
     26      Dwarf_Off offset;
     27      Dwarf_Die *result;
     28 {
     29   if (dbg == NULL)
     30     return NULL;
     31 
     32   if (offset >= dbg->sectiondata[IDX_debug_info]->d_size)
     33     {
     34       __libdw_seterrno (DWARF_E_INVALID_DWARF);
     35       return NULL;
     36     }
     37 
     38   /* Clear the entire DIE structure.  This signals we have not yet
     39      determined any of the information.  */
     40   memset (result, '\0', sizeof (Dwarf_Die));
     41 
     42   result->addr = (char *) dbg->sectiondata[IDX_debug_info]->d_buf + offset;
     43 
     44   /* Get the CU.  */
     45   result->cu = __libdw_findcu (dbg, offset);
     46   if (result->cu == NULL)
     47     {
     48       /* This should never happen.  The input file is malformed.  */
     49       __libdw_seterrno (DWARF_E_INVALID_DWARF);
     50       result = NULL;
     51     }
     52 
     53   return result;
     54 }
     55