Skip to content

Commit b2f45b4

Browse files
authored
Merge pull request #5619 from tautschnig/messaget-linker_script_merge
linker_script_merget isn't a messaget
2 parents 3fec6e1 + 7e15640 commit b2f45b4

File tree

2 files changed

+71
-57
lines changed

2 files changed

+71
-57
lines changed

src/goto-cc/linker_script_merge.cpp

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,28 @@ int linker_script_merget::add_linker_script_definitions()
4242
return 0;
4343

4444
jsont data;
45-
fail=parse_json(linker_def_outfile(), get_message_handler(), data);
45+
fail = parse_json(linker_def_outfile(), log.get_message_handler(), data);
4646
if(fail!=0)
4747
{
48-
error() << "Problem parsing linker script JSON data" << eom;
48+
log.error() << "Problem parsing linker script JSON data" << messaget::eom;
4949
return fail;
5050
}
5151

5252
fail=linker_data_is_malformed(data);
5353
if(fail!=0)
5454
{
55-
error() << "Malformed linker-script JSON document" << eom;
56-
data.output(error());
55+
log.error() << "Malformed linker-script JSON document" << messaget::eom;
56+
data.output(log.error());
5757
return fail;
5858
}
5959

6060
auto original_goto_model =
61-
read_goto_binary(goto_binary, get_message_handler());
61+
read_goto_binary(goto_binary, log.get_message_handler());
6262

6363
if(!original_goto_model.has_value())
6464
{
65-
error() << "Unable to read goto binary for linker script merging" << eom;
65+
log.error() << "Unable to read goto binary for linker script merging"
66+
<< messaget::eom;
6667
return 1;
6768
}
6869

@@ -72,8 +73,8 @@ int linker_script_merget::add_linker_script_definitions()
7273
original_goto_model->goto_functions.function_map.find(INITIALIZE_FUNCTION);
7374
if(pair == original_goto_model->goto_functions.function_map.end())
7475
{
75-
error() << "No " << INITIALIZE_FUNCTION << " found in goto_functions"
76-
<< eom;
76+
log.error() << "No " << INITIALIZE_FUNCTION << " found in goto_functions"
77+
<< messaget::eom;
7778
return fail;
7879
}
7980
fail = ls_data2instructions(
@@ -84,7 +85,8 @@ int linker_script_merget::add_linker_script_definitions()
8485
linker_values);
8586
if(fail!=0)
8687
{
87-
error() << "Could not add linkerscript defs to " INITIALIZE_FUNCTION << eom;
88+
log.error() << "Could not add linkerscript defs to " INITIALIZE_FUNCTION
89+
<< messaget::eom;
8890
return fail;
8991
}
9092

@@ -99,14 +101,18 @@ int linker_script_merget::add_linker_script_definitions()
99101

100102
if(fail!=0)
101103
{
102-
error() << "Could not pointerize all linker-defined expressions" << eom;
104+
log.error() << "Could not pointerize all linker-defined expressions"
105+
<< messaget::eom;
103106
return fail;
104107
}
105108

106109
fail = compiler.write_bin_object_file(goto_binary, *original_goto_model);
107110

108111
if(fail!=0)
109-
error() << "Could not write linkerscript-augmented binary" << eom;
112+
{
113+
log.error() << "Could not write linkerscript-augmented binary"
114+
<< messaget::eom;
115+
}
110116

