//===-- Implementation file of do_start -----------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include "startup/linux/do_start.h"
#include "config/linux/app.h"
#include "hdr/elf_proxy.h"
#include "hdr/link_macros.h"
#include "hdr/pthread_macros.h"
#include "hdr/stdint_proxy.h"
#include "hdr/sys_auxv_macros.h"
#include "hdr/sys_mman_macros.h"
#include "hdr/types/struct_link_map.h"
#include "hdr/types/struct_r_debug.h"
#include "src/__support/OSUtil/linux/auxv.h"
#include "src/__support/OSUtil/linux/syscall_wrappers/exit_group.h"
#include "src/__support/OSUtil/syscall.h"
#include "src/__support/macros/config.h"
#include "src/__support/threads/linux/futex_utils.h"
#include "src/__support/threads/tcb.h"
#include "src/__support/threads/thread.h"
#include "src/errno/program_invocation_name.h"
#include "src/errno/program_invocation_short_name.h"
#include "src/link/_r_debug.h"
#include "src/stdlib/atexit.h"
#include "src/stdlib/exit.h"
#include "src/unistd/environ.h"
#include "startup/linux/gnu_property_section.h"
#include "startup/linux/irelative.h"
#include <sys/syscall.h>

extern "C" int main(int argc, char **argv, char **envp);

extern "C" {
// These arrays are present in the .init_array and .fini_array sections.
// The symbols are inserted by linker when it sees references to them.
extern uintptr_t __preinit_array_start[];
extern uintptr_t __preinit_array_end[];
extern uintptr_t __init_array_start[];
extern uintptr_t __init_array_end[];
extern uintptr_t __fini_array_start[];
extern uintptr_t __fini_array_end[];
// https://refspecs.linuxbase.org/elf/gabi4+/ch5.dynamic.html#dynamic_section
// This symbol is provided by the dynamic linker. It can be undefined depending
// on how the program is loaded exactly.
[[gnu::weak,
  gnu::visibility("hidden")]] extern const ElfW(Dyn) _DYNAMIC[]; // NOLINT

// Debuggers look for this function by name. Carefully consider any changes.
void _r_debug_state() { // NOLINT
  asm volatile("");
}
}

