cregit-Linux how code gets into the kernel

Release 4.10 tools/testing/selftests/powerpc/tm/tm-exec.c

/*
 * Copyright 2016, Cyril Bur, IBM Corp.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 *
 * Syscalls can be performed provided the transactions are suspended.
 * The exec() class of syscall is unique as a new process is loaded.
 *
 * It makes little sense for after an exec() call for the previously
 * suspended transaction to still exist.
 */


#define _GNU_SOURCE
#include <errno.h>
#include <inttypes.h>
#include <libgen.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include "utils.h"
#include "tm.h"


static char *path;


static int test_exec(void) { SKIP_IF(!have_htm()); asm __volatile__( "tbegin.;" "blt 1f; " "tsuspend.;" "1: ;" : : : "memory"); execl(path, "tm-exec", "--child", NULL); /* Shouldn't get here */ perror("execl() failed"); return 1; }

Contributors

PersonTokensPropCommitsCommitProp
cyril burcyril bur38100.00%1100.00%
Total38100.00%1100.00%


static int after_exec(void) { asm __volatile__( "tbegin.;" "blt 1f;" "tsuspend.;" "1: ;" : : : "memory"); FAIL_IF(failure_is_nesting()); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
cyril burcyril bur20100.00%1100.00%
Total20100.00%1100.00%


int main(int argc, char *argv[]) { path = argv[0]; if (argc > 1 && strcmp(argv[1], "--child") == 0) return after_exec(); return test_harness(test_exec, "tm_exec"); }

Contributors

PersonTokensPropCommitsCommitProp
cyril burcyril bur50100.00%1100.00%
Total50100.00%1100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
cyril burcyril bur147100.00%1100.00%
Total147100.00%1100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.