selftests/powerpc: Move get_auxv_entry() into utils.c
This doesn't really belong in harness.c, it's a helper function. So move it into utils.c. Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
1901d8bb45
commit
fcb45ec074
5 changed files with 63 additions and 45 deletions
|
@ -116,46 +116,3 @@ int test_harness(int (test_function)(void), char *name)
|
|||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@ $(TEST_PROGS): $(EXTRA_SOURCES)
|
|||
count_instructions: loop.S count_instructions.c $(EXTRA_SOURCES)
|
||||
$(CC) $(CFLAGS) -m64 -o $@ $^
|
||||
|
||||
per_event_excludes: ../utils.c
|
||||
|
||||
include ../../lib.mk
|
||||
|
||||
DEFAULT_RUN_TESTS := $(RUN_TESTS)
|
||||
|
|
|
@ -18,7 +18,8 @@ TEST_PROGS := reg_access_test event_attributes_test cycles_test \
|
|||
|
||||
all: $(TEST_PROGS)
|
||||
|
||||
$(TEST_PROGS): ../../harness.c ../event.c ../lib.c ebb.c ebb_handler.S trace.c busy_loop.S
|
||||
$(TEST_PROGS): ../../harness.c ../../utils.c ../event.c ../lib.c \
|
||||
ebb.c ebb_handler.S trace.c busy_loop.S
|
||||
|
||||
instruction_count_test: ../loop.S
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ all: $(TEST_PROGS)
|
|||
|
||||
$(TEST_PROGS): ../harness.c
|
||||
|
||||
tm-syscall: tm-syscall-asm.S
|
||||
tm-syscall: tm-syscall-asm.S ../utils.c
|
||||
tm-syscall: CFLAGS += -mhtm -I../../../../../usr/include
|
||||
|
||||
include ../../lib.mk
|
||||
|
|
58
tools/testing/selftests/powerpc/utils.c
Normal file
58
tools/testing/selftests/powerpc/utils.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright 2013-2015, Michael Ellerman, IBM Corp.
|
||||
* Licensed under GPLv2.
|
||||
*/
|
||||
|
||||
#include <elf.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <link.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
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;
|
||||
}
|
Loading…
Reference in a new issue