/* Copyright (C) 2009-2021 Free Software Foundation, Inc.

   This file is part of GDB.

   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 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifndef JITHOST_H
#define JITHOST_H

struct jithost_abi_bounds
{
  const char *begin, *end;
};

struct jithost_abi
{
  /* Beginning and past-the-end for the whole object. */
  struct jithost_abi_bounds object;

  /* Beginning and past-the-end for function_stack_mangle.  */
  struct jithost_abi_bounds function_stack_mangle;

  /* Beginning and past-the-end for function_add.  */
  struct jithost_abi_bounds function_add;
};

#endif /* JITHOST_H */
