MCPcopy Create free account
hub / github.com/async-profiler/async-profiler / parseDynamicSection

Method parseDynamicSection

src/symbols_linux.cpp:359–454  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

357}
358
359void ElfParser::parseDynamicSection() {
360 ElfProgramHeader* dynamic = findProgramHeader(PT_DYNAMIC);
361 if (dynamic != NULL) {
362 const char* symtab = NULL;
363 const char* strtab = NULL;
364 char* jmprel = NULL;
365 char* rel = NULL;
366 size_t pltrelsz = 0;
367 size_t relsz = 0;
368 size_t relent = 0;
369 size_t relcount = 0;
370 size_t syment = 0;
371 uint32_t nsyms = 0;
372
373 const char* dyn_start = at(dynamic);
374 const char* dyn_end = dyn_start + dynamic->p_memsz;
375 for (ElfDyn* dyn = (ElfDyn*)dyn_start; dyn < (ElfDyn*)dyn_end; dyn++) {
376 switch (dyn->d_tag) {
377 case DT_SYMTAB:
378 symtab = dyn_ptr(dyn);
379 break;
380 case DT_STRTAB:
381 strtab = dyn_ptr(dyn);
382 break;
383 case DT_SYMENT:
384 syment = dyn->d_un.d_val;
385 break;
386 case DT_HASH:
387 nsyms = ((uint32_t*)dyn_ptr(dyn))[1];
388 break;
389 case DT_GNU_HASH:
390 if (nsyms == 0) {
391 nsyms = getSymbolCount((uint32_t*)dyn_ptr(dyn));
392 }
393 break;
394 case DT_JMPREL:
395 jmprel = dyn_ptr(dyn);
396 break;
397 case DT_PLTRELSZ:
398 pltrelsz = dyn->d_un.d_val;
399 break;
400 case DT_RELA:
401 case DT_REL:
402 rel = dyn_ptr(dyn);
403 break;
404 case DT_RELASZ:
405 case DT_RELSZ:
406 relsz = dyn->d_un.d_val;
407 break;
408 case DT_RELAENT:
409 case DT_RELENT:
410 relent = dyn->d_un.d_val;
411 break;
412 case DT_RELACOUNT:
413 case DT_RELCOUNT:
414 relcount = dyn->d_un.d_val;
415 break;
416 }

Callers 1

parseProgramHeadersMethod · 0.80

Calls 3

baseMethod · 0.95
hasDebugSymbolsMethod · 0.80
addImportMethod · 0.80

Tested by

no test coverage detected