2009-12-08 Doug Kwan <dougkwan@google.com>
* Makefile.am (CCFILES): Add attributes.cc and int_encoding.cc. (HFILES): Add attributes.h and int_encoding.h. * Makefile.in: Regenerate. * dwarf_reader.cc (read_unsigned_LEB_128, read_signed_LEB_128): Move function definitions to int_encoding.cc * dwarf_reader.h (read_unsigned_LEB_128, read_signed_LEB_128): Move prototypes to int_encoding.h * reduced_debug_output.cc (int_encoding.h): New include. (write_unsigned_LEB_128, get_length_as_unsigned_LEB_128): Move function definitions to int_encoding.cc (insert_into_vector, read_from_pointer): Move template definitions to int_encoding.h * attributes.cc: New file. * attributes.h: New file. * int_encoding.cc: New file. * int_encoding.h: New file.
This commit is contained in:
parent
829da89821
commit
4f7872716e
10 changed files with 1149 additions and 143 deletions
|
@ -27,71 +27,13 @@
|
|||
#include "dwarf.h"
|
||||
#include "dwarf_reader.h"
|
||||
#include "reduced_debug_output.h"
|
||||
#include "int_encoding.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace gold
|
||||
{
|
||||
|
||||
void
|
||||
write_unsigned_LEB_128(std::vector<unsigned char>* buffer, uint64_t value)
|
||||
{
|
||||
do
|
||||
{
|
||||
unsigned char current_byte = value & 0x7f;
|
||||
value >>= 7;
|
||||
if (value != 0)
|
||||
{
|
||||
current_byte |= 0x80;
|
||||
}
|
||||
buffer->push_back(current_byte);
|
||||
}
|
||||
while (value != 0);
|
||||
}
|
||||
|
||||
size_t
|
||||
get_length_as_unsigned_LEB_128(uint64_t value)
|
||||
{
|
||||
size_t length = 0;
|
||||
do
|
||||
{
|
||||
unsigned char current_byte = value & 0x7f;
|
||||
value >>= 7;
|
||||
if (value != 0)
|
||||
{
|
||||
current_byte |= 0x80;
|
||||
}
|
||||
length++;
|
||||
}
|
||||
while (value != 0);
|
||||
return length;
|
||||
}
|
||||
|
||||
template <int valsize>
|
||||
void insert_into_vector(std::vector<unsigned char>* destination,
|
||||
typename elfcpp::Valtype_base<valsize>::Valtype value)
|
||||
{
|
||||
unsigned char buffer[valsize / 8];
|
||||
if (parameters->target().is_big_endian())
|
||||
elfcpp::Swap_unaligned<valsize, true>::writeval(buffer, value);
|
||||
else
|
||||
elfcpp::Swap_unaligned<valsize, false>::writeval(buffer, value);
|
||||
destination->insert(destination->end(), buffer, buffer + valsize / 8);
|
||||
}
|
||||
|
||||
template <int valsize>
|
||||
typename elfcpp::Valtype_base<valsize>::Valtype
|
||||
read_from_pointer(unsigned char** source)
|
||||
{
|
||||
typename elfcpp::Valtype_base<valsize>::Valtype return_value;
|
||||
if (parameters->target().is_big_endian())
|
||||
return_value = elfcpp::Swap_unaligned<valsize, true>::readval(*source);
|
||||
else
|
||||
return_value = elfcpp::Swap_unaligned<valsize, false>::readval(*source);
|
||||
*source += valsize / 8;
|
||||
return return_value;
|
||||
}
|
||||
|
||||
// Given a pointer to the beginning of a die and the beginning of the associated
|
||||
// abbreviation fills in die_end with the end of the information entry. If
|
||||
// successful returns true. Get_die_end also takes a pointer to the end of the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue