blob: d48d2132de1fc5e4a5121029d5efdb3a8c37df20 [file] [log] [blame]
Jordan Crouse9dac1b42008-05-20 20:10:49 +00001/*
2 * This file is part of the libpayload project.
3 *
4 * Copyright (C) 2008 Advanced Micro Devices, Inc.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
Jordan Crousedb8c0ab2008-11-24 17:54:46 +000030#include <libpayload-config.h>
Jordan Crouse9dac1b42008-05-20 20:10:49 +000031#include <libpayload.h>
32
Stefan Reinauer1b4d3942015-06-29 15:47:34 -070033#if IS_ENABLED(CONFIG_LP_ARCH_X86)
Jordan Crouse9dac1b42008-05-20 20:10:49 +000034extern void i386_do_exec(long addr, int argc, char **argv, int *ret);
35#endif
36
37/**
Uwe Hermann54ec0af2008-08-26 19:37:37 +000038 * Execute code in memory.
Jordan Crouse9dac1b42008-05-20 20:10:49 +000039 *
Uwe Hermann54ec0af2008-08-26 19:37:37 +000040 * @param addr TODO
41 * @param argc TODO
42 * @param argv TODO
43 * @return Return the return value from the entry point.
Jordan Crouse9dac1b42008-05-20 20:10:49 +000044 */
45int exec(long addr, int argc, char **argv)
46{
47 int val = -1;
48
Stefan Reinauer1b4d3942015-06-29 15:47:34 -070049#if IS_ENABLED(CONFIG_LP_ARCH_X86)
Jordan Crouse9dac1b42008-05-20 20:10:49 +000050 i386_do_exec(addr, argc, argv, &val);
51#endif
52 return val;
53}