// -*- 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
//
//===----------------------------------------------------------------------===//

// REQUIRES: target={{aarch64-.+}}
// UNSUPPORTED: target={{.*-windows.*}}

// Basic test for float registers number are accepted.

#include <stdlib.h>
#include <string.h>
#include <unwind.h>

// Using __attribute__((section("main_func"))) is ELF specific, but then
// this entire test is marked as requiring Linux, so we should be good.
//
// We don't use dladdr() because on musl it's a no-op when statically linked.
extern char __start_main_func;
extern char __stop_main_func;

_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
  (void)arg;

  // Unwind until the main is reached, above frames depend on the platform and
  // architecture.
  uintptr_t ip = _Unwind_GetIP(ctx);
  if (ip >= (uintptr_t)&__start_main_func &&
      ip < (uintptr_t)&__stop_main_func) {
    _Exit(0);
  }

  return _URC_NO_REASON;
}

__attribute__((noinline)) void foo() {
  // Provide some CFI directives that instructs the unwinder where given
  // float register is.
#if defined(__aarch64__)
  // DWARF register number for V0-V31 registers are 64-95.
  // Previous value of V0 is saved at offset 0 from CFA.
  asm volatile(".cfi_offset 64, 0");
  // From now on the previous value of register can't be restored anymore.
  asm volatile(".cfi_undefined 65");
  asm volatile(".cfi_undefined 95");
  // Previous value of V2 is in V30.
  asm volatile(".cfi_register  66, 94");
#endif
  _Unwind_Backtrace(frame_handler, NULL);
}

__attribute__((section("main_func"))) int main(int, char **) {
  foo();
  return -2;
}