namespace LIBC_NAMESPACE_DECL {

static struct link_map main_map;

using InitCallback = void(int, char **, char **);
using FiniCallback = void(void);

static void call_init_array_callbacks(int argc, char **argv, char **env) {
  size_t preinit_array_size = __preinit_array_end - __preinit_array_start;
  for (size_t i = 0; i < preinit_array_size; ++i)
    reinterpret_cast<InitCallback *>(__preinit_array_start[i])(argc, argv, env);
  size_t init_array_size = __init_array_end - __init_array_start;
  for (size_t i = 0; i < init_array_size; ++i)
    reinterpret_cast<InitCallback *>(__init_array_start[i])(argc, argv, env);
}

static void call_fini_array_callbacks() {
  size_t fini_array_size = __fini_array_end - __fini_array_start;
  for (size_t i = fini_array_size; i > 0; --i)
    reinterpret_cast<FiniCallback *>(__fini_array_start[i - 1])();
}

static ThreadAttributes main_thread_attrib;
static Futex main_thread_clear_tid(1);
static TLSDescriptor tls;

[[noreturn]] void do_start() {
  auto tid = syscall_impl<long>(SYS_gettid);
  if (tid <= 0)
    linux_syscalls::exit_group(1);
  main_thread_attrib.tid = static_cast<int>(tid);
  main_thread_attrib.platform_data = &main_thread_clear_tid;
  main_thread_attrib.detach_state =
      static_cast<uint32_t>(DetachState::JOINABLE);
  syscall_impl<long>(SYS_set_tid_address, &main_thread_clear_tid.val);

  // After the argv array, is a 8-byte long NULL value before the array of env
  // values. The end of the env values is marked by another 8-byte long NULL
  // value. We step over it (the "+ 1" below) to get to the env values.
  uintptr_t *env_ptr = app.args->argv + app.args->argc + 1;
  uintptr_t *env_end_marker = env_ptr;
  app.env_ptr = env_ptr;
  while (*env_end_marker)
    ++env_end_marker;

  // Initialize the POSIX global declared in unistd.h
  environ = reinterpret_cast<char **>(env_ptr);

  if (app.args->argc > 0 && app.args->argv[0] != 0) {
    program_invocation_name = reinterpret_cast<char *>(app.args->argv[0]);
    program_invocation_short_name = program_invocation_name;
    for (char *p = program_invocation_name; *p != '\0'; ++p) {
      if (*p == '/')
        program_invocation_short_name = p + 1;
    }
  }

  // After the env array, is the aux-vector. The end of the aux-vector is
  // denoted by an AT_NULL entry.
  ElfW(Phdr) *program_hdr_table = nullptr;
  uintptr_t program_hdr_count = 0;
  unsigned long hwcap = 0;
  unsigned long hwcap2 = 0;
  const char *execfn = nullptr;
  auxv::Vector::initialize_unsafe(
      reinterpret_cast<const auxv::Entry *>(env_end_marker + 1));
  auxv::Vector auxvec;
  for (const auto &aux_entry : auxvec) {
    switch (aux_entry.type) {
    case AT_PHDR:
      program_hdr_table = reinterpret_cast<ElfW(Phdr) *>(aux_entry.val);
      break;
    case AT_PHNUM:
      program_hdr_count = aux_entry.val;
      break;
    case AT_PAGESZ:
      app.page_size = aux_entry.val;
      break;
    case AT_HWCAP:
      hwcap = aux_entry.val;
      break;
    case AT_HWCAP2:
      hwcap2 = aux_entry.val;
      break;
    case AT_EXECFN:
      execfn = reinterpret_cast<const char *>(aux_entry.val);
      break;
    default:
      break; // TODO: Read other useful entries from the aux vector.
    }
  }
  // AT_EXECFN is typically the last thing on the stack. Round it up to the
  // next page boundary.
  uintptr_t stack_addr =
      (reinterpret_cast<uintptr_t>(execfn) + app.page_size - 1) &
      ~(app.page_size - 1);
  main_thread_attrib.stack = reinterpret_cast<void *>(stack_addr);
  main_thread_attrib.stacksize = PTHREAD_STACK_DYNAMIC_NP;

  intptr_t base = 0;
  app.tls.size = 0;
  ElfW(Phdr) *tls_phdr = nullptr;
  [[maybe_unused]] ElfW(Phdr) *gnu_property_phdr = nullptr;

  for (uintptr_t i = 0; i < program_hdr_count; ++i) {
    ElfW(Phdr) &phdr = program_hdr_table[i];
    if (phdr.p_type == PT_PHDR)
      base = reinterpret_cast<intptr_t>(program_hdr_table) - phdr.p_vaddr;
    if (phdr.p_type == PT_DYNAMIC && _DYNAMIC)
      base = reinterpret_cast<intptr_t>(_DYNAMIC) - phdr.p_vaddr;
    if (phdr.p_type == PT_TLS)
      tls_phdr = &phdr;
    if (phdr.p_type == PT_GNU_PROPERTY)
      gnu_property_phdr = &phdr;
    // TODO: adjust PT_GNU_STACK
  }

  main_map.l_addr = base;
  main_map.l_name = const_cast<char *>("");
  main_map.l_ld = const_cast<ElfW(Dyn) *>(_DYNAMIC);
  main_map.l_next = nullptr;
  main_map.l_prev = nullptr;

  _r_debug.r_version = 1;
  _r_debug.r_map = &main_map;
  _r_debug.r_brk = reinterpret_cast<uintptr_t>(&_r_debug_state);
  _r_debug.r_state = RT_CONSISTENT;
  _r_debug.r_ldbase = base;

  // Process IRELATIVE relocations (ifunc resolvers).
  // Skips when no ifuncs are present in the binary.
  if (reinterpret_cast<uintptr_t>(__rela_iplt_start) !=
      reinterpret_cast<uintptr_t>(__rela_iplt_end))
    apply_irelative_relocs(base, hwcap, hwcap2);

  if (tls_phdr) {
    app.tls.address = tls_phdr->p_vaddr + base;
    app.tls.size = tls_phdr->p_memsz;
    app.tls.init_size = tls_phdr->p_filesz;
    app.tls.align = tls_phdr->p_align ? tls_phdr->p_align : 1;
  } else {
    app.tls.align = 1;
  }

  // This descriptor has to be static since its cleanup function cannot
  // capture the context.
  init_tls(tls);
  if (!set_thread_ptr(tls.tp))
    linux_syscalls::exit_group(1);

  get_tcb(tls.tp)->attrib = &main_thread_attrib;

  // We want the fini array callbacks to be run after other atexit
  // callbacks are run. So, we register them before running the init
  // array callbacks as they can potentially register their own atexit
  // callbacks.
  atexit(&call_fini_array_callbacks);

  call_init_array_callbacks(static_cast<int>(app.args->argc),
                            reinterpret_cast<char **>(app.args->argv),
                            reinterpret_cast<char **>(env_ptr));

  int retval = main(static_cast<int>(app.args->argc),
                    reinterpret_cast<char **>(app.args->argv),
                    reinterpret_cast<char **>(env_ptr));

  exit(retval);
}

} // namespace LIBC_NAMESPACE_DECL
