Bug Summary

File:src/ldso/dl_iterate_phdr.c
Location:line 19, column 8
Description:Assigned value is garbage or undefined

Annotated Source Code

1#include <elf.h>
2#include <link.h>
3#include "libc.h"
4
5#define AUX_CNT38 38
6
7static int static_dl_iterate_phdr(int(*callback)(struct dl_phdr_info *info, size_t size, void *data), void *data)
8{
9 unsigned char *p;
10 ElfW(Phdr)Elf32_Phdr *phdr, *tls_phdr=0;
11 size_t base = 0;
12 size_t n;
13 struct dl_phdr_info info;
14 size_t i, aux[AUX_CNT38];
15
16 for (i=0; libc__libc.auxv[i]; i+=2)
1
Loop condition is false. Execution continues on line 19
17 if (libc__libc.auxv[i]<AUX_CNT38) aux[libc__libc.auxv[i]] = libc__libc.auxv[i+1];
18
19 for (p=(void *)aux[AT_PHDR3],n=aux[AT_PHNUM5]; n; n--,p+=aux[AT_PHENT4]) {
2
Assigned value is garbage or undefined
20 phdr = (void *)p;
21 if (phdr->p_type == PT_PHDR6)
22 base = aux[AT_PHDR3] - phdr->p_vaddr;
23 if (phdr->p_type == PT_TLS7)
24 tls_phdr = phdr;
25 }
26 info.dlpi_addr = base;
27 info.dlpi_name = "/proc/self/exe";
28 info.dlpi_phdr = (void *)aux[AT_PHDR3];
29 info.dlpi_phnum = aux[AT_PHNUM5];
30 info.dlpi_adds = 0;
31 info.dlpi_subs = 0;
32 if (tls_phdr) {
33 info.dlpi_tls_modid = 1;
34 info.dlpi_tls_data = (void *)(base + tls_phdr->p_vaddr);
35 } else {
36 info.dlpi_tls_modid = 0;
37 info.dlpi_tls_data = 0;
38 }
39 return (callback)(&info, sizeof (info), data);
40}
41
42weak_alias(static_dl_iterate_phdr, dl_iterate_phdr)extern __typeof(static_dl_iterate_phdr) dl_iterate_phdr __attribute__
((weak, alias("static_dl_iterate_phdr")))
;