ReactOS 0.4.15-dev-7918-g2a2556c
dwarfpubnames.c
Go to the documentation of this file.
1
2#include <ntddk.h>
3#include <reactos/rossym.h>
4#include <ntimage.h>
5
6#define NDEBUG
7#include <debug.h>
8
9#include "dwarf.h"
10
11static int
13{
14 int vers;
15 ulong len, unit, off;
16 uchar *next;
17 char *str;
18 DwarfBuf b;
19
20 b.d = d;
21 b.p = bl->data;
22 b.ep = b.p + bl->len;
23
24 while(b.p < b.ep){
25 len = dwarfget4(&b);
26 if(len > b.ep-b.p){
27 werrstr("bad length in dwarf name header");
28 return -1;
29 }
30 next = b.p + len;
31 vers = dwarfget2(&b);
32 if(vers != 1 && vers != 2){
33 werrstr("bad version %d in dwarf name header", vers);
34 return -1;
35 }
36 unit = dwarfget4(&b);
37 dwarfget4(&b); /* unit length */
38 while(b.p < next){
39 off = dwarfget4(&b);
40 if(off == 0)
41 break;
43 if(strcmp(str, name) == 0){
44 if(dwarfenumunit(d, unit, s) < 0)
45 return -1;
46 if(unit + off >= s->b.ep - d->info.data){
47 werrstr("bad offset in name entry");
48 return -1;
49 }
50 s->b.p = d->info.data + unit + off;
51 if(dwarfnextsym(d, s) < 0)
52 return -1;
53 if(s->attrs.name==nil || strcmp(s->attrs.name, name)!=0){
54 werrstr("unexpected name %#q in lookup for %#q", s->attrs.name, name);
55 return -1;
56 }
57 return 0;
58 }
59 }
60 b.p = next;
61 }
62 werrstr("unknown name '%s'", name);
63 return -1;
64}
65
66int
68{
69 return _dwarfnametounit(d, name, &d->pubnames, sym);
70}
71
72/*
73
74int
75dwarflookuptype(Dwarf *d, char *name, DwarfSym *sym)
76{
77 return _dwarfnametounit(d, name, &d->pubtypes, sym);
78}
79
80 */
81
unsigned char uchar
Definition: Unfrag.h:59
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
unsigned long ulong
Definition: linux.h:275
GLdouble s
Definition: gl.h:2039
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLenum GLsizei len
Definition: glext.h:6722
#define d
Definition: ke_i.h:81
#define b
Definition: ke_i.h:79
png_const_structrp png_const_inforp int * unit
Definition: png.h:2159
static unsigned __int64 next
Definition: rand_nt.c:6
static int _dwarfnametounit(Dwarf *d, char *name, DwarfBlock *bl, DwarfSym *s)
Definition: dwarfpubnames.c:12
int dwarflookupname(Dwarf *d, char *name, DwarfSym *sym)
Definition: dwarfpubnames.c:67
const WCHAR * str
#define werrstr(str,...)
Definition: compat.h:34
#define nil
Definition: compat.h:23
ulong dwarfget2(DwarfBuf *)
Definition: dwarfget.c:81
int dwarfenumunit(Dwarf *, ulong, DwarfSym *)
Definition: dwarfinfo.c:201
char * dwarfgetstring(DwarfBuf *)
Definition: dwarfget.c:54
int dwarfnextsym(Dwarf *, DwarfSym *)
Definition: dwarfinfo.c:250
ulong dwarfget4(DwarfBuf *)
Definition: dwarfget.c:95
uchar * data
Definition: dwarf.h:202
ulong len
Definition: dwarf.h:203
Definition: dwarf.h:437
Definition: name.c:39