alnyan/yggdrasil: add linker script for yggdrasil target
This commit is contained in:
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user