| Index: src/common/dwarf/dwarf2reader.cc
|
| diff --git a/src/common/dwarf/dwarf2reader.cc b/src/common/dwarf/dwarf2reader.cc
|
| index 49c2ee15179c5c6dff8e07f41a20fcb1964bb1c3..fcd29b8c8e025e07bd71979a63e7df8b9cc04fe3 100644
|
| --- a/src/common/dwarf/dwarf2reader.cc
|
| +++ b/src/common/dwarf/dwarf2reader.cc
|
| @@ -83,9 +83,9 @@ void CompilationUnit::ReadAbbrevs() {
|
| // The only way to check whether we are reading over the end of the
|
| // buffer would be to first compute the size of the leb128 data by
|
| // reading it, then go back and read it again.
|
| - const char* abbrev_start = iter->second.first +
|
| + const uint8_t *abbrev_start = iter->second.first +
|
| header_.abbrev_offset;
|
| - const char* abbrevptr = abbrev_start;
|
| + const uint8_t *abbrevptr = abbrev_start;
|
| #ifndef NDEBUG
|
| const uint64 abbrev_length = iter->second.second - header_.abbrev_offset;
|
| #endif
|
| @@ -132,8 +132,8 @@ void CompilationUnit::ReadAbbrevs() {
|
| }
|
|
|
| // Skips a single DIE's attributes.
|
| -const char* CompilationUnit::SkipDIE(const char* start,
|
| - const Abbrev& abbrev) {
|
| +const uint8_t *CompilationUnit::SkipDIE(const uint8_t* start,
|
| + const Abbrev& abbrev) {
|
| for (AttributeList::const_iterator i = abbrev.attributes.begin();
|
| i != abbrev.attributes.end();
|
| i++) {
|
| @@ -143,8 +143,8 @@ const char* CompilationUnit::SkipDIE(const char* start,
|
| }
|
|
|
| // Skips a single attribute form's data.
|
| -const char* CompilationUnit::SkipAttribute(const char* start,
|
| - enum DwarfForm form) {
|
| +const uint8_t *CompilationUnit::SkipAttribute(const uint8_t *start,
|
| + enum DwarfForm form) {
|
| size_t len;
|
|
|
| switch (form) {
|
| @@ -171,7 +171,7 @@ const char* CompilationUnit::SkipAttribute(const char* start,
|
| case DW_FORM_ref_sig8:
|
| return start + 8;
|
| case DW_FORM_string:
|
| - return start + strlen(start) + 1;
|
| + return start + strlen(reinterpret_cast<const char *>(start)) + 1;
|
| case DW_FORM_udata:
|
| case DW_FORM_ref_udata:
|
| reader_->ReadUnsignedLEB128(start, &len);
|
| @@ -218,7 +218,7 @@ const char* CompilationUnit::SkipAttribute(const char* start,
|
| // the offset in the .debug_abbrev section for our abbrevs, and an
|
| // address size.
|
| void CompilationUnit::ReadHeader() {
|
| - const char* headerptr = buffer_;
|
| + const uint8_t *headerptr = buffer_;
|
| size_t initial_length_size;
|
|
|
| assert(headerptr + 4 < buffer_ + buffer_length_);
|
| @@ -305,8 +305,8 @@ uint64 CompilationUnit::Start() {
|
| // If one really wanted, you could merge SkipAttribute and
|
| // ProcessAttribute
|
| // This is all boring data manipulation and calling of the handler.
|
| -const char* CompilationUnit::ProcessAttribute(
|
| - uint64 dieoffset, const char* start, enum DwarfAttribute attr,
|
| +const uint8_t *CompilationUnit::ProcessAttribute(
|
| + uint64 dieoffset, const uint8_t *start, enum DwarfAttribute attr,
|
| enum DwarfForm form) {
|
| size_t len;
|
|
|
| @@ -340,7 +340,7 @@ const char* CompilationUnit::ProcessAttribute(
|
| reader_->ReadEightBytes(start));
|
| return start + 8;
|
| case DW_FORM_string: {
|
| - const char* str = start;
|
| + const char *str = reinterpret_cast<const char *>(start);
|
| handler_->ProcessAttributeString(dieoffset, attr, form,
|
| str);
|
| return start + strlen(str) + 1;
|
| @@ -440,7 +440,7 @@ const char* CompilationUnit::ProcessAttribute(
|
| const uint64 offset = reader_->ReadOffset(start);
|
| assert(string_buffer_ + offset < string_buffer_ + string_buffer_length_);
|
|
|
| - const char* str = string_buffer_ + offset;
|
| + const char *str = reinterpret_cast<const char *>(string_buffer_ + offset);
|
| handler_->ProcessAttributeString(dieoffset, attr, form,
|
| str);
|
| return start + reader_->OffsetSize();
|
| @@ -450,9 +450,9 @@ const char* CompilationUnit::ProcessAttribute(
|
| return NULL;
|
| }
|
|
|
| -const char* CompilationUnit::ProcessDIE(uint64 dieoffset,
|
| - const char* start,
|
| - const Abbrev& abbrev) {
|
| +const uint8_t *CompilationUnit::ProcessDIE(uint64 dieoffset,
|
| + const uint8_t *start,
|
| + const Abbrev& abbrev) {
|
| for (AttributeList::const_iterator i = abbrev.attributes.begin();
|
| i != abbrev.attributes.end();
|
| i++) {
|
| @@ -462,12 +462,12 @@ const char* CompilationUnit::ProcessDIE(uint64 dieoffset,
|
| }
|
|
|
| void CompilationUnit::ProcessDIEs() {
|
| - const char* dieptr = after_header_;
|
| + const uint8_t *dieptr = after_header_;
|
| size_t len;
|
|
|
| // lengthstart is the place the length field is based on.
|
| // It is the point in the header after the initial length field
|
| - const char* lengthstart = buffer_;
|
| + const uint8_t *lengthstart = buffer_;
|
|
|
| // In 64 bit dwarf, the initial length is 12 bytes, because of the
|
| // 0xffffffff at the start.
|
| @@ -515,7 +515,7 @@ void CompilationUnit::ProcessDIEs() {
|
| }
|
| }
|
|
|
| -LineInfo::LineInfo(const char* buffer, uint64 buffer_length,
|
| +LineInfo::LineInfo(const uint8_t *buffer, uint64 buffer_length,
|
| ByteReader* reader, LineInfoHandler* handler):
|
| handler_(handler), reader_(reader), buffer_(buffer) {
|
| #ifndef NDEBUG
|
| @@ -533,7 +533,7 @@ uint64 LineInfo::Start() {
|
| // The header for a debug_line section is mildly complicated, because
|
| // the line info is very tightly encoded.
|
| void LineInfo::ReadHeader() {
|
| - const char* lineptr = buffer_;
|
| + const uint8_t *lineptr = buffer_;
|
| size_t initial_length_size;
|
|
|
| const uint64 initial_length
|
| @@ -580,7 +580,7 @@ void LineInfo::ReadHeader() {
|
| if (*lineptr) {
|
| uint32 dirindex = 1;
|
| while (*lineptr) {
|
| - const char* dirname = lineptr;
|
| + const char *dirname = reinterpret_cast<const char *>(lineptr);
|
| handler_->DefineDir(dirname, dirindex);
|
| lineptr += strlen(dirname) + 1;
|
| dirindex++;
|
| @@ -593,7 +593,7 @@ void LineInfo::ReadHeader() {
|
| uint32 fileindex = 1;
|
| size_t len;
|
| while (*lineptr) {
|
| - const char* filename = lineptr;
|
| + const char *filename = reinterpret_cast<const char *>(lineptr);
|
| lineptr += strlen(filename) + 1;
|
|
|
| uint64 dirindex = reader_->ReadUnsignedLEB128(lineptr, &len);
|
| @@ -618,7 +618,7 @@ void LineInfo::ReadHeader() {
|
| bool LineInfo::ProcessOneOpcode(ByteReader* reader,
|
| LineInfoHandler* handler,
|
| const struct LineInfoHeader &header,
|
| - const char* start,
|
| + const uint8_t *start,
|
| struct LineStateMachine* lsm,
|
| size_t* len,
|
| uintptr pc,
|
| @@ -759,7 +759,7 @@ bool LineInfo::ProcessOneOpcode(ByteReader* reader,
|
| }
|
| break;
|
| case DW_LNE_define_file: {
|
| - const char* filename = start;
|
| + const char *filename = reinterpret_cast<const char *>(start);
|
|
|
| templen = strlen(filename) + 1;
|
| start += templen;
|
| @@ -806,7 +806,7 @@ void LineInfo::ReadLines() {
|
|
|
| // lengthstart is the place the length field is based on.
|
| // It is the point in the header after the initial length field
|
| - const char* lengthstart = buffer_;
|
| + const uint8_t *lengthstart = buffer_;
|
|
|
| // In 64 bit dwarf, the initial length is 12 bytes, because of the
|
| // 0xffffffff at the start.
|
| @@ -815,7 +815,7 @@ void LineInfo::ReadLines() {
|
| else
|
| lengthstart += 4;
|
|
|
| - const char* lineptr = after_header_;
|
| + const uint8_t *lineptr = after_header_;
|
| lsm.Reset(header_.default_is_stmt);
|
|
|
| // The LineInfoHandler interface expects each line's length along
|
| @@ -1314,7 +1314,7 @@ class CallFrameInfo::State {
|
| const Entry *entry_;
|
|
|
| // The next instruction to process.
|
| - const char *cursor_;
|
| + const uint8_t *cursor_;
|
|
|
| // The current set of rules.
|
| RuleMap rules_;
|
| @@ -1412,7 +1412,8 @@ bool CallFrameInfo::State::ParseOperands(const char *format,
|
| if (len > bytes_left || expression_length > bytes_left - len)
|
| return ReportIncomplete();
|
| cursor_ += len;
|
| - operands->expression = string(cursor_, expression_length);
|
| + operands->expression = string(reinterpret_cast<const char *>(cursor_),
|
| + expression_length);
|
| cursor_ += expression_length;
|
| break;
|
| }
|
| @@ -1765,8 +1766,8 @@ bool CallFrameInfo::State::DoRestore(unsigned reg) {
|
| return DoRule(reg, rule);
|
| }
|
|
|
| -bool CallFrameInfo::ReadEntryPrologue(const char *cursor, Entry *entry) {
|
| - const char *buffer_end = buffer_ + buffer_length_;
|
| +bool CallFrameInfo::ReadEntryPrologue(const uint8_t *cursor, Entry *entry) {
|
| + const uint8_t *buffer_end = buffer_ + buffer_length_;
|
|
|
| // Initialize enough of ENTRY for use in error reporting.
|
| entry->offset = cursor - buffer_;
|
| @@ -1844,7 +1845,7 @@ bool CallFrameInfo::ReadEntryPrologue(const char *cursor, Entry *entry) {
|
| }
|
|
|
| bool CallFrameInfo::ReadCIEFields(CIE *cie) {
|
| - const char *cursor = cie->fields;
|
| + const uint8_t *cursor = cie->fields;
|
| size_t len;
|
|
|
| assert(cie->kind == kCIE);
|
| @@ -1875,13 +1876,14 @@ bool CallFrameInfo::ReadCIEFields(CIE *cie) {
|
| return false;
|
| }
|
|
|
| - const char *augmentation_start = cursor;
|
| - const void *augmentation_end =
|
| - memchr(augmentation_start, '\0', cie->end - augmentation_start);
|
| + const uint8_t *augmentation_start = cursor;
|
| + const uint8_t *augmentation_end =
|
| + reinterpret_cast<const uint8_t *>(memchr(augmentation_start, '\0',
|
| + cie->end - augmentation_start));
|
| if (! augmentation_end) return ReportIncomplete(cie);
|
| - cursor = static_cast<const char *>(augmentation_end);
|
| - cie->augmentation = string(augmentation_start,
|
| - cursor - augmentation_start);
|
| + cursor = augmentation_end;
|
| + cie->augmentation = string(reinterpret_cast<const char *>(augmentation_start),
|
| + cursor - augmentation_start);
|
| // Skip the terminating '\0'.
|
| cursor++;
|
|
|
| @@ -1927,9 +1929,9 @@ bool CallFrameInfo::ReadCIEFields(CIE *cie) {
|
| if (size_t(cie->end - cursor) < len + data_size)
|
| return ReportIncomplete(cie);
|
| cursor += len;
|
| - const char *data = cursor;
|
| + const uint8_t *data = cursor;
|
| cursor += data_size;
|
| - const char *data_end = cursor;
|
| + const uint8_t *data_end = cursor;
|
|
|
| cie->has_z_lsda = false;
|
| cie->has_z_personality = false;
|
| @@ -2021,7 +2023,7 @@ bool CallFrameInfo::ReadCIEFields(CIE *cie) {
|
| }
|
|
|
| bool CallFrameInfo::ReadFDEFields(FDE *fde) {
|
| - const char *cursor = fde->fields;
|
| + const uint8_t *cursor = fde->fields;
|
| size_t size;
|
|
|
| fde->address = reader_->ReadEncodedPointer(cursor, fde->cie->pointer_encoding,
|
| @@ -2087,10 +2089,10 @@ bool CallFrameInfo::ReadFDEFields(FDE *fde) {
|
| }
|
|
|
| bool CallFrameInfo::Start() {
|
| - const char *buffer_end = buffer_ + buffer_length_;
|
| - const char *cursor;
|
| + const uint8_t *buffer_end = buffer_ + buffer_length_;
|
| + const uint8_t *cursor;
|
| bool all_ok = true;
|
| - const char *entry_end;
|
| + const uint8_t *entry_end;
|
| bool ok;
|
|
|
| // Traverse all the entries in buffer_, skipping CIEs and offering
|
|
|