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:
Michael Ellerman 2015-11-24 13:05:38 +11:00
parent 1901d8bb45
commit fcb45ec074
5 changed files with 63 additions and 45 deletions

View file

@ -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;
}

View file

@ -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)

View file

@ -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

View file

@ -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

View 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;
}