// Copyright 2022, The Android Open Source Project
//
// 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.

//! Low-level compatibility layer between baremetal Rust and Bionic C functions.

use core::ffi::c_char;
use core::ffi::c_int;
use core::ffi::c_void;
use core::ffi::CStr;
use core::slice;
use core::str;

use crate::console;
use crate::cstr;
use crate::eprintln;
use crate::read_sysreg;

const EOF: c_int = -1;

/// Bionic thread-local storage.
#[repr(C)]
pub struct Tls {
    /// Unused.
    _unused: [u8; 40],
    /// Use by the compiler as stack canary value.
    pub stack_guard: u64,
}

/// Bionic TLS.
///
/// Provides the TLS used by Bionic code. This is unique as vmbase only supports one thread.
///
/// Note that the linker script re-exports __bionic_tls.stack_guard as __stack_chk_guard for
/// compatibility with non-Bionic LLVM.
#[link_section = ".data.stack_protector"]
#[export_name = "__bionic_tls"]
pub static mut TLS: Tls = Tls { _unused: [0; 40], stack_guard: 0 };

/// Gets a reference to the TLS from the dedicated system register.
pub fn __get_tls() -> &'static mut Tls {
    let tpidr = read_sysreg!("tpidr_el0");
    // SAFETY: The register is currently only written to once, from entry.S, with a valid value.
    unsafe { &mut *(tpidr as *mut Tls) }
}

#[no_mangle]
extern "C" fn __stack_chk_fail() -> ! {
    panic!("stack guard check failed");
}

/// Called from C to cause abnormal program termination.
#[no_mangle]
extern "C" fn abort() -> ! {
    panic!("C code called abort()")
}

/// Error number set and read by C functions.
pub static mut ERRNO: c_int = 0;

#[no_mangle]
unsafe extern "C" fn __errno() -> *mut c_int {
    // SAFETY: C functions which call this are only called from the main thread, not from exception
    // handlers.
    unsafe { &mut ERRNO as *mut _ }
}

fn set_errno(value: c_int) {
    // SAFETY: vmbase is currently single-threaded.
    unsafe { ERRNO = value };
}

fn get_errno() -> c_int {
    // SAFETY: vmbase is currently single-threaded.
    unsafe { ERRNO }
}

/// Reports a fatal error detected by Bionic.
///
/// # Safety
///
/// Input strings `prefix` and `format` must be valid and properly NUL-terminated.
///
/// # Note
///
/// This Rust functions is missing the last argument of its C/C++ counterpart, a va_list.
#[no_mangle]
unsafe extern "C" fn async_safe_fatal_va_list(prefix: *const c_char, format: *const c_char) {
    // SAFETY: The caller guaranteed that both strings were valid and NUL-terminated.
    let (prefix, format) = unsafe { (CStr::from_ptr(prefix), CStr::from_ptr(format)) };

    if let (Ok(prefix), Ok(format)) = (prefix.to_str(), format.to_str()) {
        // We don't bother with printf formatting.
        eprintln!("FATAL BIONIC ERROR: {prefix}: \"{format}\" (unformatted)");
    }
}

#[repr(usize)]
/// Arbitrary token FILE pseudo-pointers used by C to refer to the default streams.
enum File {
    Stdout = 0x7670cf00,
    Stderr = 0x9d118200,
}

impl TryFrom<usize> for File {
    type Error = &'static str;

    fn try_from(value: usize) -> Result<Self, Self::Error> {
        match value {
            x if x == File::Stdout as _ => Ok(File::Stdout),
            x if x == File::Stderr as _ => Ok(File::Stderr),
            _ => Err("Received Invalid FILE* from C"),
        }
    }
}

#[no_mangle]
static stdout: File = File::Stdout;
#[no_mangle]
static stderr: File = File::Stderr;

#[no_mangle]
extern "C" fn fputs(c_str: *const c_char, stream: usize) -> c_int {
    // SAFETY: Just like libc, we need to assume that `s` is a valid NULL-terminated string.
    let c_str = unsafe { CStr::from_ptr(c_str) };

    if let (Ok(s), Ok(_)) = (c_str.to_str(), File::try_from(stream)) {
        console::write_str(s);
        0
    } else {
        set_errno(EOF);
        EOF
    }
}

