# HG changeset patch # User rkennke # Date 1562264996 -7200 # Node ID 963924f1c89180c74ebee2ce7086d80fb7056e74 # Parent fd1a4c4b7616736d9b466926a7030d6987cb9aed 8222079: Don't use memset to initialize fields decode_env constructor in disassembler.cpp Reviewed-by: dlong, stuefe, mdoerr diff -r fd1a4c4b7616 -r 963924f1c891 src/hotspot/share/compiler/disassembler.cpp --- a/src/hotspot/share/compiler/disassembler.cpp Thu Jul 04 13:26:41 2019 -0400 +++ b/src/hotspot/share/compiler/disassembler.cpp Thu Jul 04 20:29:56 2019 +0200 @@ -315,56 +315,96 @@ } } -decode_env::decode_env(CodeBuffer* code, outputStream* output) { - memset(this, 0, sizeof(*this)); - _output = output ? output : tty; - _codeBlob = NULL; - _codeBuffer = code; - _helpPrinted = false; +decode_env::decode_env(CodeBuffer* code, outputStream* output) : + _output(output ? output : tty), + _codeBuffer(code), + _codeBlob(NULL), + _nm(NULL), + _strings(), + _start(NULL), + _end(NULL), + _option_buf(), + _print_raw(0), + _cur_insn(NULL), + _bytes_per_line(0), + _pre_decode_alignment(0), + _post_decode_alignment(0), + _print_file_name(false), + _print_help(false), + _helpPrinted(false) { + memset(_option_buf, 0, sizeof(_option_buf)); process_options(_output); } -decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c) { - memset(this, 0, sizeof(*this)); // Beware, this zeroes bits of fields. - _output = output ? output : tty; - _codeBlob = code; - _codeBuffer = NULL; - _helpPrinted = false; - if (_codeBlob != NULL && _codeBlob->is_nmethod()) { - _nm = (nmethod*) code; - } +decode_env::decode_env(CodeBlob* code, outputStream* output, CodeStrings c) : + _output(output ? output : tty), + _codeBuffer(NULL), + _codeBlob(code), + _nm(_codeBlob != NULL && _codeBlob->is_nmethod() ? (nmethod*) code : NULL), + _strings(), + _start(NULL), + _end(NULL), + _option_buf(), + _print_raw(0), + _cur_insn(NULL), + _bytes_per_line(0), + _pre_decode_alignment(0), + _post_decode_alignment(0), + _print_file_name(false), + _print_help(false), + _helpPrinted(false) { + + memset(_option_buf, 0, sizeof(_option_buf)); _strings.copy(c); - process_options(_output); } -decode_env::decode_env(nmethod* code, outputStream* output, CodeStrings c) { - memset(this, 0, sizeof(*this)); // Beware, this zeroes bits of fields. - _output = output ? output : tty; - _codeBlob = NULL; - _codeBuffer = NULL; - _nm = code; - _start = _nm->code_begin(); - _end = _nm->code_end(); - _helpPrinted = false; +decode_env::decode_env(nmethod* code, outputStream* output, CodeStrings c) : + _output(output ? output : tty), + _codeBuffer(NULL), + _codeBlob(NULL), + _nm(code), + _strings(), + _start(_nm->code_begin()), + _end(_nm->code_end()), + _option_buf(), + _print_raw(0), + _cur_insn(NULL), + _bytes_per_line(0), + _pre_decode_alignment(0), + _post_decode_alignment(0), + _print_file_name(false), + _print_help(false), + _helpPrinted(false) { + + memset(_option_buf, 0, sizeof(_option_buf)); _strings.copy(c); - process_options(_output); } // Constructor for a 'decode_env' to decode a memory range [start, end) // of unknown origin, assuming it contains code. -decode_env::decode_env(address start, address end, outputStream* output) { +decode_env::decode_env(address start, address end, outputStream* output) : + _output(output ? output : tty), + _codeBuffer(NULL), + _codeBlob(NULL), + _nm(NULL), + _strings(), + _start(start), + _end(end), + _option_buf(), + _print_raw(0), + _cur_insn(NULL), + _bytes_per_line(0), + _pre_decode_alignment(0), + _post_decode_alignment(0), + _print_file_name(false), + _print_help(false), + _helpPrinted(false) { + assert(start < end, "Range must have a positive size, [" PTR_FORMAT ".." PTR_FORMAT ").", p2i(start), p2i(end)); - memset(this, 0, sizeof(*this)); - _output = output ? output : tty; - _codeBlob = NULL; - _codeBuffer = NULL; - _start = start; - _end = end; - _helpPrinted = false; - + memset(_option_buf, 0, sizeof(_option_buf)); process_options(_output); }