// Copyright 2020 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "starboard/shared/pthread/thread_context_internal.h"

#if SB_API_VERSION >= 11

#if !defined(__gnu_linux__)  // Note: __linux__ is undef'd for Starboard builds.
#error "SbThreadContext is only implemented for Linux"
#endif

#if !(SB_IS_32_BIT || SB_IS_64_BIT)
#error "CPU architecture must be either 32-bit or 64-bit"
#endif

// UCLIBC pretends to be GLIBC.
#if (defined(__GLIBC__) || defined(__GNU_LIBRARY__)) && !defined(__UCLIBC__)
#define SB_IS_GLIBC 1
#else
#define SB_IS_GLIBC 0
#endif

SbThreadContextPrivate::SbThreadContextPrivate(ucontext_t* ucontext) {
  mcontext_t& mcontext = ucontext->uc_mcontext;

// TODO: Remove redundant #if checks when
//       SB_MINIMUM_API_VERSION >= SB_SABI_FILE_VERSION.
#if SB_IS_ARCH_X86 || SB_IS_ARCH_X64
#if SB_IS_64_BIT
  // 64-bit X86 (aka X64)
  ip_ = reinterpret_cast<void*>(mcontext.gregs[REG_RIP]);
  sp_ = reinterpret_cast<void*>(mcontext.gregs[REG_RSP]);
  fp_ = reinterpret_cast<void*>(mcontext.gregs[REG_RBP]);
#else
  // 32-bit X86
  ip_ = reinterpret_cast<void*>(mcontext.gregs[REG_EIP]);
  sp_ = reinterpret_cast<void*>(mcontext.gregs[REG_ESP]);
  fp_ = reinterpret_cast<void*>(mcontext.gregs[REG_EBP]);
#endif
#elif SB_IS_ARCH_ARM || SB_IS_ARCH_ARM64
#if SB_IS_64_BIT
  // 64-bit ARM
  ip_ = reinterpret_cast<void*>(mcontext.pc);
  sp_ = reinterpret_cast<void*>(mcontext.sp);
  fp_ = reinterpret_cast<void*>(mcontext.regs[29]);
#elif SB_IS_GLIBC && ((__GLIBC__ * 100 + __GLIBC_MINOR__) < 204)
  // 32-bit ARM w/ old GLIBC that used gregs[]
  ip_ = reinterpret_cast<void*>(mcontext.gregs[R15]);
  sp_ = reinterpret_cast<void*>(mcontext.gregs[R13]);
  fp_ = reinterpret_cast<void*>(mcontext.gregs[R11]);
#else
  // 32-bit ARM
  ip_ = reinterpret_cast<void*>(mcontext.arm_pc);
  sp_ = reinterpret_cast<void*>(mcontext.arm_sp);
  fp_ = reinterpret_cast<void*>(mcontext.arm_fp);
#endif
#elif SB_IS_ARCH_MIPS
  // MIPS
  ip_ = reinterpret_cast<void*>(mcontext.pc);
  sp_ = reinterpret_cast<void*>(mcontext.gregs[29]);
  fp_ = reinterpret_cast<void*>(mcontext.gregs[30]);
#else  // SB_IS_ARCH_XXX
#error "SbThreadContext isn't implemented for this CPU architecture"
#endif  // SB_IS_ARCH_XXX
}

#endif  // SB_API_VERSION >= 11
