Commit d149adbc authored by Pavel Emelyanov's avatar Pavel Emelyanov Committed by Andrei Vagin

vdso: Speed up /proc/pid/maps parse

This file is parsed on each start, it's nicer to make it
use bfd engine and save several syscalls and #PFs.
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
parent 1e1d0dde
......@@ -229,19 +229,28 @@ err:
static int vdso_parse_maps(pid_t pid, struct vdso_symtable *s)
{
int exit_code = -1;
char buf[512];
FILE *maps;
char *buf;
struct bfd f;
*s = (struct vdso_symtable)VDSO_SYMTABLE_INIT;
maps = fopen_proc(pid, "maps");
if (!maps)
f.fd = open_proc(pid, "maps");
if (f.fd < 0)
return -1;
while (fgets(buf, sizeof(buf), maps)) {
if (bfdopenr(&f))
goto err;
while (1) {
unsigned long start, end;
char *has_vdso, *has_vvar;
buf = breadline(&f);
if (buf == NULL)
break;
if (IS_ERR(buf))
goto err;
has_vdso = strstr(buf, "[vdso]");
if (!has_vdso)
has_vvar = strstr(buf, "[vvar]");
......@@ -275,7 +284,7 @@ static int vdso_parse_maps(pid_t pid, struct vdso_symtable *s)
exit_code = 0;
err:
fclose(maps);
bclose(&f);
return exit_code;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment