toolkit/crashreporter/google-breakpad/src/common/dwarf/bytereader_unittest.cc

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/crashreporter/google-breakpad/src/common/dwarf/bytereader_unittest.cc	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,697 @@
     1.4 +// Copyright (c) 2010, Google Inc.
     1.5 +// All rights reserved.
     1.6 +//
     1.7 +// Redistribution and use in source and binary forms, with or without
     1.8 +// modification, are permitted provided that the following conditions are
     1.9 +// met:
    1.10 +//
    1.11 +//     * Redistributions of source code must retain the above copyright
    1.12 +// notice, this list of conditions and the following disclaimer.
    1.13 +//     * Redistributions in binary form must reproduce the above
    1.14 +// copyright notice, this list of conditions and the following disclaimer
    1.15 +// in the documentation and/or other materials provided with the
    1.16 +// distribution.
    1.17 +//     * Neither the name of Google Inc. nor the names of its
    1.18 +// contributors may be used to endorse or promote products derived from
    1.19 +// this software without specific prior written permission.
    1.20 +//
    1.21 +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    1.22 +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    1.23 +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    1.24 +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    1.25 +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    1.26 +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    1.27 +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    1.28 +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    1.29 +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    1.30 +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    1.31 +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    1.32 +
    1.33 +// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
    1.34 +
    1.35 +// bytereader_unittest.cc: Unit tests for dwarf2reader::ByteReader
    1.36 +
    1.37 +#include <string>
    1.38 +
    1.39 +#include "breakpad_googletest_includes.h"
    1.40 +#include "common/dwarf/bytereader.h"
    1.41 +#include "common/dwarf/bytereader-inl.h"
    1.42 +#include "common/dwarf/cfi_assembler.h"
    1.43 +#include "common/using_std_string.h"
    1.44 +
    1.45 +using dwarf2reader::ByteReader;
    1.46 +using dwarf2reader::DwarfPointerEncoding;
    1.47 +using dwarf2reader::ENDIANNESS_BIG;
    1.48 +using dwarf2reader::ENDIANNESS_LITTLE;
    1.49 +using google_breakpad::CFISection;
    1.50 +using google_breakpad::test_assembler::Label;
    1.51 +using google_breakpad::test_assembler::kBigEndian;
    1.52 +using google_breakpad::test_assembler::kLittleEndian;
    1.53 +using google_breakpad::test_assembler::Section;
    1.54 +using testing::Test;
    1.55 +
    1.56 +struct ReaderFixture {
    1.57 +  string contents;
    1.58 +  size_t pointer_size;
    1.59 +};
    1.60 +
    1.61 +class Reader: public ReaderFixture, public Test { };
    1.62 +class ReaderDeathTest: public ReaderFixture, public Test { };
    1.63 +
    1.64 +TEST_F(Reader, SimpleConstructor) {
    1.65 +  ByteReader reader(ENDIANNESS_BIG);
    1.66 +  reader.SetAddressSize(4);
    1.67 +  CFISection section(kBigEndian, 4);
    1.68 +  section
    1.69 +    .D8(0xc0)
    1.70 +    .D16(0xcf0d)
    1.71 +    .D32(0x96fdd219)
    1.72 +    .D64(0xbbf55fef0825f117ULL)
    1.73 +    .ULEB128(0xa0927048ba8121afULL)
    1.74 +    .LEB128(-0x4f337badf4483f83LL)
    1.75 +    .D32(0xfec319c9);
    1.76 +  ASSERT_TRUE(section.GetContents(&contents));
    1.77 +  const char *data = contents.data();
    1.78 +  EXPECT_EQ(0xc0U, reader.ReadOneByte(data));
    1.79 +  EXPECT_EQ(0xcf0dU, reader.ReadTwoBytes(data + 1));
    1.80 +  EXPECT_EQ(0x96fdd219U, reader.ReadFourBytes(data + 3));
    1.81 +  EXPECT_EQ(0xbbf55fef0825f117ULL, reader.ReadEightBytes(data + 7));
    1.82 +  size_t leb128_size;
    1.83 +  EXPECT_EQ(0xa0927048ba8121afULL,
    1.84 +            reader.ReadUnsignedLEB128(data + 15, &leb128_size));
    1.85 +  EXPECT_EQ(10U, leb128_size);
    1.86 +  EXPECT_EQ(-0x4f337badf4483f83LL,
    1.87 +            reader.ReadSignedLEB128(data + 25, &leb128_size));
    1.88 +  EXPECT_EQ(10U, leb128_size);
    1.89 +  EXPECT_EQ(0xfec319c9, reader.ReadAddress(data + 35));
    1.90 +}
    1.91 +
    1.92 +TEST_F(Reader, ValidEncodings) {
    1.93 +  ByteReader reader(ENDIANNESS_LITTLE);
    1.94 +  EXPECT_TRUE(reader.ValidEncoding(
    1.95 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr)));
    1.96 +  EXPECT_TRUE(reader.ValidEncoding(
    1.97 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_omit)));
    1.98 +  EXPECT_TRUE(reader.ValidEncoding(
    1.99 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_aligned)));
   1.100 +  EXPECT_TRUE(reader.ValidEncoding(
   1.101 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128)));
   1.102 +  EXPECT_TRUE(reader.ValidEncoding(
   1.103 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2)));
   1.104 +  EXPECT_TRUE(reader.ValidEncoding(
   1.105 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4)));
   1.106 +  EXPECT_TRUE(reader.ValidEncoding(
   1.107 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8)));
   1.108 +  EXPECT_TRUE(reader.ValidEncoding(
   1.109 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128)));
   1.110 +  EXPECT_TRUE(reader.ValidEncoding(
   1.111 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2)));
   1.112 +  EXPECT_TRUE(reader.ValidEncoding(
   1.113 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4)));
   1.114 +  EXPECT_TRUE(reader.ValidEncoding(
   1.115 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8)));
   1.116 +  EXPECT_TRUE(reader.ValidEncoding(
   1.117 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
   1.118 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.119 +  EXPECT_TRUE(reader.ValidEncoding(
   1.120 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
   1.121 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.122 +  EXPECT_TRUE(reader.ValidEncoding(
   1.123 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
   1.124 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.125 +  EXPECT_TRUE(reader.ValidEncoding(
   1.126 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
   1.127 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.128 +  EXPECT_TRUE(reader.ValidEncoding(
   1.129 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
   1.130 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.131 +  EXPECT_TRUE(reader.ValidEncoding(
   1.132 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
   1.133 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.134 +  EXPECT_TRUE(reader.ValidEncoding(
   1.135 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
   1.136 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.137 +  EXPECT_TRUE(reader.ValidEncoding(
   1.138 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
   1.139 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.140 +  EXPECT_TRUE(reader.ValidEncoding(
   1.141 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
   1.142 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.143 +  EXPECT_TRUE(reader.ValidEncoding(
   1.144 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
   1.145 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.146 +  EXPECT_TRUE(reader.ValidEncoding(
   1.147 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
   1.148 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.149 +  EXPECT_TRUE(reader.ValidEncoding(
   1.150 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
   1.151 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.152 +  EXPECT_TRUE(reader.ValidEncoding(
   1.153 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
   1.154 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.155 +  EXPECT_TRUE(reader.ValidEncoding(
   1.156 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
   1.157 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.158 +  EXPECT_TRUE(reader.ValidEncoding(
   1.159 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
   1.160 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.161 +  EXPECT_TRUE(reader.ValidEncoding(
   1.162 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
   1.163 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.164 +  EXPECT_TRUE(reader.ValidEncoding(
   1.165 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
   1.166 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.167 +  EXPECT_TRUE(reader.ValidEncoding(
   1.168 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
   1.169 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.170 +  EXPECT_TRUE(reader.ValidEncoding(
   1.171 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
   1.172 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.173 +  EXPECT_TRUE(reader.ValidEncoding(
   1.174 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
   1.175 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.176 +  EXPECT_TRUE(reader.ValidEncoding(
   1.177 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
   1.178 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.179 +  EXPECT_TRUE(reader.ValidEncoding(
   1.180 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
   1.181 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.182 +  EXPECT_TRUE(reader.ValidEncoding(
   1.183 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
   1.184 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.185 +  EXPECT_TRUE(reader.ValidEncoding(
   1.186 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
   1.187 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.188 +  EXPECT_TRUE(reader.ValidEncoding(
   1.189 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
   1.190 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.191 +  EXPECT_TRUE(reader.ValidEncoding(
   1.192 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
   1.193 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.194 +  EXPECT_TRUE(reader.ValidEncoding(
   1.195 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
   1.196 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.197 +  EXPECT_TRUE(reader.ValidEncoding(
   1.198 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
   1.199 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.200 +  EXPECT_TRUE(reader.ValidEncoding(
   1.201 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
   1.202 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.203 +  EXPECT_TRUE(reader.ValidEncoding(
   1.204 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
   1.205 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.206 +  EXPECT_TRUE(reader.ValidEncoding(
   1.207 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
   1.208 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.209 +  EXPECT_TRUE(reader.ValidEncoding(
   1.210 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
   1.211 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.212 +  EXPECT_TRUE(reader.ValidEncoding(
   1.213 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
   1.214 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.215 +  EXPECT_TRUE(reader.ValidEncoding(
   1.216 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
   1.217 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.218 +  EXPECT_TRUE(reader.ValidEncoding(
   1.219 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
   1.220 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.221 +  EXPECT_TRUE(reader.ValidEncoding(
   1.222 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
   1.223 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.224 +  EXPECT_TRUE(reader.ValidEncoding(
   1.225 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.226 +                           dwarf2reader::DW_EH_PE_absptr |
   1.227 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.228 +  EXPECT_TRUE(reader.ValidEncoding(
   1.229 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.230 +                           dwarf2reader::DW_EH_PE_uleb128 |
   1.231 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.232 +  EXPECT_TRUE(reader.ValidEncoding(
   1.233 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.234 +                           dwarf2reader::DW_EH_PE_udata2 |
   1.235 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.236 +  EXPECT_TRUE(reader.ValidEncoding(
   1.237 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.238 +                           dwarf2reader::DW_EH_PE_udata4 |
   1.239 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.240 +  EXPECT_TRUE(reader.ValidEncoding(
   1.241 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.242 +                           dwarf2reader::DW_EH_PE_udata8 |
   1.243 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.244 +  EXPECT_TRUE(reader.ValidEncoding(
   1.245 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.246 +                           dwarf2reader::DW_EH_PE_sleb128 |
   1.247 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.248 +  EXPECT_TRUE(reader.ValidEncoding(
   1.249 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.250 +                           dwarf2reader::DW_EH_PE_sdata2 |
   1.251 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.252 +  EXPECT_TRUE(reader.ValidEncoding(
   1.253 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.254 +                           dwarf2reader::DW_EH_PE_sdata4 |
   1.255 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.256 +  EXPECT_TRUE(reader.ValidEncoding(
   1.257 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.258 +                           dwarf2reader::DW_EH_PE_sdata8 |
   1.259 +                           dwarf2reader::DW_EH_PE_pcrel)));
   1.260 +  EXPECT_TRUE(reader.ValidEncoding(
   1.261 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.262 +                           dwarf2reader::DW_EH_PE_absptr |
   1.263 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.264 +  EXPECT_TRUE(reader.ValidEncoding(
   1.265 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.266 +                           dwarf2reader::DW_EH_PE_uleb128 |
   1.267 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.268 +  EXPECT_TRUE(reader.ValidEncoding(
   1.269 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.270 +                           dwarf2reader::DW_EH_PE_udata2 |
   1.271 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.272 +  EXPECT_TRUE(reader.ValidEncoding(
   1.273 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.274 +                           dwarf2reader::DW_EH_PE_udata4 |
   1.275 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.276 +  EXPECT_TRUE(reader.ValidEncoding(
   1.277 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.278 +                           dwarf2reader::DW_EH_PE_udata8 |
   1.279 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.280 +  EXPECT_TRUE(reader.ValidEncoding(
   1.281 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.282 +                           dwarf2reader::DW_EH_PE_sleb128 |
   1.283 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.284 +  EXPECT_TRUE(reader.ValidEncoding(
   1.285 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.286 +                           dwarf2reader::DW_EH_PE_sdata2 |
   1.287 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.288 +  EXPECT_TRUE(reader.ValidEncoding(
   1.289 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.290 +                           dwarf2reader::DW_EH_PE_sdata4 |
   1.291 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.292 +  EXPECT_TRUE(reader.ValidEncoding(
   1.293 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.294 +                           dwarf2reader::DW_EH_PE_sdata8 |
   1.295 +                           dwarf2reader::DW_EH_PE_textrel)));
   1.296 +  EXPECT_TRUE(reader.ValidEncoding(
   1.297 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.298 +                           dwarf2reader::DW_EH_PE_absptr |
   1.299 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.300 +  EXPECT_TRUE(reader.ValidEncoding(
   1.301 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.302 +                           dwarf2reader::DW_EH_PE_uleb128 |
   1.303 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.304 +  EXPECT_TRUE(reader.ValidEncoding(
   1.305 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.306 +                           dwarf2reader::DW_EH_PE_udata2 |
   1.307 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.308 +  EXPECT_TRUE(reader.ValidEncoding(
   1.309 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.310 +                           dwarf2reader::DW_EH_PE_udata4 |
   1.311 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.312 +  EXPECT_TRUE(reader.ValidEncoding(
   1.313 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.314 +                           dwarf2reader::DW_EH_PE_udata8 |
   1.315 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.316 +  EXPECT_TRUE(reader.ValidEncoding(
   1.317 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.318 +                           dwarf2reader::DW_EH_PE_sleb128 |
   1.319 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.320 +  EXPECT_TRUE(reader.ValidEncoding(
   1.321 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.322 +                           dwarf2reader::DW_EH_PE_sdata2 |
   1.323 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.324 +  EXPECT_TRUE(reader.ValidEncoding(
   1.325 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.326 +                           dwarf2reader::DW_EH_PE_sdata4 |
   1.327 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.328 +  EXPECT_TRUE(reader.ValidEncoding(
   1.329 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.330 +                           dwarf2reader::DW_EH_PE_sdata8 |
   1.331 +                           dwarf2reader::DW_EH_PE_datarel)));
   1.332 +  EXPECT_TRUE(reader.ValidEncoding(
   1.333 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.334 +                           dwarf2reader::DW_EH_PE_absptr |
   1.335 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.336 +  EXPECT_TRUE(reader.ValidEncoding(
   1.337 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.338 +                           dwarf2reader::DW_EH_PE_uleb128 |
   1.339 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.340 +  EXPECT_TRUE(reader.ValidEncoding(
   1.341 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.342 +                           dwarf2reader::DW_EH_PE_udata2 |
   1.343 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.344 +  EXPECT_TRUE(reader.ValidEncoding(
   1.345 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.346 +                           dwarf2reader::DW_EH_PE_udata4 |
   1.347 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.348 +  EXPECT_TRUE(reader.ValidEncoding(
   1.349 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.350 +                           dwarf2reader::DW_EH_PE_udata8 |
   1.351 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.352 +  EXPECT_TRUE(reader.ValidEncoding(
   1.353 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.354 +                           dwarf2reader::DW_EH_PE_sleb128 |
   1.355 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.356 +  EXPECT_TRUE(reader.ValidEncoding(
   1.357 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.358 +                           dwarf2reader::DW_EH_PE_sdata2 |
   1.359 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.360 +  EXPECT_TRUE(reader.ValidEncoding(
   1.361 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.362 +                           dwarf2reader::DW_EH_PE_sdata4 |
   1.363 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.364 +  EXPECT_TRUE(reader.ValidEncoding(
   1.365 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
   1.366 +                           dwarf2reader::DW_EH_PE_sdata8 |
   1.367 +                           dwarf2reader::DW_EH_PE_funcrel)));
   1.368 +
   1.369 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x05)));
   1.370 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x07)));
   1.371 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x0d)));
   1.372 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x0f)));
   1.373 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x51)));
   1.374 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x60)));
   1.375 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x70)));
   1.376 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0xf0)));
   1.377 +  EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0xd0)));
   1.378 +}
   1.379 +
   1.380 +TEST_F(ReaderDeathTest, DW_EH_PE_omit) {
   1.381 +  static const char data[1] = { 42 };
   1.382 +  ByteReader reader(ENDIANNESS_BIG);
   1.383 +  reader.SetAddressSize(4);
   1.384 +  EXPECT_DEATH(reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_omit,
   1.385 +                                         &pointer_size),
   1.386 +               "encoding != DW_EH_PE_omit");
   1.387 +}
   1.388 +
   1.389 +TEST_F(Reader, DW_EH_PE_absptr4) {
   1.390 +  static const char data[] = { 0x27, 0x57, 0xea, 0x40 };
   1.391 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.392 +  reader.SetAddressSize(4);
   1.393 +  EXPECT_EQ(0x40ea5727U,
   1.394 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_absptr,
   1.395 +                                      &pointer_size));
   1.396 +  EXPECT_EQ(4U, pointer_size);
   1.397 +}
   1.398 +
   1.399 +TEST_F(Reader, DW_EH_PE_absptr8) {
   1.400 +  static const char data[] = {
   1.401 +    0x60, 0x27, 0x57, 0xea, 0x40, 0xc2, 0x98, 0x05, 0x01, 0x50
   1.402 +  };
   1.403 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.404 +  reader.SetAddressSize(8);
   1.405 +  EXPECT_EQ(0x010598c240ea5727ULL,
   1.406 +            reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_absptr,
   1.407 +                                      &pointer_size));
   1.408 +  EXPECT_EQ(8U, pointer_size);
   1.409 +}
   1.410 +
   1.411 +TEST_F(Reader, DW_EH_PE_uleb128) {
   1.412 +  static const char data[] = { 0x81, 0x84, 0x4c };
   1.413 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.414 +  reader.SetAddressSize(4);
   1.415 +  EXPECT_EQ(0x130201U,
   1.416 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_uleb128,
   1.417 +                                      &pointer_size));
   1.418 +  EXPECT_EQ(3U, pointer_size);
   1.419 +}
   1.420 +
   1.421 +TEST_F(Reader, DW_EH_PE_udata2) {
   1.422 +  static const char data[] = { 0xf4, 0x8d };
   1.423 +  ByteReader reader(ENDIANNESS_BIG);
   1.424 +  reader.SetAddressSize(4);
   1.425 +  EXPECT_EQ(0xf48dU,
   1.426 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_udata2,
   1.427 +                                      &pointer_size));
   1.428 +  EXPECT_EQ(2U, pointer_size);
   1.429 +}
   1.430 +
   1.431 +TEST_F(Reader, DW_EH_PE_udata4) {
   1.432 +  static const char data[] = { 0xb2, 0x68, 0xa5, 0x62, 0x8f, 0x8b };
   1.433 +  ByteReader reader(ENDIANNESS_BIG);
   1.434 +  reader.SetAddressSize(8);
   1.435 +  EXPECT_EQ(0xa5628f8b,
   1.436 +            reader.ReadEncodedPointer(data + 2, dwarf2reader::DW_EH_PE_udata4,
   1.437 +                                      &pointer_size));
   1.438 +  EXPECT_EQ(4U, pointer_size);
   1.439 +}
   1.440 +
   1.441 +TEST_F(Reader, DW_EH_PE_udata8Addr8) {
   1.442 +  static const char data[] = {
   1.443 +    0x27, 0x04, 0x73, 0x04, 0x69, 0x9f, 0x19, 0xed, 0x8f, 0xfe
   1.444 +  };
   1.445 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.446 +  reader.SetAddressSize(8);
   1.447 +  EXPECT_EQ(0x8fed199f69047304ULL,
   1.448 +            reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_udata8,
   1.449 +                                        &pointer_size));
   1.450 +  EXPECT_EQ(8U, pointer_size);
   1.451 +}
   1.452 +
   1.453 +TEST_F(Reader, DW_EH_PE_udata8Addr4) {
   1.454 +  static const char data[] = {
   1.455 +    0x27, 0x04, 0x73, 0x04, 0x69, 0x9f, 0x19, 0xed, 0x8f, 0xfe
   1.456 +  };
   1.457 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.458 +  reader.SetAddressSize(4);
   1.459 +  EXPECT_EQ(0x69047304ULL,
   1.460 +            reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_udata8,
   1.461 +                                        &pointer_size));
   1.462 +  EXPECT_EQ(8U, pointer_size);
   1.463 +}
   1.464 +
   1.465 +TEST_F(Reader, DW_EH_PE_sleb128) {
   1.466 +  static const char data[] = { 0x42, 0xff, 0xfb, 0x73 };
   1.467 +  ByteReader reader(ENDIANNESS_BIG);
   1.468 +  reader.SetAddressSize(4);
   1.469 +  EXPECT_EQ(-0x030201U & 0xffffffff,
   1.470 +            reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_sleb128,
   1.471 +                                        &pointer_size));
   1.472 +  EXPECT_EQ(3U, pointer_size);
   1.473 +}
   1.474 +
   1.475 +TEST_F(Reader, DW_EH_PE_sdata2) {
   1.476 +  static const char data[] = { 0xb9, 0xbf };
   1.477 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.478 +  reader.SetAddressSize(8);
   1.479 +  EXPECT_EQ(0xffffffffffffbfb9ULL,
   1.480 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_sdata2,
   1.481 +                                        &pointer_size));
   1.482 +  EXPECT_EQ(2U, pointer_size);
   1.483 +}
   1.484 +
   1.485 +TEST_F(Reader, DW_EH_PE_sdata4) {
   1.486 +  static const char data[] = { 0xa0, 0xca, 0xf2, 0xb8, 0xc2, 0xad };
   1.487 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.488 +  reader.SetAddressSize(8);
   1.489 +  EXPECT_EQ(0xffffffffadc2b8f2ULL,
   1.490 +            reader.ReadEncodedPointer(data + 2, dwarf2reader::DW_EH_PE_sdata4,
   1.491 +                                        &pointer_size));
   1.492 +  EXPECT_EQ(4U, pointer_size);
   1.493 +}
   1.494 +
   1.495 +TEST_F(Reader, DW_EH_PE_sdata8) {
   1.496 +  static const char data[] = {
   1.497 +    0xf6, 0x66, 0x57, 0x79, 0xe0, 0x0c, 0x9b, 0x26, 0x87
   1.498 +  };
   1.499 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.500 +  reader.SetAddressSize(8);
   1.501 +  EXPECT_EQ(0x87269b0ce0795766ULL,
   1.502 +            reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_sdata8,
   1.503 +                                        &pointer_size));
   1.504 +  EXPECT_EQ(8U, pointer_size);
   1.505 +}
   1.506 +
   1.507 +TEST_F(Reader, DW_EH_PE_pcrel) {
   1.508 +  static const char data[] = { 0x4a, 0x8b, 0x1b, 0x14, 0xc8, 0xc4, 0x02, 0xce };
   1.509 +  ByteReader reader(ENDIANNESS_BIG);
   1.510 +  reader.SetAddressSize(4);
   1.511 +  DwarfPointerEncoding encoding =
   1.512 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_pcrel
   1.513 +                           | dwarf2reader::DW_EH_PE_absptr);
   1.514 +  reader.SetCFIDataBase(0x89951377, data);
   1.515 +  EXPECT_EQ(0x89951377 + 3 + 0x14c8c402,
   1.516 +            reader.ReadEncodedPointer(data + 3, encoding, &pointer_size));
   1.517 +  EXPECT_EQ(4U, pointer_size);
   1.518 +}
   1.519 +
   1.520 +TEST_F(Reader, DW_EH_PE_textrel) {
   1.521 +  static const char data[] = { 0xd9, 0x0d, 0x05, 0x17, 0xc9, 0x7a, 0x42, 0x1e };
   1.522 +  ByteReader reader(ENDIANNESS_LITTLE);
   1.523 +  reader.SetAddressSize(4);
   1.524 +  reader.SetTextBase(0xb91beaf0);
   1.525 +  DwarfPointerEncoding encoding =
   1.526 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_textrel
   1.527 +                           | dwarf2reader::DW_EH_PE_sdata2);
   1.528 +  EXPECT_EQ((0xb91beaf0 + 0xffffc917) & 0xffffffff,
   1.529 +            reader.ReadEncodedPointer(data + 3, encoding, &pointer_size));
   1.530 +  EXPECT_EQ(2U, pointer_size);
   1.531 +}
   1.532 +
   1.533 +TEST_F(Reader, DW_EH_PE_datarel) {
   1.534 +  static const char data[] = { 0x16, 0xf2, 0xbb, 0x82, 0x68, 0xa7, 0xbc, 0x39 };
   1.535 +  ByteReader reader(ENDIANNESS_BIG);
   1.536 +  reader.SetAddressSize(8);
   1.537 +  reader.SetDataBase(0xbef308bd25ce74f0ULL);
   1.538 +  DwarfPointerEncoding encoding =
   1.539 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_datarel
   1.540 +                           | dwarf2reader::DW_EH_PE_sleb128);
   1.541 +  EXPECT_EQ(0xbef308bd25ce74f0ULL + 0xfffffffffffa013bULL,
   1.542 +            reader.ReadEncodedPointer(data + 2, encoding, &pointer_size));
   1.543 +  EXPECT_EQ(3U, pointer_size);
   1.544 +}
   1.545 +
   1.546 +TEST_F(Reader, DW_EH_PE_funcrel) {
   1.547 +  static const char data[] = { 0x84, 0xf8, 0x14, 0x01, 0x61, 0xd1, 0x48, 0xc9 };
   1.548 +  ByteReader reader(ENDIANNESS_BIG);
   1.549 +  reader.SetAddressSize(4);
   1.550 +  reader.SetFunctionBase(0x823c3520);
   1.551 +  DwarfPointerEncoding encoding =
   1.552 +      DwarfPointerEncoding(dwarf2reader::DW_EH_PE_funcrel
   1.553 +                           | dwarf2reader::DW_EH_PE_udata2);
   1.554 +  EXPECT_EQ(0x823c3520 + 0xd148,
   1.555 +            reader.ReadEncodedPointer(data + 5, encoding, &pointer_size));
   1.556 +  EXPECT_EQ(2U, pointer_size);
   1.557 +}
   1.558 +
   1.559 +TEST(UsableBase, CFI) {
   1.560 +  static const char data[1] = { 0x42 };
   1.561 +  ByteReader reader(ENDIANNESS_BIG);
   1.562 +  reader.SetCFIDataBase(0xb31cbd20, data);
   1.563 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
   1.564 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
   1.565 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
   1.566 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
   1.567 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
   1.568 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
   1.569 +  EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
   1.570 +}
   1.571 +
   1.572 +TEST(UsableBase, Text) {
   1.573 +  ByteReader reader(ENDIANNESS_BIG);
   1.574 +  reader.SetTextBase(0xa899ccb9);
   1.575 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
   1.576 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
   1.577 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
   1.578 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
   1.579 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
   1.580 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
   1.581 +  EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
   1.582 +}
   1.583 +
   1.584 +TEST(UsableBase, Data) {
   1.585 +  ByteReader reader(ENDIANNESS_BIG);
   1.586 +  reader.SetDataBase(0xf7b10bcd);
   1.587 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
   1.588 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
   1.589 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
   1.590 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
   1.591 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
   1.592 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
   1.593 +  EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
   1.594 +}
   1.595 +
   1.596 +TEST(UsableBase, Function) {
   1.597 +  ByteReader reader(ENDIANNESS_BIG);
   1.598 +  reader.SetFunctionBase(0xc2c0ed81);
   1.599 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
   1.600 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
   1.601 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
   1.602 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
   1.603 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
   1.604 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
   1.605 +  EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
   1.606 +}
   1.607 +
   1.608 +TEST(UsableBase, ClearFunction) {
   1.609 +  ByteReader reader(ENDIANNESS_BIG);
   1.610 +  reader.SetFunctionBase(0xc2c0ed81);
   1.611 +  reader.ClearFunctionBase();
   1.612 +  EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
   1.613 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
   1.614 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
   1.615 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
   1.616 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
   1.617 +  EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
   1.618 +  EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
   1.619 +}
   1.620 +
   1.621 +struct AlignedFixture {
   1.622 +  AlignedFixture() : reader(ENDIANNESS_BIG) { reader.SetAddressSize(4); }
   1.623 +  static const char data[10];
   1.624 +  ByteReader reader;
   1.625 +  size_t pointer_size;
   1.626 +};
   1.627 +  
   1.628 +const char AlignedFixture::data[10] = {
   1.629 +  0xfe, 0x6e, 0x93, 0xd8, 0x34, 0xd5, 0x1c, 0xd3, 0xac, 0x2b
   1.630 +};
   1.631 +
   1.632 +class Aligned: public AlignedFixture, public Test { };
   1.633 +
   1.634 +TEST_F(Aligned, DW_EH_PE_aligned0) {
   1.635 +  reader.SetCFIDataBase(0xb440305c, data);
   1.636 +  EXPECT_EQ(0xfe6e93d8U,
   1.637 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
   1.638 +                                      &pointer_size));
   1.639 +  EXPECT_EQ(4U, pointer_size);
   1.640 +}
   1.641 +
   1.642 +TEST_F(Aligned, DW_EH_PE_aligned1) {
   1.643 +  reader.SetCFIDataBase(0xb440305d, data);
   1.644 +  EXPECT_EQ(0xd834d51cU,
   1.645 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
   1.646 +                                      &pointer_size));
   1.647 +  EXPECT_EQ(7U, pointer_size);
   1.648 +}
   1.649 +
   1.650 +TEST_F(Aligned, DW_EH_PE_aligned2) {
   1.651 +  reader.SetCFIDataBase(0xb440305e, data);
   1.652 +  EXPECT_EQ(0x93d834d5U,
   1.653 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
   1.654 +                                      &pointer_size));
   1.655 +  EXPECT_EQ(6U, pointer_size);
   1.656 +}
   1.657 +
   1.658 +TEST_F(Aligned, DW_EH_PE_aligned3) {
   1.659 +  reader.SetCFIDataBase(0xb440305f, data);
   1.660 +  EXPECT_EQ(0x6e93d834U,
   1.661 +            reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
   1.662 +                                      &pointer_size));
   1.663 +  EXPECT_EQ(5U, pointer_size);
   1.664 +}
   1.665 +
   1.666 +TEST_F(Aligned, DW_EH_PE_aligned11) {
   1.667 +  reader.SetCFIDataBase(0xb4403061, data);
   1.668 +  EXPECT_EQ(0xd834d51cU,
   1.669 +            reader.ReadEncodedPointer(data + 1,
   1.670 +                                      dwarf2reader::DW_EH_PE_aligned,
   1.671 +                                      &pointer_size));
   1.672 +  EXPECT_EQ(6U, pointer_size);
   1.673 +}
   1.674 +
   1.675 +TEST_F(Aligned, DW_EH_PE_aligned30) {
   1.676 +  reader.SetCFIDataBase(0xb4403063, data);
   1.677 +  EXPECT_EQ(0x6e93d834U,
   1.678 +            reader.ReadEncodedPointer(data + 1,
   1.679 +                                      dwarf2reader::DW_EH_PE_aligned,
   1.680 +                                      &pointer_size));
   1.681 +  EXPECT_EQ(4U, pointer_size);
   1.682 +}
   1.683 +
   1.684 +TEST_F(Aligned, DW_EH_PE_aligned23) {
   1.685 +  reader.SetCFIDataBase(0xb4403062, data);
   1.686 +  EXPECT_EQ(0x1cd3ac2bU,
   1.687 +            reader.ReadEncodedPointer(data + 3,
   1.688 +                                      dwarf2reader::DW_EH_PE_aligned,
   1.689 +                                      &pointer_size));
   1.690 +  EXPECT_EQ(7U, pointer_size);
   1.691 +}
   1.692 +
   1.693 +TEST_F(Aligned, DW_EH_PE_aligned03) {
   1.694 +  reader.SetCFIDataBase(0xb4403064, data);
   1.695 +  EXPECT_EQ(0x34d51cd3U,
   1.696 +            reader.ReadEncodedPointer(data + 3,
   1.697 +                                      dwarf2reader::DW_EH_PE_aligned,
   1.698 +                                      &pointer_size));
   1.699 +  EXPECT_EQ(5U, pointer_size);
   1.700 +}  

mercurial