111117
return fail;
112118
}
@@ -117,11 +123,11 @@ linker_script_merget::linker_script_merget(
117123
const std::string &goto_binary,
118124
const cmdlinet &cmdline,
119125
message_handlert &message_handler)
120-
: messaget(message_handler),
121-
compiler(compiler),
126+
: compiler(compiler),
122127
elf_binary(elf_binary),
123128
goto_binary(goto_binary),
124129
cmdline(cmdline),
130+
log(message_handler),
125131
replacement_predicates(
126132
{replacement_predicatet(
127133
"address of array's first member",
@@ -225,8 +231,8 @@ int linker_script_merget::pointerize_linker_defined_symbols(
225231

226232
if(to_pointerize.empty())
227233
continue;
228-
debug() << "Pointerizing the symbol-table value of symbol " << pair.first
229-
<< eom;
234+
log.debug() << "Pointerizing the symbol-table value of symbol "
235+
<< pair.first << messaget::eom;
230236
int fail = pointerize_subexprs_of(
231237
goto_model.symbol_table.get_writeable_ref(pair.first).value,
232238
to_pointerize,
@@ -235,10 +241,12 @@ int linker_script_merget::pointerize_linker_defined_symbols(
235241
continue;
236242
ret=1;
237243
for(const auto &sym : to_pointerize)
238-
error() << " Could not pointerize '" << sym.get_identifier()
239-
<< "' in symbol table entry " << pair.first << ". Pretty:\n"
240-
<< sym.pretty() << "\n";
241-
error() << eom;
244+
{
245+
log.error() << " Could not pointerize '" << sym.get_identifier()
246+
<< "' in symbol table entry " << pair.first << ". Pretty:\n"
247+
<< sym.pretty() << "\n";
248+
}
249+
log.error() << messaget::eom;
242250
}
243251

244252
// Finally, pointerize all occurrences of linker-defined symbols in the
@@ -254,19 +262,19 @@ int linker_script_merget::pointerize_linker_defined_symbols(
254262
symbols_to_pointerize(linker_values, *insts, to_pointerize);
255263
if(to_pointerize.empty())
256264
continue;
257-
debug() << "Pointerizing a program expression..." << eom;
265+
log.debug() << "Pointerizing a program expression..." << messaget::eom;
258266
int fail = pointerize_subexprs_of(*insts, to_pointerize, linker_values);
259267
if(to_pointerize.empty() && fail==0)
260268
continue;
261269
ret=1;
262270
for(const auto &sym : to_pointerize)
263271
{
264-
error() << " Could not pointerize '" << sym.get_identifier()
265-
<< "' in function " << gf.first << ". Pretty:\n"
266-
<< sym.pretty() << "\n";
267-
error().source_location=iit->source_location;
272+
log.error() << " Could not pointerize '" << sym.get_identifier()
273+
<< "' in function " << gf.first << ". Pretty:\n"
274+
<< sym.pretty() << "\n";
275+
log.error().source_location = iit->source_location;
268276
}
269-
error() << eom;
277+
log.error() << messaget::eom;
270278
}
271279
}
272280
}
@@ -283,14 +291,14 @@ int linker_script_merget::replace_expr(
283291
auto it=linker_values.find(ident);
284292
if(it==linker_values.end())
285293
{
286-
error() << "Could not find a new expression for linker script-defined "
287-
<< "symbol '" << ident << "'" << eom;
294+
log.error() << "Could not find a new expression for linker script-defined "
295+
<< "symbol '" << ident << "'" << messaget::eom;
288296
return 1;
289297
}
290298
symbol_exprt new_expr=it->second.first;
291299
new_expr.add_source_location()=old_symbol.source_location();
292-
debug() << "Pointerizing linker-defined symbol '" << ident << "' of shape <"
293-
<< shape << ">." << eom;
300+
log.debug() << "Pointerizing linker-defined symbol '" << ident
301+
<< "' of shape <" << shape << ">." << messaget::eom;
294302
old_expr=new_expr;
295303
return 0;
296304
}
@@ -318,8 +326,8 @@ int linker_script_merget::pointerize_subexprs_of(
318326
if(result==to_pointerize.end())
319327
{
320328
fail=1;
321-
error() << "Too many removals of '" << inner_symbol.get_identifier()
322-
<< "'" << eom;
329+
log.error() << "Too many removals of '" << inner_symbol.get_identifier()
330+
<< "'" << messaget::eom;
323331
}
324332
else
325333
to_pointerize.erase(result);
@@ -427,9 +435,9 @@ int linker_script_merget::ls_data2instructions(
427435
mp_integer array_size = string2integer(d["size"].value);
428436
if(array_size > MAX_FLATTENED_ARRAY_SIZE)
429437
{
430-
warning() << "Object section '" << d["section"].value << "' of size "
431-
<< array_size << " is too large to model. Truncating to "
432-
<< MAX_FLATTENED_ARRAY_SIZE << " bytes" << eom;
438+
log.warning() << "Object section '" << d["section"].value << "' of size "
439+
<< array_size << " is too large to model. Truncating to "
440+
<< MAX_FLATTENED_ARRAY_SIZE << " bytes" << messaget::eom;
433441
array_size=MAX_FLATTENED_ARRAY_SIZE;
434442
if(!has_end)
435443
truncated_symbols[d["size-symbol"].value]=MAX_FLATTENED_ARRAY_SIZE;
@@ -466,8 +474,9 @@ int linker_script_merget::ls_data2instructions(
466474
});
467475
if(it == to_json_array(data["addresses"]).end())
468476
{
469-
error() << "Start: Could not find address corresponding to symbol '"
470-
<< d["start-symbol"].value << "' (start of section)" << eom;
477+
log.error() << "Start: Could not find address corresponding to symbol '"
478+
<< d["start-symbol"].value << "' (start of section)"
479+
<< messaget::eom;
471480
return 1;
472481
}
473482
source_locationt start_loc;
@@ -502,8 +511,9 @@ int linker_script_merget::ls_data2instructions(
502511
});
503512
if(entry == to_json_array(data["addresses"]).end())
504513
{
505-
error() << "Could not find address corresponding to symbol '"
506-
<< d["end-symbol"].value << "' (end of section)" << eom;
514+
log.debug() << "Could not find address corresponding to symbol '"
515+
<< d["end-symbol"].value << "' (end of section)"
516+
<< messaget::eom;
507517
return 1;
508518
}
509519
source_locationt end_loc;
@@ -566,10 +576,11 @@ int linker_script_merget::ls_data2instructions(
566576
symbol_value=d["val"].value;
567577
else
568578
{
569-
debug() << "Truncating the value of symbol " << d["sym"].value << " from "
570-
<< d["val"].value << " to " << MAX_FLATTENED_ARRAY_SIZE
571-
<< " because it corresponds to the size of a too-large section."
572-
<< eom;
579+
log.debug()
580+
<< "Truncating the value of symbol " << d["sym"].value << " from "
581+
<< d["val"].value << " to " << MAX_FLATTENED_ARRAY_SIZE
582+
<< " because it corresponds to the size of a too-large section."
583+
<< messaget::eom;
573584
symbol_value=std::to_string(MAX_FLATTENED_ARRAY_SIZE);
574585
}
575586

@@ -685,8 +696,8 @@ int linker_script_merget::get_linker_script_data(
685696
linker_defined_symbols.begin(),
686697
linker_defined_symbols.end(),
687698
std::ostream_iterator<irep_idt>(linker_def_str, "\n"));
688-
debug() << "Linker-defined symbols: [" << linker_def_str.str() << "]\n"
689-
<< eom;
699+
log.debug() << "Linker-defined symbols: [" << linker_def_str.str() << "]\n"
700+
<< messaget::eom;
690701

691702
temporary_filet linker_def_infile("goto-cc-linker-defs", "");
692703
std::ofstream linker_def_file(linker_def_infile());
@@ -702,19 +713,19 @@ int linker_script_merget::get_linker_script_data(
702713
"--out-file", def_out_file
703714
};
704715

705-
if(get_message_handler().get_verbosity() >= messaget::M_DEBUG)
716+
if(log.get_message_handler().get_verbosity() >= messaget::M_DEBUG)
706717
argv.push_back("--very-verbose");
707-
else if(get_message_handler().get_verbosity() > messaget::M_RESULT)
718+
else if(log.get_message_handler().get_verbosity() > messaget::M_RESULT)
708719
argv.push_back("--verbose");
709720

710-
debug() << "RUN:";
721+
log.debug() << "RUN:";
711722
for(std::size_t i=0; i<argv.size(); i++)
712-
debug() << " " << argv[i];
713-
debug() << eom;
723+
log.debug() << " " << argv[i];
724+
log.debug() << messaget::eom;
714725

715726
int rc = run(argv[0], argv, linker_def_infile(), def_out_file, "");
716727
if(rc!=0)
717-
warning() << "Problem parsing linker script" << eom;
728+
log.warning() << "Problem parsing linker script" << messaget::eom;
718729

719730
return rc;
720731
}
@@ -728,8 +739,9 @@ int linker_script_merget::goto_and_object_mismatch(
728739
if(linker_values.find(sym)==linker_values.end())
729740
{
730741
fail=1;
731-
error() << "Variable '" << sym << "' was declared extern but never given "
732-
<< "a value, even in a linker script" << eom;
742+
log.error() << "Variable '" << sym
743+
<< "' was declared extern but never given "
744+
<< "a value, even in a linker script" << messaget::eom;
733745
}
734746

735747
for(const auto &pair : linker_values)
@@ -739,10 +751,11 @@ int linker_script_merget::goto_and_object_mismatch(
739751
if(it==linker_defined_symbols.end())
740752
{
741753
fail=1;
742-
error() << "Linker script-defined symbol '" << pair.first << "' was "
743-
<< "either defined in the C source code, not declared extern in "
744-
<< "the C source code, or does not appear in the C source code"
745-
<< eom;
754+
log.error()
755+
<< "Linker script-defined symbol '" << pair.first << "' was "
756+
<< "either defined in the C source code, not declared extern in "
757+
<< "the C source code, or does not appear in the C source code"
758+
<< messaget::eom;
746759
}
747760
}
748761
return fail;

src/goto-cc/linker_script_merge.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class replacement_predicatet
5959
};
6060

6161
/// \brief Synthesise definitions of symbols that are defined in linker scripts
62-
class linker_script_merget:public messaget
62+
class linker_script_merget
6363
{
6464
public:
6565
/// \brief Add values of linkerscript-defined symbols to the goto-binary
@@ -90,6 +90,7 @@ class linker_script_merget:public messaget
9090
const std::string &elf_binary;
9191
const std::string &goto_binary;
9292
const cmdlinet &cmdline;
93+
messaget log;
9394

9495
/// \brief The "shapes" of expressions to be replaced by a pointer
9596
///

0 commit comments

Comments
 (0)