87b0dbab2d
This change adds enough functionality to compile hello world from S-expressions in a contrived way. It fails to handle this input realistically in several ways. 1) It assumes the existence of dart:core::print 2) It handles all dart values as C strings 3) It assumes only very static calls can be made with no named arguments 4) If a stack overflow is detected it just traps. 5) I'm not sure how the current dart runtime works but the contrived runtime used here puts a contrived thread object in `gs`. This change adds a basic framework for implementing new instructions that should make it possible to implement new instructions with much smaller changes however. Change-Id: Ic167a29908a875bfc234c4e9bf5f4ac2ff52a3a2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117222 Commit-Queue: Jake Ehrlich <jakehehrlich@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
39 lines
738 B
ArmAsm
39 lines
738 B
ArmAsm
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
.data
|
|
|
|
.type _threadObject,@object
|
|
.size _threadObject,1400
|
|
_threadObject:
|
|
.fill 1400
|
|
|
|
.text
|
|
.file "runtime.S"
|
|
|
|
.globl main
|
|
.type main,@function
|
|
|
|
.globl "dart:core::print"
|
|
.type "dart:core::print",@function
|
|
|
|
.globl arch_prctl
|
|
.type arch_prctl,@function
|
|
|
|
main:
|
|
movq %rsp, %rax
|
|
subq $0x1000, %rax
|
|
movq %rax, [_threadObject + 72]
|
|
# Pass ARCH_SET_GS
|
|
movq $0x1001, %rdi
|
|
# Pass $_threadObject
|
|
movq $_threadObject, %rsi
|
|
callq arch_prctl
|
|
callq "hello.dart::main"
|
|
ret
|
|
|
|
"dart:core::print":
|
|
callq puts
|
|
ret
|