Core file images note: Add text delta field
This commit is contained in:
@@ -666,6 +666,8 @@ typedef struct {
|
|||||||
int64 ni_node; /* node ID of mapped file */
|
int64 ni_node; /* node ID of mapped file */
|
||||||
uint32 ni_text_base; /* base address of text segment */
|
uint32 ni_text_base; /* base address of text segment */
|
||||||
uint32 ni_text_size; /* size of text segment */
|
uint32 ni_text_size; /* size of text segment */
|
||||||
|
int32 ni_text_delta; /* delta of the text segment relative to
|
||||||
|
load address specified in the ELF file */
|
||||||
uint32 ni_data_base; /* base address of data segment */
|
uint32 ni_data_base; /* base address of data segment */
|
||||||
uint32 ni_data_size; /* size of data segment */
|
uint32 ni_data_size; /* size of data segment */
|
||||||
uint32 ni_symbol_table; /* address of dynamic symbol table */
|
uint32 ni_symbol_table; /* address of dynamic symbol table */
|
||||||
@@ -689,6 +691,8 @@ typedef struct {
|
|||||||
int64 ni_node; /* node ID of mapped file */
|
int64 ni_node; /* node ID of mapped file */
|
||||||
uint64 ni_text_base; /* base address of text segment */
|
uint64 ni_text_base; /* base address of text segment */
|
||||||
uint64 ni_text_size; /* size of text segment */
|
uint64 ni_text_size; /* size of text segment */
|
||||||
|
int64 ni_text_delta; /* delta of the text segment relative to
|
||||||
|
load address specified in the ELF file */
|
||||||
uint64 ni_data_base; /* base address of data segment */
|
uint64 ni_data_base; /* base address of data segment */
|
||||||
uint64 ni_data_size; /* size of data segment */
|
uint64 ni_data_size; /* size of data segment */
|
||||||
uint64 ni_symbol_table; /* address of dynamic symbol table */
|
uint64 ni_symbol_table; /* address of dynamic symbol table */
|
||||||
|
|||||||
@@ -65,10 +65,10 @@ CoreFileAreaInfo::CoreFileAreaInfo(ElfSegment* segment, int32 id,
|
|||||||
|
|
||||||
|
|
||||||
CoreFileImageInfo::CoreFileImageInfo(int32 id, int32 type, uint64 initRoutine,
|
CoreFileImageInfo::CoreFileImageInfo(int32 id, int32 type, uint64 initRoutine,
|
||||||
uint64 termRoutine, uint64 textBase, uint64 textSize, uint64 dataBase,
|
uint64 termRoutine, uint64 textBase, uint64 textSize, int64 textDelta,
|
||||||
uint64 dataSize, int32 deviceId, int64 nodeId, uint64 symbolTable,
|
uint64 dataBase, uint64 dataSize, int32 deviceId, int64 nodeId,
|
||||||
uint64 symbolHash, uint64 stringTable, CoreFileAreaInfo* textArea,
|
uint64 symbolTable, uint64 symbolHash, uint64 stringTable,
|
||||||
CoreFileAreaInfo* dataArea, const BString& name)
|
CoreFileAreaInfo* textArea, CoreFileAreaInfo* dataArea, const BString& name)
|
||||||
:
|
:
|
||||||
fId(id),
|
fId(id),
|
||||||
fType(type),
|
fType(type),
|
||||||
@@ -76,6 +76,7 @@ CoreFileImageInfo::CoreFileImageInfo(int32 id, int32 type, uint64 initRoutine,
|
|||||||
fTermRoutine(termRoutine),
|
fTermRoutine(termRoutine),
|
||||||
fTextBase(textBase),
|
fTextBase(textBase),
|
||||||
fTextSize(textSize),
|
fTextSize(textSize),
|
||||||
|
fTextDelta(textDelta),
|
||||||
fDataBase(dataBase),
|
fDataBase(dataBase),
|
||||||
fDataSize(dataSize),
|
fDataSize(dataSize),
|
||||||
fDeviceId(deviceId),
|
fDeviceId(deviceId),
|
||||||
@@ -479,6 +480,7 @@ CoreFile::_ReadImagesNote(const void* data, uint32 dataSize)
|
|||||||
uint64 termRoutine = Get(entry.ni_term_routine);
|
uint64 termRoutine = Get(entry.ni_term_routine);
|
||||||
uint64 textBase = Get(entry.ni_text_base);
|
uint64 textBase = Get(entry.ni_text_base);
|
||||||
uint64 textSize = Get(entry.ni_text_size);
|
uint64 textSize = Get(entry.ni_text_size);
|
||||||
|
int64 textDelta = Get(entry.ni_text_delta);
|
||||||
uint64 dataBase = Get(entry.ni_data_base);
|
uint64 dataBase = Get(entry.ni_data_base);
|
||||||
uint64 dataSize = Get(entry.ni_data_size);
|
uint64 dataSize = Get(entry.ni_data_size);
|
||||||
int32 deviceId = Get(entry.ni_device);
|
int32 deviceId = Get(entry.ni_device);
|
||||||
@@ -506,9 +508,9 @@ CoreFile::_ReadImagesNote(const void* data, uint32 dataSize)
|
|||||||
CoreFileAreaInfo* textArea = _FindArea(textBase);
|
CoreFileAreaInfo* textArea = _FindArea(textBase);
|
||||||
CoreFileAreaInfo* dataArea = _FindArea(dataBase);
|
CoreFileAreaInfo* dataArea = _FindArea(dataBase);
|
||||||
CoreFileImageInfo* image = new(std::nothrow) CoreFileImageInfo(id, type,
|
CoreFileImageInfo* image = new(std::nothrow) CoreFileImageInfo(id, type,
|
||||||
initRoutine, termRoutine, textBase, textSize, dataBase, dataSize,
|
initRoutine, termRoutine, textBase, textSize, textDelta, dataBase,
|
||||||
deviceId, nodeId, symbolTable, symbolHash, stringTable, textArea,
|
dataSize, deviceId, nodeId, symbolTable, symbolHash, stringTable,
|
||||||
dataArea, copiedName);
|
textArea, dataArea, copiedName);
|
||||||
if (image == NULL || !fImageInfos.AddItem(image)) {
|
if (image == NULL || !fImageInfos.AddItem(image)) {
|
||||||
delete image;
|
delete image;
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ struct CoreFileImageInfo {
|
|||||||
CoreFileImageInfo(int32 id, int32 type,
|
CoreFileImageInfo(int32 id, int32 type,
|
||||||
uint64 initRoutine, uint64 termRoutine,
|
uint64 initRoutine, uint64 termRoutine,
|
||||||
uint64 textBase, uint64 textSize,
|
uint64 textBase, uint64 textSize,
|
||||||
|
int64 textDelta,
|
||||||
uint64 dataBase, uint64 dataSize,
|
uint64 dataBase, uint64 dataSize,
|
||||||
int32 deviceId, int64 nodeId,
|
int32 deviceId, int64 nodeId,
|
||||||
uint64 symbolTable, uint64 symbolHash,
|
uint64 symbolTable, uint64 symbolHash,
|
||||||
@@ -70,6 +71,7 @@ struct CoreFileImageInfo {
|
|||||||
int32 Type() const { return fType; }
|
int32 Type() const { return fType; }
|
||||||
uint64 TextBase() const { return fTextBase; }
|
uint64 TextBase() const { return fTextBase; }
|
||||||
uint64 TextSize() const { return fTextSize; }
|
uint64 TextSize() const { return fTextSize; }
|
||||||
|
int64 TextDelta() const { return fTextDelta; }
|
||||||
uint64 DataBase() const { return fDataBase; }
|
uint64 DataBase() const { return fDataBase; }
|
||||||
uint64 DataSize() const { return fDataSize; }
|
uint64 DataSize() const { return fDataSize; }
|
||||||
uint64 SymbolTable() const { return fSymbolTable; }
|
uint64 SymbolTable() const { return fSymbolTable; }
|
||||||
@@ -84,6 +86,7 @@ private:
|
|||||||
uint64 fTermRoutine;
|
uint64 fTermRoutine;
|
||||||
uint64 fTextBase;
|
uint64 fTextBase;
|
||||||
uint64 fTextSize;
|
uint64 fTextSize;
|
||||||
|
int64 fTextDelta;
|
||||||
uint64 fDataBase;
|
uint64 fDataBase;
|
||||||
uint64 fDataSize;
|
uint64 fDataSize;
|
||||||
int32 fDeviceId;
|
int32 fDeviceId;
|
||||||
|
|||||||
@@ -257,6 +257,7 @@ struct ImageInfo : DoublyLinkedListLinkImpl<ImageInfo> {
|
|||||||
fData((addr_t)image->info.basic_info.data),
|
fData((addr_t)image->info.basic_info.data),
|
||||||
fTextSize(image->info.basic_info.text_size),
|
fTextSize(image->info.basic_info.text_size),
|
||||||
fDataSize(image->info.basic_info.data_size),
|
fDataSize(image->info.basic_info.data_size),
|
||||||
|
fTextDelta(image->info.text_delta),
|
||||||
fSymbolTable((addr_t)image->info.symbol_table),
|
fSymbolTable((addr_t)image->info.symbol_table),
|
||||||
fSymbolHash((addr_t)image->info.symbol_hash),
|
fSymbolHash((addr_t)image->info.symbol_hash),
|
||||||
fStringTable((addr_t)image->info.string_table)
|
fStringTable((addr_t)image->info.string_table)
|
||||||
@@ -317,7 +318,6 @@ struct ImageInfo : DoublyLinkedListLinkImpl<ImageInfo> {
|
|||||||
addr_t TextBase() const
|
addr_t TextBase() const
|
||||||
{
|
{
|
||||||
return fText;
|
return fText;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t TextSize() const
|
size_t TextSize() const
|
||||||
@@ -325,6 +325,11 @@ struct ImageInfo : DoublyLinkedListLinkImpl<ImageInfo> {
|
|||||||
return fTextSize;
|
return fTextSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ssize_t TextDelta() const
|
||||||
|
{
|
||||||
|
return fTextDelta;
|
||||||
|
}
|
||||||
|
|
||||||
addr_t DataBase() const
|
addr_t DataBase() const
|
||||||
{
|
{
|
||||||
return fData;
|
return fData;
|
||||||
@@ -362,6 +367,7 @@ private:
|
|||||||
addr_t fData;
|
addr_t fData;
|
||||||
size_t fTextSize;
|
size_t fTextSize;
|
||||||
size_t fDataSize;
|
size_t fDataSize;
|
||||||
|
ssize_t fTextDelta;
|
||||||
addr_t fSymbolTable;
|
addr_t fSymbolTable;
|
||||||
addr_t fSymbolHash;
|
addr_t fSymbolHash;
|
||||||
addr_t fStringTable;
|
addr_t fStringTable;
|
||||||
@@ -1302,6 +1308,7 @@ private:
|
|||||||
entry.ni_text_size = imageInfo->TextSize();
|
entry.ni_text_size = imageInfo->TextSize();
|
||||||
entry.ni_data_base = imageInfo->DataBase();
|
entry.ni_data_base = imageInfo->DataBase();
|
||||||
entry.ni_data_size = imageInfo->DataSize();
|
entry.ni_data_size = imageInfo->DataSize();
|
||||||
|
entry.ni_text_delta = imageInfo->TextDelta();
|
||||||
entry.ni_symbol_table = imageInfo->SymbolTable();
|
entry.ni_symbol_table = imageInfo->SymbolTable();
|
||||||
entry.ni_symbol_hash = imageInfo->SymbolHash();
|
entry.ni_symbol_hash = imageInfo->SymbolHash();
|
||||||
entry.ni_string_table = imageInfo->StringTable();
|
entry.ni_string_table = imageInfo->StringTable();
|
||||||
|
|||||||
Reference in New Issue
Block a user