#[no_mangle]
extern "C" fn fwrite(ptr: *const c_void, size: usize, nmemb: usize, stream: usize) -> usize {
    let length = size.saturating_mul(nmemb);

    // SAFETY: Just like libc, we need to assume that `ptr` is valid.
    let bytes = unsafe { slice::from_raw_parts(ptr as *const u8, length) };

    if let (Ok(s), Ok(_)) = (str::from_utf8(bytes), File::try_from(stream)) {
        console::write_str(s);
        length
    } else {
        0
    }
}

#[no_mangle]
extern "C" fn strerror(n: c_int) -> *mut c_char {
    cstr_error(n).as_ptr().cast_mut().cast()
}

#[no_mangle]
extern "C" fn perror(s: *const c_char) {
    let prefix = if s.is_null() {
        None
    } else {
        // SAFETY: Just like libc, we need to assume that `s` is a valid NULL-terminated string.
        let c_str = unsafe { CStr::from_ptr(s) };
        // TODO(Rust 1.71): if c_str.is_empty() {
        if c_str.to_bytes().is_empty() {
            None
        } else {
            Some(c_str.to_str().unwrap())
        }
    };

    let error = cstr_error(get_errno()).to_str().unwrap();

    if let Some(prefix) = prefix {
        eprintln!("{prefix}: {error}");
    } else {
        eprintln!("{error}");
    }
}

