/*
 * Semihosting Stubs for SoftMMU
 *
 * Copyright (c) 2019 Linaro Ltd
 *
 * Stubs for SoftMMU targets that don't actually do semihosting.
 *
 * SPDX-License-Identifier: GPL-2.0-or-later
 */

#include "qemu/osdep.h"
#include "qemu/option.h"
#include "qemu/error-report.h"
#include "semihosting/semihost.h"

/* Empty config */
QemuOptsList qemu_semihosting_config_opts = {
    .name = "",
    .head = QTAILQ_HEAD_INITIALIZER(qemu_semihosting_config_opts.head),
    .desc = {
        { /* end of list */ }
    },
};

/* Queries to config status default to off */
bool semihosting_enabled(bool is_user)
{
    return false;
}

SemihostingTarget semihosting_get_target(void)
{
    return SEMIHOSTING_TARGET_AUTO;
}

/*
 * All the rest are empty subs. We could g_assert_not_reached() but
 * that adds extra weight to the final binary. Waste not want not.
 */
void qemu_semihosting_enable(void)
{
}

int qemu_semihosting_config_options(const char *optarg)
{
    return 1;
}

const char *semihosting_get_arg(int i)
{
    return NULL;
}

int semihosting_get_argc(void)
{
    return 0;
}

const char *semihosting_get_cmdline(void)
{
    return NULL;
}

void semihosting_arg_fallback(const char *file, const char *cmd)
{
}

void qemu_semihosting_chardev_init(void)
{
}
