| // Copyright (c) 2024, 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 "vm/os.h" |
| |
| #include "platform/assert.h" |
| #include "vm/image_snapshot.h" |
| #include "vm/native_symbol.h" |
| |
| namespace dart { |
| |
| const uint8_t* OS::GetAppDSOBase(const uint8_t* snapshot_instructions) { |
| // Use the relocated address in the Image if the snapshot was compiled |
| // directly to ELF. |
| const Image instructions_image(snapshot_instructions); |
| if (instructions_image.compiled_to_elf()) { |
| return snapshot_instructions - |
| instructions_image.instructions_relocated_address(); |
| } |
| uword dso_base; |
| if (NativeSymbolResolver::LookupSharedObject( |
| reinterpret_cast<uword>(snapshot_instructions), &dso_base)) { |
| return reinterpret_cast<const uint8_t*>(dso_base); |
| } |
| UNIMPLEMENTED(); |
| return nullptr; |
| } |
| |
| } // namespace dart |