From 7a23f54bdea6930dd0ff17b0960d384dfb5dfbca Mon Sep 17 00:00:00 2001 From: yuying-y <78829091+yuying-y@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:53:13 -0700 Subject: [PATCH] Print an error message and return instead of crash (#3939) When the address of a symbol couldn't be found, the app should return instead of crash. The address is validated by the caller, which returns false if address is NULL. Eventually the loader gets the error message, and reverts back to the previous good image. b/357947368 Change-Id: I74b9aa600c281a74ef817af0cd97f0cda4ab91cd --- starboard/elf_loader/exported_symbols.cc | 4 +++- starboard/elf_loader/exported_symbols.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/starboard/elf_loader/exported_symbols.cc b/starboard/elf_loader/exported_symbols.cc index e073e8641e853..3a0f3f4d8e401 100644 --- a/starboard/elf_loader/exported_symbols.cc +++ b/starboard/elf_loader/exported_symbols.cc @@ -632,7 +632,9 @@ const void* ExportedSymbols::Lookup(const char* name) { const void* address = map_[name]; // Any symbol that is not registered as part of the Starboard API in the // constructor of this class is a leak, and is an error. - SB_CHECK(address) << "Failed to retrieve the address of '" << name << "'."; + if (!address) { + SB_LOG(ERROR) << "Failed to retrieve the address of '" << name << "'."; + } return address; } diff --git a/starboard/elf_loader/exported_symbols.h b/starboard/elf_loader/exported_symbols.h index d2ee1520b2945..7d33c999b4366 100644 --- a/starboard/elf_loader/exported_symbols.h +++ b/starboard/elf_loader/exported_symbols.h @@ -29,6 +29,7 @@ namespace elf_loader { class ExportedSymbols { public: ExportedSymbols(); + // Returns the address of the symbol |name|. If it's not found, returns NULL. const void* Lookup(const char* name); private: