cmELF: fix signedness warning on OpenBSD
OpenBSD defines Elf64_Dyn::d_tag to be of an unsigned type, which differs from what most other platforms do and what is the case for 32 bit. To have the tag as unsigned makes sense, but this causes a compilation warning: /.../CMake/Source/cmELF.cxx: In member function 'const cmELF::StringEntry* cmELFInternalImpl<Types>::GetDynamicSectionString(int) [with Types = cmELFTypes64]': /.../CMake/Source/cmELF.cxx:945: instantiated from here /.../CMake/Source/cmELF.cxx:668: warning: comparison between signed and unsigned integer expressions Add an explicit typedef to cast the value to for 32 and 64 bit. That type is unsigned and has the proper length for both platforms so no information is lost. Explicitely cast both arguments before comparing them to avoid the warning in all situations.
This commit is contained in:
parent
11a6b3d59a
commit
3022f2a1ef
|
@ -124,7 +124,7 @@ public:
|
||||||
virtual unsigned int GetNumberOfSections() const = 0;
|
virtual unsigned int GetNumberOfSections() const = 0;
|
||||||
virtual unsigned int GetDynamicEntryCount() = 0;
|
virtual unsigned int GetDynamicEntryCount() = 0;
|
||||||
virtual unsigned long GetDynamicEntryPosition(int j) = 0;
|
virtual unsigned long GetDynamicEntryPosition(int j) = 0;
|
||||||
virtual StringEntry const* GetDynamicSectionString(int tag) = 0;
|
virtual StringEntry const* GetDynamicSectionString(unsigned int tag) = 0;
|
||||||
virtual void PrintInfo(std::ostream& os) const = 0;
|
virtual void PrintInfo(std::ostream& os) const = 0;
|
||||||
|
|
||||||
bool ReadBytes(unsigned long pos, unsigned long size, char* buf)
|
bool ReadBytes(unsigned long pos, unsigned long size, char* buf)
|
||||||
|
@ -187,7 +187,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store string table entry states.
|
// Store string table entry states.
|
||||||
std::map<int, StringEntry> DynamicSectionStrings;
|
std::map<unsigned int, StringEntry> DynamicSectionStrings;
|
||||||
};
|
};
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -198,6 +198,7 @@ struct cmELFTypes32
|
||||||
typedef Elf32_Shdr ELF_Shdr;
|
typedef Elf32_Shdr ELF_Shdr;
|
||||||
typedef Elf32_Dyn ELF_Dyn;
|
typedef Elf32_Dyn ELF_Dyn;
|
||||||
typedef Elf32_Half ELF_Half;
|
typedef Elf32_Half ELF_Half;
|
||||||
|
typedef cmIML_INT_uint32_t tagtype;
|
||||||
static const char* GetName() { return "32-bit"; }
|
static const char* GetName() { return "32-bit"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -208,6 +209,7 @@ struct cmELFTypes64
|
||||||
typedef Elf64_Shdr ELF_Shdr;
|
typedef Elf64_Shdr ELF_Shdr;
|
||||||
typedef Elf64_Dyn ELF_Dyn;
|
typedef Elf64_Dyn ELF_Dyn;
|
||||||
typedef Elf64_Half ELF_Half;
|
typedef Elf64_Half ELF_Half;
|
||||||
|
typedef cmIML_INT_uint64_t tagtype;
|
||||||
static const char* GetName() { return "64-bit"; }
|
static const char* GetName() { return "64-bit"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -222,6 +224,7 @@ public:
|
||||||
typedef typename Types::ELF_Shdr ELF_Shdr;
|
typedef typename Types::ELF_Shdr ELF_Shdr;
|
||||||
typedef typename Types::ELF_Dyn ELF_Dyn;
|
typedef typename Types::ELF_Dyn ELF_Dyn;
|
||||||
typedef typename Types::ELF_Half ELF_Half;
|
typedef typename Types::ELF_Half ELF_Half;
|
||||||
|
typedef typename Types::tagtype tagtype;
|
||||||
|
|
||||||
// Construct with a stream and byte swap indicator.
|
// Construct with a stream and byte swap indicator.
|
||||||
cmELFInternalImpl(cmELF* external,
|
cmELFInternalImpl(cmELF* external,
|
||||||
|
@ -239,7 +242,7 @@ public:
|
||||||
virtual unsigned long GetDynamicEntryPosition(int j);
|
virtual unsigned long GetDynamicEntryPosition(int j);
|
||||||
|
|
||||||
// Lookup a string from the dynamic section with the given tag.
|
// Lookup a string from the dynamic section with the given tag.
|
||||||
virtual StringEntry const* GetDynamicSectionString(int tag);
|
virtual StringEntry const* GetDynamicSectionString(unsigned int tag);
|
||||||
|
|
||||||
// Print information about the ELF file.
|
// Print information about the ELF file.
|
||||||
virtual void PrintInfo(std::ostream& os) const
|
virtual void PrintInfo(std::ostream& os) const
|
||||||
|
@ -624,10 +627,10 @@ unsigned long cmELFInternalImpl<Types>::GetDynamicEntryPosition(int j)
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
template <class Types>
|
template <class Types>
|
||||||
cmELF::StringEntry const*
|
cmELF::StringEntry const*
|
||||||
cmELFInternalImpl<Types>::GetDynamicSectionString(int tag)
|
cmELFInternalImpl<Types>::GetDynamicSectionString(unsigned int tag)
|
||||||
{
|
{
|
||||||
// Short-circuit if already checked.
|
// Short-circuit if already checked.
|
||||||
std::map<int, StringEntry>::iterator dssi =
|
std::map<unsigned int, StringEntry>::iterator dssi =
|
||||||
this->DynamicSectionStrings.find(tag);
|
this->DynamicSectionStrings.find(tag);
|
||||||
if(dssi != this->DynamicSectionStrings.end())
|
if(dssi != this->DynamicSectionStrings.end())
|
||||||
{
|
{
|
||||||
|
@ -665,7 +668,7 @@ cmELFInternalImpl<Types>::GetDynamicSectionString(int tag)
|
||||||
di != this->DynamicSectionEntries.end(); ++di)
|
di != this->DynamicSectionEntries.end(); ++di)
|
||||||
{
|
{
|
||||||
ELF_Dyn& dyn = *di;
|
ELF_Dyn& dyn = *di;
|
||||||
if(dyn.d_tag == tag)
|
if(static_cast<tagtype>(dyn.d_tag) == static_cast<tagtype>(tag))
|
||||||
{
|
{
|
||||||
// We found the tag requested.
|
// We found the tag requested.
|
||||||
// Make sure the position given is within the string section.
|
// Make sure the position given is within the string section.
|
||||||
|
|
Loading…
Reference in New Issue