4ea512b4c1
The LLVM code generator should only consume the serialized IR and not use any other VM functionality.
This CL adds a custom zone which can be used for the deserialized IR nodes and removes any
Dart_SetVMFlags/Dart_Initialize/ApiZone/... calls.
This works with the existing example:
% ninja -C out/ReleaseX64 codegen
% out/ReleaseX64/codegen runtime/llvm_codegen/test/codegen/Inputs/hello.sex
...
define void @"hello.dart::main"() {
B1:
%0 = call i8* @llvm.stacksave()
%1 = ptrtoint i8* %0 to i64
%2 = load i64, i64 addrspace(256)* inttoptr (i64 72 to i64 addrspace(256)*)
%3 = icmp ult i64 %1, %2
br i1 %3, label %4, label %5
...
ret void
}
...
Change-Id: I1d07ba6bc122d100c73f97cfa961d36240489666
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120792
Commit-Queue: Martin Kustermann <kustermann@google.com>
Auto-Submit: Martin Kustermann <kustermann@google.com>
Reviewed-by: Teagan Strickland <sstrickl@google.com>
55 lines
1.5 KiB
C++
55 lines
1.5 KiB
C++
// 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.
|
|
|
|
#include "custom_zone.h"
|
|
|
|
#include "platform/text_buffer.h"
|
|
#include "platform/unicode.h"
|
|
#include "platform/utils.h"
|
|
#include "vm/double_conversion.h"
|
|
#include "vm/os.h"
|
|
|
|
#include "platform/assert.cc" // NOLINT
|
|
#include "platform/syslog_linux.cc" // NOLINT
|
|
#include "platform/text_buffer.cc" // NOLINT
|
|
#include "platform/unicode.cc" // NOLINT
|
|
#include "platform/utils.cc" // NOLINT
|
|
#include "platform/utils_linux.cc" // NOLINT
|
|
#include "vm/compiler/backend/sexpression.cc" // NOLINT
|
|
#include "vm/double_conversion.cc" // NOLINT
|
|
#include "vm/flags.cc" // NOLINT
|
|
#include "vm/os_linux.cc" // NOLINT
|
|
#include "vm/zone_text_buffer.cc" // NOLINT
|
|
|
|
namespace dart {
|
|
|
|
void* ZoneAllocated::operator new(uintptr_t size, dart::Zone* zone) {
|
|
return reinterpret_cast<void*>(zone->AllocUnsafe(size));
|
|
}
|
|
|
|
Zone::~Zone() {
|
|
while (buffers_.size() > 0) {
|
|
free(buffers_.back());
|
|
buffers_.pop_back();
|
|
}
|
|
}
|
|
|
|
void* Zone::AllocUnsafe(intptr_t size) {
|
|
void* memory = malloc(size);
|
|
buffers_.push_back(memory);
|
|
return memory;
|
|
}
|
|
|
|
DART_EXPORT void Dart_PrepareToAbort() {
|
|
fprintf(stderr, "Dart_PrepareToAbort() not implemented!\n");
|
|
exit(1);
|
|
}
|
|
|
|
DART_EXPORT void Dart_DumpNativeStackTrace(void* context) {
|
|
fprintf(stderr, "Dart_DumpNativeStackTrace() not implemented!\n");
|
|
exit(1);
|
|
}
|
|
|
|
} // namespace dart
|