From f6ff5a28059f8e68297e42306ae75ae9da5cdc82 Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Sun, 28 Mar 2021 21:19:29 +0200 Subject: [PATCH] Cleanups: start working on -Wsuggest-override, add some "final". NFCI. --- src/Makefile | 1 + src/bele_policy.h | 9 ++++++-- src/compress_lzma.cpp | 3 +++ src/file.h | 20 ++++++++-------- src/linker.h | 54 +++++++++++++++++++++---------------------- src/p_armpe.h | 4 ++-- src/p_com.h | 26 ++++++++++----------- src/p_exe.h | 30 ++++++++++++------------ src/p_sys.h | 20 ++++++++-------- src/p_tos.h | 33 +++++++++++++------------- src/p_w32pe.h | 4 ++-- src/p_w64pep.h | 4 ++-- src/p_wcle.h | 30 ++++++++++++------------ src/packer.cpp | 6 ++--- src/packer.h | 4 ++-- src/pefile.cpp | 4 ++-- src/snprintf.cpp | 8 +++---- src/ui.h | 2 +- 18 files changed, 135 insertions(+), 127 deletions(-) diff --git a/src/Makefile b/src/Makefile index 7f653602..6681169a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -98,6 +98,7 @@ mf.CXXFLAGS += -fno-strict-aliasing -fno-strict-overflow mf.CXXFLAGS += -funsigned-char mf.CXXFLAGS += $(CXXFLAGS_SANITIZE) mf.CXXFLAGS += -Wall -Wextra -Wcast-align -Wcast-qual -Wmissing-declarations -Wpointer-arith -Wshadow -Wvla -Wwrite-strings +##mf.CXXFLAGS += -Wsuggest-override mf.CXXFLAGS += $(CXXFLAGS_WERROR) # rules diff --git a/src/bele_policy.h b/src/bele_policy.h index 5c37f22b..5d618a18 100644 --- a/src/bele_policy.h +++ b/src/bele_policy.h @@ -84,9 +84,14 @@ struct AbstractPolicy { }; #endif +#if defined(BELE_RTP) +#undef C +#define C const override +#endif + struct BEPolicy #if defined(BELE_RTP) - : public AbstractPolicy + final : public AbstractPolicy #endif { inline BEPolicy() {} @@ -142,7 +147,7 @@ struct BEPolicy struct LEPolicy #if defined(BELE_RTP) - : public AbstractPolicy + final : public AbstractPolicy #endif { inline LEPolicy() {} diff --git a/src/compress_lzma.cpp b/src/compress_lzma.cpp index e7d1f571..43e5c498 100644 --- a/src/compress_lzma.cpp +++ b/src/compress_lzma.cpp @@ -36,6 +36,9 @@ #if (ACC_CC_GNUC >= 0x040200) # pragma GCC diagnostic ignored "-Wshadow" #endif +#if (ACC_CC_GNUC >= 0x050100) +# pragma GCC diagnostic ignored "-Wsuggest-override" +#endif #if (ACC_CC_MSC) # pragma warning(disable: 4456) // -Wno-shadow #endif diff --git a/src/file.h b/src/file.h index 84baa0bd..6f2c3a50 100644 --- a/src/file.h +++ b/src/file.h @@ -86,7 +86,7 @@ public: // **************************************************************************/ -class InputFile : public FileBase +class InputFile final : public FileBase { typedef FileBase super; public: @@ -99,15 +99,15 @@ public: sopen(name, flags, -1); } - virtual int read(void *buf, int len); - virtual int readx(void *buf, int len); + virtual int read(void *buf, int len) override; + virtual int readx(void *buf, int len) override; virtual int read(MemBuffer *buf, int len); virtual int readx(MemBuffer *buf, int len); virtual int read(MemBuffer &buf, int len); virtual int readx(MemBuffer &buf, int len); - virtual upx_off_t seek(upx_off_t off, int whence); - virtual upx_off_t tell() const; + virtual upx_off_t seek(upx_off_t off, int whence) override; + virtual upx_off_t tell() const override; virtual upx_off_t st_size_orig() const; protected: upx_off_t _length_orig; @@ -118,7 +118,7 @@ protected: // **************************************************************************/ -class OutputFile : public FileBase +class OutputFile final : public FileBase { typedef FileBase super; public: @@ -132,17 +132,17 @@ public: } virtual bool openStdout(int flags=0, bool force=false); - virtual void write(const void *buf, int len); + virtual void write(const void *buf, int len) override; virtual void write(const MemBuffer *buf, int len); virtual void write(const MemBuffer &buf, int len); - virtual void set_extent(upx_off_t offset, upx_off_t length); + virtual void set_extent(upx_off_t offset, upx_off_t length) override; virtual upx_off_t unset_extent(); // returns actual length upx_off_t getBytesWritten() const { return bytes_written; } - virtual upx_off_t st_size() const; // { return _length; } + virtual upx_off_t st_size() const override; // { return _length; } // FIXME - these won't work when using the '--stdout' option - virtual upx_off_t seek(upx_off_t off, int whence); + virtual upx_off_t seek(upx_off_t off, int whence) override; virtual void rewrite(const void *buf, int len); // util diff --git a/src/linker.h b/src/linker.h index cae5e8df..a74c4c9a 100644 --- a/src/linker.h +++ b/src/linker.h @@ -155,21 +155,21 @@ class ElfLinkerAMD64 : public ElfLinker { typedef ElfLinker super; protected: - virtual void alignCode(unsigned len) { alignWithByte(len, 0x90); } + virtual void alignCode(unsigned len) override { alignWithByte(len, 0x90); } virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerARM64 : public ElfLinker { +class ElfLinkerARM64 final : public ElfLinker { typedef ElfLinker super; protected: - virtual void alignCode(unsigned len) { alignWithByte(len, 0x90); } + virtual void alignCode(unsigned len) override { alignWithByte(len, 0x90); } virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerArmBE : public ElfLinker { +class ElfLinkerArmBE final : public ElfLinker { typedef ElfLinker super; public: @@ -177,38 +177,38 @@ public: protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerArmLE : public ElfLinker { +class ElfLinkerArmLE final : public ElfLinker { typedef ElfLinker super; protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerArm64LE : public ElfLinker { +class ElfLinkerArm64LE final : public ElfLinker { typedef ElfLinker super; protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerM68k : public ElfLinker { +class ElfLinkerM68k final : public ElfLinker { typedef ElfLinker super; public: ElfLinkerM68k() { bele = &N_BELE_RTP::be_policy; } protected: - virtual void alignCode(unsigned len); + virtual void alignCode(unsigned len) override; virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerMipsBE : public ElfLinker { +class ElfLinkerMipsBE final : public ElfLinker { typedef ElfLinker super; public: @@ -216,18 +216,18 @@ public: protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerMipsLE : public ElfLinker { +class ElfLinkerMipsLE final : public ElfLinker { typedef ElfLinker super; protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerPpc32 : public ElfLinker { +class ElfLinkerPpc32 final : public ElfLinker { typedef ElfLinker super; public: @@ -235,18 +235,18 @@ public: protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerPpc64le : public ElfLinker { +class ElfLinkerPpc64le final : public ElfLinker { typedef ElfLinker super; protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerPpc64 : public ElfLinker { +class ElfLinkerPpc64 final : public ElfLinker { typedef ElfLinker super; public: @@ -254,16 +254,16 @@ public: protected: virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; -class ElfLinkerX86 : public ElfLinker { +class ElfLinkerX86 final : public ElfLinker { typedef ElfLinker super; protected: - virtual void alignCode(unsigned len) { alignWithByte(len, 0x90); } + virtual void alignCode(unsigned len) override { alignWithByte(len, 0x90); } virtual void relocate1(const Relocation *, upx_byte *location, upx_uint64_t value, - const char *type); + const char *type) override; }; #endif /* already included */ diff --git a/src/p_armpe.h b/src/p_armpe.h index 85a06107..7c829bef 100644 --- a/src/p_armpe.h +++ b/src/p_armpe.h @@ -56,8 +56,8 @@ public: unsigned s1addr); virtual void addNewRelocations(Reloc &, unsigned upxsection); virtual unsigned getProcessImportParam(unsigned upxsection); - virtual void setOhDataBase(const pe_section_t *osection); - virtual void setOhHeaderSize(const pe_section_t *osection); + virtual void setOhDataBase(const pe_section_t *osection) override; + virtual void setOhHeaderSize(const pe_section_t *osection) override; virtual void pack(OutputFile *fo); virtual bool canPack(); diff --git a/src/p_com.h b/src/p_com.h index 75348c31..0ddfcf2b 100644 --- a/src/p_com.h +++ b/src/p_com.h @@ -39,26 +39,26 @@ class PackCom : public Packer typedef Packer super; public: PackCom(InputFile *f) : super(f) { bele = &N_BELE_RTP::le_policy; } - virtual int getVersion() const { return 13; } - virtual int getFormat() const { return UPX_F_DOS_COM; } - virtual const char *getName() const { return "dos/com"; } - //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.com" : "i286-dos16.com"; } - virtual const char *getFullName(const options_t *) const { return "i086-dos16.com"; } - virtual const int *getCompressionMethods(int method, int level) const; - virtual const int *getFilters() const; + virtual int getVersion() const override { return 13; } + virtual int getFormat() const override { return UPX_F_DOS_COM; } + virtual const char *getName() const override { return "dos/com"; } + //virtual const char *getFullName(const options_t *o) const override { return o && o->cpu == o->CPU_8086 ? "i086-dos16.com" : "i286-dos16.com"; } + virtual const char *getFullName(const options_t *) const override { return "i086-dos16.com"; } + virtual const int *getCompressionMethods(int method, int level) const override; + virtual const int *getFilters() const override; - virtual void pack(OutputFile *fo); - virtual void unpack(OutputFile *fo); + virtual void pack(OutputFile *fo) override; + virtual void unpack(OutputFile *fo) override; - virtual bool canPack(); - virtual int canUnpack(); + virtual bool canPack() override; + virtual int canUnpack() override; protected: virtual unsigned getCallTrickOffset() const { return 0x100; } - virtual Linker* newLinker() const; + virtual Linker* newLinker() const override; protected: - virtual void buildLoader(const Filter *ft); + virtual void buildLoader(const Filter *ft) override; virtual void patchLoader(OutputFile *fo, upx_byte *, int, unsigned); virtual void addFilter16(int filter_id); }; diff --git a/src/p_exe.h b/src/p_exe.h index ac6e9133..3f8c37ef 100644 --- a/src/p_exe.h +++ b/src/p_exe.h @@ -34,32 +34,32 @@ // dos/exe **************************************************************************/ -class PackExe : public Packer +class PackExe final : public Packer { typedef Packer super; public: PackExe(InputFile *f); - virtual int getVersion() const { return 13; } - virtual int getFormat() const { return UPX_F_DOS_EXE; } - virtual const char *getName() const { return "dos/exe"; } + virtual int getVersion() const override { return 13; } + virtual int getFormat() const override { return UPX_F_DOS_EXE; } + virtual const char *getName() const override { return "dos/exe"; } //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.exe" : "i286-dos16.exe"; } - virtual const char *getFullName(const options_t *) const { return "i086-dos16.exe"; } - virtual const int *getCompressionMethods(int method, int level) const; - virtual const int *getFilters() const; + virtual const char *getFullName(const options_t *) const override { return "i086-dos16.exe"; } + virtual const int *getCompressionMethods(int method, int level) const override; + virtual const int *getFilters() const override; - virtual void pack(OutputFile *fo); - virtual void unpack(OutputFile *fo); + virtual void pack(OutputFile *fo) override; + virtual void unpack(OutputFile *fo) override; - virtual bool canPack(); - virtual int canUnpack(); + virtual bool canPack() override; + virtual int canUnpack() override; // unpacker capabilities - virtual bool canUnpackVersion(int version) const + virtual bool canUnpackVersion(int version) const override { // NOTE: could adapt p_exe.cpp to support (version >= 8) return (version >= 10); } - virtual bool canUnpackFormat(int format) const + virtual bool canUnpackFormat(int format) const override { return (format == UPX_F_DOS_EXE || format == UPX_F_DOS_EXEH); } @@ -70,8 +70,8 @@ protected: virtual int readFileHeader(void); virtual int fillExeHeader(struct exe_header_t *) const; - virtual void buildLoader(const Filter *ft); - virtual Linker* newLinker() const; + virtual void buildLoader(const Filter *ft) override; + virtual Linker* newLinker() const override; void addLoaderEpilogue(int flag); __packed_struct(exe_header_t) diff --git a/src/p_sys.h b/src/p_sys.h index fbdaa22b..a52b2168 100644 --- a/src/p_sys.h +++ b/src/p_sys.h @@ -34,25 +34,25 @@ // dos/sys **************************************************************************/ -class PackSys : public PackCom +class PackSys final : public PackCom { typedef PackCom super; public: PackSys(InputFile *f) : super(f) { } - virtual int getVersion() const { return 13; } - virtual int getFormat() const { return UPX_F_DOS_SYS; } - virtual const char *getName() const { return "dos/sys"; } - //virtual const char *getFullName(const options_t *o) const { return o && o->cpu == o->CPU_8086 ? "i086-dos16.sys" : "i286-dos16.sys"; } - virtual const char *getFullName(const options_t *) const { return "i086-dos16.sys"; } + virtual int getVersion() const override { return 13; } + virtual int getFormat() const override { return UPX_F_DOS_SYS; } + virtual const char *getName() const override { return "dos/sys"; } + //virtual const char *getFullName(const options_t *o) const override { return o && o->cpu == o->CPU_8086 ? "i086-dos16.sys" : "i286-dos16.sys"; } + virtual const char *getFullName(const options_t *) const override { return "i086-dos16.sys"; } - virtual bool canPack(); + virtual bool canPack() override; protected: - virtual unsigned getCallTrickOffset() const { return 0; } + virtual unsigned getCallTrickOffset() const override { return 0; } protected: - virtual void buildLoader(const Filter *ft); - virtual void patchLoader(OutputFile *fo, upx_byte *, int, unsigned); + virtual void buildLoader(const Filter *ft) override; + virtual void patchLoader(OutputFile *fo, upx_byte *, int, unsigned) override; }; diff --git a/src/p_tos.h b/src/p_tos.h index 838d38e2..d9a53718 100644 --- a/src/p_tos.h +++ b/src/p_tos.h @@ -32,33 +32,34 @@ // atari/tos **************************************************************************/ -class PackTos : public Packer { +class PackTos final : public Packer { typedef Packer super; public: PackTos(InputFile *f); - virtual int getVersion() const { return 13; } - virtual int getFormat() const { return UPX_F_ATARI_TOS; } - virtual const char *getName() const { return "atari/tos"; } - virtual const char *getFullName(const options_t *) const { return "m68k-atari.tos"; } - virtual const int *getCompressionMethods(int method, int level) const; - virtual const int *getFilters() const; + virtual int getVersion() const override { return 13; } + virtual int getFormat() const override { return UPX_F_ATARI_TOS; } + virtual const char *getName() const override { return "atari/tos"; } + virtual const char *getFullName(const options_t *) const override { return "m68k-atari.tos"; } + virtual const int *getCompressionMethods(int method, int level) const override; + virtual const int *getFilters() const override; - virtual void pack(OutputFile *fo); - virtual void unpack(OutputFile *fo); + virtual void pack(OutputFile *fo) override; + virtual void unpack(OutputFile *fo) override; - virtual bool canPack(); - virtual int canUnpack(); + virtual bool canPack() override; + virtual int canUnpack() override; - virtual void fileInfo(); + virtual void fileInfo() override; protected: - virtual Linker *newLinker() const; - virtual void buildLoader(const Filter *ft); + virtual Linker *newLinker() const override; + virtual void buildLoader(const Filter *ft) override; + unsigned getDecomprOffset(int method, int small) const; - virtual int readFileHeader(); - virtual bool checkFileHeader(); + int readFileHeader(); + bool checkFileHeader(); struct alignas(1) tos_header_t { BE16 fh_magic; diff --git a/src/p_w32pe.h b/src/p_w32pe.h index dc8e6f8c..8208e5d0 100644 --- a/src/p_w32pe.h +++ b/src/p_w32pe.h @@ -52,8 +52,8 @@ public: unsigned sizeof_oh, unsigned isize_isplit, unsigned s1addr); virtual void addNewRelocations(Reloc &, unsigned upxsection); - virtual void setOhDataBase(const pe_section_t *osection); - virtual void setOhHeaderSize(const pe_section_t *osection); + virtual void setOhDataBase(const pe_section_t *osection) override; + virtual void setOhHeaderSize(const pe_section_t *osection) override; virtual void pack(OutputFile *fo); virtual bool canPack(); diff --git a/src/p_w64pep.h b/src/p_w64pep.h index cf1b409b..651349a9 100644 --- a/src/p_w64pep.h +++ b/src/p_w64pep.h @@ -50,8 +50,8 @@ public: virtual void defineSymbols(unsigned ncsection, unsigned upxsection, unsigned sizeof_oh, unsigned isize_isplit, unsigned s1addr); - virtual void setOhDataBase(const pe_section_t *) {} - virtual void setOhHeaderSize(const pe_section_t *) {} + virtual void setOhDataBase(const pe_section_t *) override {} + virtual void setOhHeaderSize(const pe_section_t *) override {} virtual void pack(OutputFile *fo); virtual bool canPack(); diff --git a/src/p_wcle.h b/src/p_wcle.h index 0a3d8367..6aa3f29f 100644 --- a/src/p_wcle.h +++ b/src/p_wcle.h @@ -34,38 +34,38 @@ // watcom/le **************************************************************************/ -class PackWcle : public Packer, public LeFile +class PackWcle final : public Packer, public LeFile { typedef Packer super; public: PackWcle(InputFile *f) : super(f), LeFile(f) { bele = &N_BELE_RTP::le_policy; } - virtual int getVersion() const { return 13; } - virtual int getFormat() const { return UPX_F_WATCOM_LE; } - virtual const char *getName() const { return "watcom/le"; } - virtual const char *getFullName(const options_t *) const { return "i386-dos32.watcom.le"; } - virtual const int *getCompressionMethods(int method, int level) const; - virtual const int *getFilters() const; + virtual int getVersion() const override { return 13; } + virtual int getFormat() const override { return UPX_F_WATCOM_LE; } + virtual const char *getName() const override { return "watcom/le"; } + virtual const char *getFullName(const options_t *) const override { return "i386-dos32.watcom.le"; } + virtual const int *getCompressionMethods(int method, int level) const override; + virtual const int *getFilters() const override; - virtual void pack(OutputFile *fo); - virtual void unpack(OutputFile *fo); + virtual void pack(OutputFile *fo) override; + virtual void unpack(OutputFile *fo) override; - virtual bool canPack(); - virtual int canUnpack(); + virtual bool canPack() override; + virtual int canUnpack() override; protected: virtual void handleStub(OutputFile *fo); - virtual void buildLoader(const Filter *ft); - virtual Linker* newLinker() const; + virtual void buildLoader(const Filter *ft) override; + virtual Linker* newLinker() const override; - virtual void readObjectTable(); + virtual void readObjectTable() override; virtual void encodeObjectTable(); virtual void decodeObjectTable(); virtual void encodeFixupPageTable(); virtual void decodeFixupPageTable(); - virtual void encodePageMap(); + virtual void encodePageMap() override; virtual void encodeEntryTable(); virtual void decodeEntryTable(); diff --git a/src/packer.cpp b/src/packer.cpp index 7d440d86..53965e7a 100644 --- a/src/packer.cpp +++ b/src/packer.cpp @@ -629,10 +629,8 @@ int Packer::patchPackHeader(void *b, int blen) { return boff; } - -bool Packer::getPackHeader(void const *b, int blen, bool allow_incompressible) -{ - if (!ph.fillPackHeader((unsigned char const *)b, blen)) +bool Packer::getPackHeader(void const *b, int blen, bool allow_incompressible) { + if (!ph.fillPackHeader((unsigned char const *) b, blen)) return false; if (ph.version > getVersion()) diff --git a/src/packer.h b/src/packer.h index fbd3be2d..0b9b2207 100644 --- a/src/packer.h +++ b/src/packer.h @@ -199,8 +199,8 @@ protected: // packheader handling virtual int patchPackHeader(void *b, int blen); - virtual bool getPackHeader(void const *b, int blen, bool allow_incompressible=false); - virtual bool readPackHeader(int len, bool allow_incompressible=false); + virtual bool getPackHeader(void const *b, int blen, bool allow_incompressible = false); + virtual bool readPackHeader(int len, bool allow_incompressible = false); virtual void checkAlreadyPacked(const void *b, int blen); // loader core diff --git a/src/pefile.cpp b/src/pefile.cpp index a75331c7..e6e4164b 100644 --- a/src/pefile.cpp +++ b/src/pefile.cpp @@ -596,7 +596,7 @@ class PeFile::ImportLinker : public ElfLinkerAMD64 { struct tstr : private ::noncopyable { - char *s; + char *s = nullptr; explicit tstr(char *str) : s(str) {} ~tstr() { delete [] s; } operator char *() const { return s; } @@ -717,7 +717,7 @@ class PeFile::ImportLinker : public ElfLinkerAMD64 return strcmp(s1->name, s2->name); } - virtual void alignCode(unsigned len) { alignWithByte(len, 0); } + virtual void alignCode(unsigned len) override { alignWithByte(len, 0); } const Section *getThunk(const char *dll, const char *proc, char tsep) const { diff --git a/src/snprintf.cpp b/src/snprintf.cpp index 5ac5b33d..2fb2a381 100644 --- a/src/snprintf.cpp +++ b/src/snprintf.cpp @@ -42,10 +42,10 @@ int upx_safe_vsnprintf(char *str, upx_rsize_t max_size, const char *format, va_l else assert(max_size == 0); - long long n = vsnprintf(str, max_size, format, ap); - assert(n >= 0); - assert(n < UPX_RSIZE_MAX_STR); - size = (size_t) n + 1; + long long len = vsnprintf(str, max_size, format, ap); + assert(len >= 0); + assert(len < UPX_RSIZE_MAX_STR); + size = (size_t) len + 1; // postconditions assert(size > 0); diff --git a/src/ui.h b/src/ui.h index ad8c5e31..85fcda50 100644 --- a/src/ui.h +++ b/src/ui.h @@ -37,7 +37,7 @@ class UiPacker; // **************************************************************************/ -class UiPacker { +class UiPacker final { public: UiPacker(const Packer *p_);