Added AddressSize(), IsBigEndian, IsHostEndian().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31634 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
e3eda50984
commit
f3516af2ca
@ -20,9 +20,12 @@
|
||||
#include "Team.h"
|
||||
|
||||
|
||||
Architecture::Architecture(TeamMemory* teamMemory)
|
||||
Architecture::Architecture(TeamMemory* teamMemory, uint8 addressSize,
|
||||
bool bigEndian)
|
||||
:
|
||||
fTeamMemory(teamMemory)
|
||||
fTeamMemory(teamMemory),
|
||||
fAddressSize(addressSize),
|
||||
fBigEndian(bigEndian)
|
||||
{
|
||||
}
|
||||
|
||||
@ -97,7 +100,7 @@ Architecture::CreateStackTrace(Team* team,
|
||||
CpuState* previousCpuState = NULL;
|
||||
if (function != NULL) {
|
||||
status_t error = functionDebugInfo->GetSpecificImageDebugInfo()
|
||||
->CreateFrame(image, functionDebugInfo, cpuState, previousFrame,
|
||||
->CreateFrame(image, function, cpuState, previousFrame,
|
||||
previousCpuState);
|
||||
if (error != B_OK && error != B_UNSUPPORTED)
|
||||
break;
|
||||
|
@ -6,6 +6,7 @@
|
||||
#define ARCHITECTURE_H
|
||||
|
||||
|
||||
#include <ByteOrder.h>
|
||||
#include <OS.h>
|
||||
|
||||
#include <Referenceable.h>
|
||||
@ -31,11 +32,17 @@ class TeamMemory;
|
||||
|
||||
class Architecture : public Referenceable {
|
||||
public:
|
||||
Architecture(TeamMemory* teamMemory);
|
||||
Architecture(TeamMemory* teamMemory,
|
||||
uint8 addressSize, bool bigEndian);
|
||||
virtual ~Architecture();
|
||||
|
||||
virtual status_t Init();
|
||||
|
||||
inline uint8 AddressSize() const { return fAddressSize; }
|
||||
|
||||
inline bool IsBigEndian() const { return fBigEndian; }
|
||||
inline bool IsHostEndian() const;
|
||||
|
||||
virtual int32 CountRegisters() const = 0;
|
||||
virtual const Register* Registers() const = 0;
|
||||
|
||||
@ -87,7 +94,16 @@ public:
|
||||
|
||||
protected:
|
||||
TeamMemory* fTeamMemory;
|
||||
uint8 fAddressSize;
|
||||
bool fBigEndian;
|
||||
};
|
||||
|
||||
|
||||
bool
|
||||
Architecture::IsHostEndian() const
|
||||
{
|
||||
return fBigEndian == (B_HOST_IS_BENDIAN != 0);
|
||||
}
|
||||
|
||||
|
||||
#endif // ARCHITECTURE_H
|
||||
|
@ -104,7 +104,7 @@ struct ArchitectureX86::FromDwarfRegisterMap : RegisterMap {
|
||||
|
||||
ArchitectureX86::ArchitectureX86(TeamMemory* teamMemory)
|
||||
:
|
||||
Architecture(teamMemory),
|
||||
Architecture(teamMemory, 4, false),
|
||||
fAssemblyLanguage(NULL),
|
||||
fToDwarfRegisterMap(NULL),
|
||||
fFromDwarfRegisterMap(NULL)
|
||||
@ -326,6 +326,10 @@ ArchitectureX86::CreateStackFrame(Image* image, FunctionDebugInfo* function,
|
||||
return B_NO_MEMORY;
|
||||
Reference<StackFrame> frameReference(frame, true);
|
||||
|
||||
status_t error = frame->Init();
|
||||
if (error != B_OK)
|
||||
return error;
|
||||
|
||||
// read the previous frame and return address, if this is a standard frame
|
||||
if (readStandardFrame) {
|
||||
uint32 frameData[2];
|
||||
|
Loading…
Reference in New Issue
Block a user