Skip to content

Commit

Permalink
selftests/powerpc: Move get_auxv_entry() into utils.c
Browse files Browse the repository at this point in the history
This doesn't really belong in harness.c, it's a helper function. So move
it into utils.c.

Signed-off-by: Michael Ellerman <[email protected]>
  • Loading branch information
mpe committed Dec 14, 2015
1 parent 1901d8b commit fcb45ec
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 45 deletions.
43 changes: 0 additions & 43 deletions tools/testing/selftests/powerpc/harness.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
2 changes: 2 additions & 0 deletions tools/testing/selftests/powerpc/pmu/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
3 changes: 2 additions & 1 deletion tools/testing/selftests/powerpc/pmu/ebb/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/powerpc/tm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
58 changes: 58 additions & 0 deletions tools/testing/selftests/powerpc/utils.c
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit fcb45ec

Please sign in to comment.