alnyan/yggdrasil: add linker script for yggdrasil target

This commit is contained in:
2023-07-19 21:59:38 +03:00
parent ba03bb87b6
commit e137e6480a
3 changed files with 40 additions and 3 deletions
@@ -1,12 +1,15 @@
use crate::spec::{PanicStrategy, Target};
// Have specific requirements about how segments are aligned
const LINKER_SCRIPT: &str = include_str!("./aarch64_unknown_yggdrasil_linker_script.ld");
pub fn target() -> Target {
let mut base = super::yggdrasil_base::opts();
base.disable_redzone = true;
base.panic_strategy = PanicStrategy::Abort;
base.features = "-fp-armv8,-neon,+strict-align,+v8a".into();
base.add_pre_link_args(super::LinkerFlavor::Unix(super::Cc::No), &["--entry=runtime_entry"]);
base.link_script = Some(LINKER_SCRIPT.into());
Target {
llvm_target: "aarch64-unknown-none".into(),
@@ -0,0 +1,34 @@
OUTPUT_FORMAT(elf64-littleaarch64)
OUTPUT_ARCH(aarch64)
ENTRY(runtime_entry)
BASE_ADDR = 0x400000;
SECTIONS {
. = BASE_ADDR;
.text : {
*(.text*)
*(.plt*)
}
. = ALIGN(4K);
.rodata : {
*(.rodata*)
}
. = ALIGN(4K);
.data : {
*(.data*)
*(.got*)
}
. = ALIGN(4K);
.bss : {
*(COMMON)
*(.bss*)
}
}
@@ -1,13 +1,13 @@
use crate::spec::{Cc, LinkerFlavor, RelocModel, StackProbeType, TargetOptions};
use super::LldFlavor;
use super::{Lld, LldFlavor};
pub fn opts() -> TargetOptions {
TargetOptions {
os: "yggdrasil".into(),
executables: true,
linker: Some("ld.lld".into()),
linker_flavor: LinkerFlavor::Unix(Cc::No),
linker_flavor: LinkerFlavor::Gnu(Cc::No, Lld::Yes),
lld_flavor_json: LldFlavor::Ld,
stack_probes: StackProbeType::Inline,
max_atomic_width: Some(128),