//===-- sanitizer_freebsd.h -------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file is a part of Sanitizer runtime. It contains FreeBSD-specific
// definitions.
//
//===----------------------------------------------------------------------===//

#ifndef SANITIZER_FREEBSD_H
#define SANITIZER_FREEBSD_H

#include "sanitizer_internal_defs.h"

// x86-64 FreeBSD 9.2 and older define 'ucontext_t' incorrectly in
// 32-bit mode.
#if SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32)
# include <osreldate.h>
# if __FreeBSD_version <= 902001  // v9.2
#  include <link.h>
#  include <sys/param.h>
#  include <ucontext.h>

namespace __sanitizer {

typedef unsigned long long __xuint64_t;

typedef __int32_t __xregister_t;

typedef struct __xmcontext {
  __xregister_t mc_onstack;
  __xregister_t mc_gs;
  __xregister_t mc_fs;
  __xregister_t mc_es;
  __xregister_t mc_ds;
  __xregister_t mc_edi;
  __xregister_t mc_esi;
  __xregister_t mc_ebp;
  __xregister_t mc_isp;
  __xregister_t mc_ebx;
  __xregister_t mc_edx;
  __xregister_t mc_ecx;
  __xregister_t mc_eax;
  __xregister_t mc_trapno;
  __xregister_t mc_err;
  __xregister_t mc_eip;
  __xregister_t mc_cs;
  __xregister_t mc_eflags;
  __xregister_t mc_esp;
  __xregister_t mc_ss;

  int mc_len;
  int mc_fpformat;
  int mc_ownedfp;
  __xregister_t mc_flags;

  int mc_fpstate[128] __aligned(16);
  __xregister_t mc_fsbase;
  __xregister_t mc_gsbase;
  __xregister_t mc_xfpustate;
  __xregister_t mc_xfpustate_len;

  int mc_spare2[4];
} xmcontext_t;

typedef struct __xucontext {
  sigset_t  uc_sigmask;
  xmcontext_t  uc_mcontext;

  struct __ucontext *uc_link;
  stack_t uc_stack;
  int uc_flags;
  int __spare__[4];
} xucontext_t;

struct xkinfo_vmentry {
  int kve_structsize;
  int kve_type;
  __xuint64_t kve_start;
  __xuint64_t kve_end;
  __xuint64_t kve_offset;
  __xuint64_t kve_vn_fileid;
  __uint32_t kve_vn_fsid;
  int kve_flags;
  int kve_resident;
  int kve_private_resident;
  int kve_protection;
  int kve_ref_count;
  int kve_shadow_count;
  int kve_vn_type;
  __xuint64_t kve_vn_size;
  __uint32_t kve_vn_rdev;
  __uint16_t kve_vn_mode;
  __uint16_t kve_status;
  int _kve_ispare[12];
  char kve_path[PATH_MAX];
};

typedef struct {
  __uint32_t p_type;
  __uint32_t p_offset;
  __uint32_t p_vaddr;
  __uint32_t p_paddr;
  __uint32_t p_filesz;
  __uint32_t p_memsz;
  __uint32_t p_flags;
  __uint32_t p_align;
} XElf32_Phdr;

struct xdl_phdr_info {
  Elf_Addr dlpi_addr;
  const char *dlpi_name;
  const XElf32_Phdr *dlpi_phdr;
  Elf_Half dlpi_phnum;
  unsigned long long int dlpi_adds;
  unsigned long long int dlpi_subs;
  size_t dlpi_tls_modid;
  void *dlpi_tls_data;
};

typedef int (*__xdl_iterate_hdr_callback)(struct xdl_phdr_info*, size_t, void*);
typedef int xdl_iterate_phdr_t(__xdl_iterate_hdr_callback, void*);

#define xdl_iterate_phdr(callback, param) \
  (((xdl_iterate_phdr_t*) dl_iterate_phdr)((callback), (param)))

}  // namespace __sanitizer

# endif  // __FreeBSD_version <= 902001
#endif  // SANITIZER_FREEBSD && (SANITIZER_WORDSIZE == 32)

#endif  // SANITIZER_FREEBSD_H
