diff --git a/src/goto-cc/linker_script_merge.cpp b/src/goto-cc/linker_script_merge.cpp index 9d8a071941f..97f37165f9a 100644 --- a/src/goto-cc/linker_script_merge.cpp +++ b/src/goto-cc/linker_script_merge.cpp @@ -727,17 +727,20 @@ int linker_script_merget::get_linker_script_data( } int linker_script_merget::goto_and_object_mismatch( - const std::list &linker_defined_symbols, - const linker_valuest &linker_values) + const std::list &linker_defined_symbols, + linker_valuest &linker_values) { int fail=0; for(const auto &sym : linker_defined_symbols) if(linker_values.find(sym)==linker_values.end()) { - fail=1; - log.error() << "Variable '" << sym - << "' was declared extern but never given " - << "a value, even in a linker script" << messaget::eom; + log.warning() << "Variable '" << sym + << "' was declared extern but never given a value, even in " + << "a linker script" << messaget::eom; + + null_pointer_exprt null_pointer(pointer_type(char_type())); + symbol_exprt null_sym(sym, pointer_type(char_type())); + linker_values.emplace(sym, std::make_pair(null_sym, null_pointer)); } for(const auto &pair : linker_values) diff --git a/src/goto-cc/linker_script_merge.h b/src/goto-cc/linker_script_merge.h index b6fcd26ae74..338d51c13d6 100644 --- a/src/goto-cc/linker_script_merge.h +++ b/src/goto-cc/linker_script_merge.h @@ -197,8 +197,8 @@ class linker_script_merget /// \return `1` if there is some mismatch between the list and map, `0` if /// everything is OK. int goto_and_object_mismatch( - const std::list &linker_defined_symbols, - const linker_valuest &linker_values); + const std::list &linker_defined_symbols, + linker_valuest &linker_values); /// \brief Validate output of the `scripts/ls_parse.py` tool int linker_data_is_malformed(const jsont &data) const;