Commit fcb45ec0 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

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: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 1901d8bb
Loading
Loading
Loading
Loading
+0 −43
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
@@ -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)
+2 −1
Original line number Diff line number Diff line
@@ -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

+1 −1
Original line number Diff line number Diff line
@@ -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 −0
Original line number Diff line number Diff line
/*
 * 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;
}