Skip to content

Commit

Permalink
selftests/powerpc: Add a routine for retrieving an AUXV entry
Browse files Browse the repository at this point in the history
Signed-off-by: Michael Ellerman <[email protected]>
Signed-off-by: Benjamin Herrenschmidt <[email protected]>
  • Loading branch information
mpe authored and ozbenh committed Jul 28, 2014
1 parent 985ac68 commit bd8bbd8
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
48 changes: 48 additions & 0 deletions tools/testing/selftests/powerpc/pmu/lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,15 @@

#define _GNU_SOURCE /* For CPU_ZERO etc. */

#include <elf.h>
#include <errno.h>
#include <fcntl.h>
#include <link.h>
#include <sched.h>
#include <setjmp.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>

#include "utils.h"
Expand Down Expand Up @@ -250,3 +255,46 @@ bool require_paranoia_below(int level)
out:
return rc;
}

static char auxv[4096];

void *get_auxv_entry(int type)
{
ElfW(auxv_t) *p;
void *result;
ssize_t num;
int fd;

fd = open("/proc/self/auxv", O_RDONLY);
if (fd == -1) {
perror("open");
return NULL;
}

result = NULL;

num = read(fd, auxv, sizeof(auxv));
if (num < 0) {
perror("read");
goto out;
}

if (num > sizeof(auxv)) {
printf("Overflowed auxv buffer\n");
goto out;
}

p = (ElfW(auxv_t) *)auxv;

while (p->a_type != AT_NULL) {
if (p->a_type == type) {
result = (void *)p->a_un.a_val;
break;
}

p++;
}
out:
close(fd);
return result;
}
1 change: 1 addition & 0 deletions tools/testing/selftests/powerpc/pmu/lib.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ extern int notify_parent(union pipe write_pipe);
extern int notify_parent_of_error(union pipe write_pipe);
extern pid_t eat_cpu(int (test_function)(void));
extern bool require_paranoia_below(int level);
extern void *get_auxv_entry(int type);

struct addr_range {
uint64_t first, last;
Expand Down

0 comments on commit bd8bbd8

Please sign in to comment.