fn cstr_error(n: c_int) -> &'static CStr {
    // Messages taken from errno(1).
    match n {
        0 => cstr!("Success"),
        1 => cstr!("Operation not permitted"),
        2 => cstr!("No such file or directory"),
        3 => cstr!("No such process"),
        4 => cstr!("Interrupted system call"),
        5 => cstr!("Input/output error"),
        6 => cstr!("No such device or address"),
        7 => cstr!("Argument list too long"),
        8 => cstr!("Exec format error"),
        9 => cstr!("Bad file descriptor"),
        10 => cstr!("No child processes"),
        11 => cstr!("Resource temporarily unavailable"),
        12 => cstr!("Cannot allocate memory"),
        13 => cstr!("Permission denied"),
        14 => cstr!("Bad address"),
        15 => cstr!("Block device required"),
        16 => cstr!("Device or resource busy"),
        17 => cstr!("File exists"),
        18 => cstr!("Invalid cross-device link"),
        19 => cstr!("No such device"),
        20 => cstr!("Not a directory"),
        21 => cstr!("Is a directory"),
        22 => cstr!("Invalid argument"),
        23 => cstr!("Too many open files in system"),
        24 => cstr!("Too many open files"),
        25 => cstr!("Inappropriate ioctl for device"),
        26 => cstr!("Text file busy"),
        27 => cstr!("File too large"),
        28 => cstr!("No space left on device"),
        29 => cstr!("Illegal seek"),
        30 => cstr!("Read-only file system"),
        31 => cstr!("Too many links"),
        32 => cstr!("Broken pipe"),
        33 => cstr!("Numerical argument out of domain"),
        34 => cstr!("Numerical result out of range"),
        35 => cstr!("Resource deadlock avoided"),
        36 => cstr!("File name too long"),
        37 => cstr!("No locks available"),
        38 => cstr!("Function not implemented"),
        39 => cstr!("Directory not empty"),
        40 => cstr!("Too many levels of symbolic links"),
        42 => cstr!("No message of desired type"),
        43 => cstr!("Identifier removed"),
        44 => cstr!("Channel number out of range"),
        45 => cstr!("Level 2 not synchronized"),
        46 => cstr!("Level 3 halted"),
        47 => cstr!("Level 3 reset"),
        48 => cstr!("Link number out of range"),
        49 => cstr!("Protocol driver not attached"),
        50 => cstr!("No CSI structure available"),
        51 => cstr!("Level 2 halted"),
        52 => cstr!("Invalid exchange"),
        53 => cstr!("Invalid request descriptor"),
        54 => cstr!("Exchange full"),
        55 => cstr!("No anode"),
        56 => cstr!("Invalid request code"),
        57 => cstr!("Invalid slot"),
        59 => cstr!("Bad font file format"),
        60 => cstr!("Device not a stream"),
        61 => cstr!("No data available"),
        62 => cstr!("Timer expired"),
        63 => cstr!("Out of streams resources"),
        64 => cstr!("Machine is not on the network"),
        65 => cstr!("Package not installed"),
        66 => cstr!("Object is remote"),
        67 => cstr!("Link has been severed"),
        68 => cstr!("Advertise error"),
        69 => cstr!("Srmount error"),
        70 => cstr!("Communication error on send"),
        71 => cstr!("Protocol error"),
        72 => cstr!("Multihop attempted"),
        73 => cstr!("RFS specific error"),
        74 => cstr!("Bad message"),
        75 => cstr!("Value too large for defined data type"),
        76 => cstr!("Name not unique on network"),
        77 => cstr!("File descriptor in bad state"),
        78 => cstr!("Remote address changed"),
        79 => cstr!("Can not access a needed shared library"),
        80 => cstr!("Accessing a corrupted shared library"),
        81 => cstr!(".lib section in a.out corrupted"),
        82 => cstr!("Attempting to link in too many shared libraries"),
        83 => cstr!("Cannot exec a shared library directly"),
        84 => cstr!("Invalid or incomplete multibyte or wide character"),
        85 => cstr!("Interrupted system call should be restarted"),
        86 => cstr!("Streams pipe error"),
        87 => cstr!("Too many users"),
        88 => cstr!("Socket operation on non-socket"),
        89 => cstr!("Destination address required"),
        90 => cstr!("Message too long"),
        91 => cstr!("Protocol wrong type for socket"),
        92 => cstr!("Protocol not available"),
        93 => cstr!("Protocol not supported"),
        94 => cstr!("Socket type not supported"),
        95 => cstr!("Operation not supported"),
        96 => cstr!("Protocol family not supported"),
        97 => cstr!("Address family not supported by protocol"),
        98 => cstr!("Address already in use"),
        99 => cstr!("Cannot assign requested address"),
        100 => cstr!("Network is down"),
        101 => cstr!("Network is unreachable"),
        102 => cstr!("Network dropped connection on reset"),
        103 => cstr!("Software caused connection abort"),
        104 => cstr!("Connection reset by peer"),
        105 => cstr!("No buffer space available"),
        106 => cstr!("Transport endpoint is already connected"),
        107 => cstr!("Transport endpoint is not connected"),
        108 => cstr!("Cannot send after transport endpoint shutdown"),
        109 => cstr!("Too many references: cannot splice"),
        110 => cstr!("Connection timed out"),
        111 => cstr!("Connection refused"),
        112 => cstr!("Host is down"),
        113 => cstr!("No route to host"),
        114 => cstr!("Operation already in progress"),
        115 => cstr!("Operation now in progress"),
        116 => cstr!("Stale file handle"),
        117 => cstr!("Structure needs cleaning"),
        118 => cstr!("Not a XENIX named type file"),
        119 => cstr!("No XENIX semaphores available"),
        120 => cstr!("Is a named type file"),
        121 => cstr!("Remote I/O error"),
        122 => cstr!("Disk quota exceeded"),
        123 => cstr!("No medium found"),
        124 => cstr!("Wrong medium type"),
        125 => cstr!("Operation canceled"),
        126 => cstr!("Required key not available"),
        127 => cstr!("Key has expired"),
        128 => cstr!("Key has been revoked"),
        129 => cstr!("Key was rejected by service"),
        130 => cstr!("Owner died"),
        131 => cstr!("State not recoverable"),
        132 => cstr!("Operation not possible due to RF-kill"),
        133 => cstr!("Memory page has hardware error"),
        _ => cstr!("Unknown errno value"),
    }
}
