[CodeView] RelocPtr points to little endian data.

Don't use a uint32_t*, use a ulittle32_t* to make this correct
on big endian systems.

Patch by James Clarke
Differential Revision: https://reviews.llvm.org/D54421

llvm-svn: 347349
This commit is contained in:
Zachary Turner 2018-11-20 21:30:11 +00:00
parent 24b346da42
commit d16944eefe
2 changed files with 4 additions and 3 deletions

View File

@ -1210,7 +1210,7 @@ void DebugSHandler::finish() {
// Rewrite string table indices in the Fpo Data and symbol records to refer to
// the global PDB string table instead of the object file string table.
for (DebugFrameDataSubsectionRef &FDS : NewFpoFrames) {
const uint32_t *Reloc = FDS.getRelocPtr();
const ulittle32_t *Reloc = FDS.getRelocPtr();
for (codeview::FrameData FD : FDS) {
FD.RvaStart += *Reloc;
FD.FrameFunc =

View File

@ -13,6 +13,7 @@
#include "llvm/DebugInfo/CodeView/CodeView.h"
#include "llvm/DebugInfo/CodeView/DebugSubsection.h"
#include "llvm/Support/BinaryStreamReader.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h"
namespace llvm {
@ -31,10 +32,10 @@ public:
FixedStreamArray<FrameData>::Iterator begin() const { return Frames.begin(); }
FixedStreamArray<FrameData>::Iterator end() const { return Frames.end(); }
const uint32_t *getRelocPtr() const { return RelocPtr; }
const support::ulittle32_t *getRelocPtr() const { return RelocPtr; }
private:
const uint32_t *RelocPtr = nullptr;
const support::ulittle32_t *RelocPtr = nullptr;
FixedStreamArray<FrameData> Frames;
};