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

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

michael@0 1 // Copyright (c) 2010, Google Inc.
michael@0 2 // All rights reserved.
michael@0 3 //
michael@0 4 // Redistribution and use in source and binary forms, with or without
michael@0 5 // modification, are permitted provided that the following conditions are
michael@0 6 // met:
michael@0 7 //
michael@0 8 // * Redistributions of source code must retain the above copyright
michael@0 9 // notice, this list of conditions and the following disclaimer.
michael@0 10 // * Redistributions in binary form must reproduce the above
michael@0 11 // copyright notice, this list of conditions and the following disclaimer
michael@0 12 // in the documentation and/or other materials provided with the
michael@0 13 // distribution.
michael@0 14 // * Neither the name of Google Inc. nor the names of its
michael@0 15 // contributors may be used to endorse or promote products derived from
michael@0 16 // this software without specific prior written permission.
michael@0 17 //
michael@0 18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0 19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0 20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0 21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
michael@0 22 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
michael@0 23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
michael@0 24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
michael@0 25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
michael@0 26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
michael@0 27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
michael@0 28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 29
michael@0 30 // Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com>
michael@0 31
michael@0 32 // bytereader_unittest.cc: Unit tests for dwarf2reader::ByteReader
michael@0 33
michael@0 34 #include <string>
michael@0 35
michael@0 36 #include "breakpad_googletest_includes.h"
michael@0 37 #include "common/dwarf/bytereader.h"
michael@0 38 #include "common/dwarf/bytereader-inl.h"
michael@0 39 #include "common/dwarf/cfi_assembler.h"
michael@0 40 #include "common/using_std_string.h"
michael@0 41
michael@0 42 using dwarf2reader::ByteReader;
michael@0 43 using dwarf2reader::DwarfPointerEncoding;
michael@0 44 using dwarf2reader::ENDIANNESS_BIG;
michael@0 45 using dwarf2reader::ENDIANNESS_LITTLE;
michael@0 46 using google_breakpad::CFISection;
michael@0 47 using google_breakpad::test_assembler::Label;
michael@0 48 using google_breakpad::test_assembler::kBigEndian;
michael@0 49 using google_breakpad::test_assembler::kLittleEndian;
michael@0 50 using google_breakpad::test_assembler::Section;
michael@0 51 using testing::Test;
michael@0 52
michael@0 53 struct ReaderFixture {
michael@0 54 string contents;
michael@0 55 size_t pointer_size;
michael@0 56 };
michael@0 57
michael@0 58 class Reader: public ReaderFixture, public Test { };
michael@0 59 class ReaderDeathTest: public ReaderFixture, public Test { };
michael@0 60
michael@0 61 TEST_F(Reader, SimpleConstructor) {
michael@0 62 ByteReader reader(ENDIANNESS_BIG);
michael@0 63 reader.SetAddressSize(4);
michael@0 64 CFISection section(kBigEndian, 4);
michael@0 65 section
michael@0 66 .D8(0xc0)
michael@0 67 .D16(0xcf0d)
michael@0 68 .D32(0x96fdd219)
michael@0 69 .D64(0xbbf55fef0825f117ULL)
michael@0 70 .ULEB128(0xa0927048ba8121afULL)
michael@0 71 .LEB128(-0x4f337badf4483f83LL)
michael@0 72 .D32(0xfec319c9);
michael@0 73 ASSERT_TRUE(section.GetContents(&contents));
michael@0 74 const char *data = contents.data();
michael@0 75 EXPECT_EQ(0xc0U, reader.ReadOneByte(data));
michael@0 76 EXPECT_EQ(0xcf0dU, reader.ReadTwoBytes(data + 1));
michael@0 77 EXPECT_EQ(0x96fdd219U, reader.ReadFourBytes(data + 3));
michael@0 78 EXPECT_EQ(0xbbf55fef0825f117ULL, reader.ReadEightBytes(data + 7));
michael@0 79 size_t leb128_size;
michael@0 80 EXPECT_EQ(0xa0927048ba8121afULL,
michael@0 81 reader.ReadUnsignedLEB128(data + 15, &leb128_size));
michael@0 82 EXPECT_EQ(10U, leb128_size);
michael@0 83 EXPECT_EQ(-0x4f337badf4483f83LL,
michael@0 84 reader.ReadSignedLEB128(data + 25, &leb128_size));
michael@0 85 EXPECT_EQ(10U, leb128_size);
michael@0 86 EXPECT_EQ(0xfec319c9, reader.ReadAddress(data + 35));
michael@0 87 }
michael@0 88
michael@0 89 TEST_F(Reader, ValidEncodings) {
michael@0 90 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 91 EXPECT_TRUE(reader.ValidEncoding(
michael@0 92 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr)));
michael@0 93 EXPECT_TRUE(reader.ValidEncoding(
michael@0 94 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_omit)));
michael@0 95 EXPECT_TRUE(reader.ValidEncoding(
michael@0 96 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_aligned)));
michael@0 97 EXPECT_TRUE(reader.ValidEncoding(
michael@0 98 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128)));
michael@0 99 EXPECT_TRUE(reader.ValidEncoding(
michael@0 100 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2)));
michael@0 101 EXPECT_TRUE(reader.ValidEncoding(
michael@0 102 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4)));
michael@0 103 EXPECT_TRUE(reader.ValidEncoding(
michael@0 104 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8)));
michael@0 105 EXPECT_TRUE(reader.ValidEncoding(
michael@0 106 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128)));
michael@0 107 EXPECT_TRUE(reader.ValidEncoding(
michael@0 108 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2)));
michael@0 109 EXPECT_TRUE(reader.ValidEncoding(
michael@0 110 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4)));
michael@0 111 EXPECT_TRUE(reader.ValidEncoding(
michael@0 112 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8)));
michael@0 113 EXPECT_TRUE(reader.ValidEncoding(
michael@0 114 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
michael@0 115 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 116 EXPECT_TRUE(reader.ValidEncoding(
michael@0 117 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
michael@0 118 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 119 EXPECT_TRUE(reader.ValidEncoding(
michael@0 120 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
michael@0 121 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 122 EXPECT_TRUE(reader.ValidEncoding(
michael@0 123 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
michael@0 124 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 125 EXPECT_TRUE(reader.ValidEncoding(
michael@0 126 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
michael@0 127 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 128 EXPECT_TRUE(reader.ValidEncoding(
michael@0 129 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
michael@0 130 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 131 EXPECT_TRUE(reader.ValidEncoding(
michael@0 132 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
michael@0 133 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 134 EXPECT_TRUE(reader.ValidEncoding(
michael@0 135 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
michael@0 136 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 137 EXPECT_TRUE(reader.ValidEncoding(
michael@0 138 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
michael@0 139 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 140 EXPECT_TRUE(reader.ValidEncoding(
michael@0 141 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
michael@0 142 dwarf2reader::DW_EH_PE_textrel)));
michael@0 143 EXPECT_TRUE(reader.ValidEncoding(
michael@0 144 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
michael@0 145 dwarf2reader::DW_EH_PE_textrel)));
michael@0 146 EXPECT_TRUE(reader.ValidEncoding(
michael@0 147 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
michael@0 148 dwarf2reader::DW_EH_PE_textrel)));
michael@0 149 EXPECT_TRUE(reader.ValidEncoding(
michael@0 150 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
michael@0 151 dwarf2reader::DW_EH_PE_textrel)));
michael@0 152 EXPECT_TRUE(reader.ValidEncoding(
michael@0 153 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
michael@0 154 dwarf2reader::DW_EH_PE_textrel)));
michael@0 155 EXPECT_TRUE(reader.ValidEncoding(
michael@0 156 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
michael@0 157 dwarf2reader::DW_EH_PE_textrel)));
michael@0 158 EXPECT_TRUE(reader.ValidEncoding(
michael@0 159 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
michael@0 160 dwarf2reader::DW_EH_PE_textrel)));
michael@0 161 EXPECT_TRUE(reader.ValidEncoding(
michael@0 162 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
michael@0 163 dwarf2reader::DW_EH_PE_textrel)));
michael@0 164 EXPECT_TRUE(reader.ValidEncoding(
michael@0 165 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
michael@0 166 dwarf2reader::DW_EH_PE_textrel)));
michael@0 167 EXPECT_TRUE(reader.ValidEncoding(
michael@0 168 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
michael@0 169 dwarf2reader::DW_EH_PE_datarel)));
michael@0 170 EXPECT_TRUE(reader.ValidEncoding(
michael@0 171 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
michael@0 172 dwarf2reader::DW_EH_PE_datarel)));
michael@0 173 EXPECT_TRUE(reader.ValidEncoding(
michael@0 174 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
michael@0 175 dwarf2reader::DW_EH_PE_datarel)));
michael@0 176 EXPECT_TRUE(reader.ValidEncoding(
michael@0 177 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
michael@0 178 dwarf2reader::DW_EH_PE_datarel)));
michael@0 179 EXPECT_TRUE(reader.ValidEncoding(
michael@0 180 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
michael@0 181 dwarf2reader::DW_EH_PE_datarel)));
michael@0 182 EXPECT_TRUE(reader.ValidEncoding(
michael@0 183 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
michael@0 184 dwarf2reader::DW_EH_PE_datarel)));
michael@0 185 EXPECT_TRUE(reader.ValidEncoding(
michael@0 186 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
michael@0 187 dwarf2reader::DW_EH_PE_datarel)));
michael@0 188 EXPECT_TRUE(reader.ValidEncoding(
michael@0 189 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
michael@0 190 dwarf2reader::DW_EH_PE_datarel)));
michael@0 191 EXPECT_TRUE(reader.ValidEncoding(
michael@0 192 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
michael@0 193 dwarf2reader::DW_EH_PE_datarel)));
michael@0 194 EXPECT_TRUE(reader.ValidEncoding(
michael@0 195 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_absptr |
michael@0 196 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 197 EXPECT_TRUE(reader.ValidEncoding(
michael@0 198 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_uleb128 |
michael@0 199 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 200 EXPECT_TRUE(reader.ValidEncoding(
michael@0 201 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata2 |
michael@0 202 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 203 EXPECT_TRUE(reader.ValidEncoding(
michael@0 204 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata4 |
michael@0 205 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 206 EXPECT_TRUE(reader.ValidEncoding(
michael@0 207 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_udata8 |
michael@0 208 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 209 EXPECT_TRUE(reader.ValidEncoding(
michael@0 210 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sleb128 |
michael@0 211 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 212 EXPECT_TRUE(reader.ValidEncoding(
michael@0 213 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata2 |
michael@0 214 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 215 EXPECT_TRUE(reader.ValidEncoding(
michael@0 216 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata4 |
michael@0 217 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 218 EXPECT_TRUE(reader.ValidEncoding(
michael@0 219 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_sdata8 |
michael@0 220 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 221 EXPECT_TRUE(reader.ValidEncoding(
michael@0 222 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 223 dwarf2reader::DW_EH_PE_absptr |
michael@0 224 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 225 EXPECT_TRUE(reader.ValidEncoding(
michael@0 226 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 227 dwarf2reader::DW_EH_PE_uleb128 |
michael@0 228 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 229 EXPECT_TRUE(reader.ValidEncoding(
michael@0 230 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 231 dwarf2reader::DW_EH_PE_udata2 |
michael@0 232 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 233 EXPECT_TRUE(reader.ValidEncoding(
michael@0 234 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 235 dwarf2reader::DW_EH_PE_udata4 |
michael@0 236 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 237 EXPECT_TRUE(reader.ValidEncoding(
michael@0 238 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 239 dwarf2reader::DW_EH_PE_udata8 |
michael@0 240 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 241 EXPECT_TRUE(reader.ValidEncoding(
michael@0 242 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 243 dwarf2reader::DW_EH_PE_sleb128 |
michael@0 244 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 245 EXPECT_TRUE(reader.ValidEncoding(
michael@0 246 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 247 dwarf2reader::DW_EH_PE_sdata2 |
michael@0 248 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 249 EXPECT_TRUE(reader.ValidEncoding(
michael@0 250 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 251 dwarf2reader::DW_EH_PE_sdata4 |
michael@0 252 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 253 EXPECT_TRUE(reader.ValidEncoding(
michael@0 254 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 255 dwarf2reader::DW_EH_PE_sdata8 |
michael@0 256 dwarf2reader::DW_EH_PE_pcrel)));
michael@0 257 EXPECT_TRUE(reader.ValidEncoding(
michael@0 258 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 259 dwarf2reader::DW_EH_PE_absptr |
michael@0 260 dwarf2reader::DW_EH_PE_textrel)));
michael@0 261 EXPECT_TRUE(reader.ValidEncoding(
michael@0 262 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 263 dwarf2reader::DW_EH_PE_uleb128 |
michael@0 264 dwarf2reader::DW_EH_PE_textrel)));
michael@0 265 EXPECT_TRUE(reader.ValidEncoding(
michael@0 266 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 267 dwarf2reader::DW_EH_PE_udata2 |
michael@0 268 dwarf2reader::DW_EH_PE_textrel)));
michael@0 269 EXPECT_TRUE(reader.ValidEncoding(
michael@0 270 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 271 dwarf2reader::DW_EH_PE_udata4 |
michael@0 272 dwarf2reader::DW_EH_PE_textrel)));
michael@0 273 EXPECT_TRUE(reader.ValidEncoding(
michael@0 274 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 275 dwarf2reader::DW_EH_PE_udata8 |
michael@0 276 dwarf2reader::DW_EH_PE_textrel)));
michael@0 277 EXPECT_TRUE(reader.ValidEncoding(
michael@0 278 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 279 dwarf2reader::DW_EH_PE_sleb128 |
michael@0 280 dwarf2reader::DW_EH_PE_textrel)));
michael@0 281 EXPECT_TRUE(reader.ValidEncoding(
michael@0 282 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 283 dwarf2reader::DW_EH_PE_sdata2 |
michael@0 284 dwarf2reader::DW_EH_PE_textrel)));
michael@0 285 EXPECT_TRUE(reader.ValidEncoding(
michael@0 286 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 287 dwarf2reader::DW_EH_PE_sdata4 |
michael@0 288 dwarf2reader::DW_EH_PE_textrel)));
michael@0 289 EXPECT_TRUE(reader.ValidEncoding(
michael@0 290 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 291 dwarf2reader::DW_EH_PE_sdata8 |
michael@0 292 dwarf2reader::DW_EH_PE_textrel)));
michael@0 293 EXPECT_TRUE(reader.ValidEncoding(
michael@0 294 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 295 dwarf2reader::DW_EH_PE_absptr |
michael@0 296 dwarf2reader::DW_EH_PE_datarel)));
michael@0 297 EXPECT_TRUE(reader.ValidEncoding(
michael@0 298 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 299 dwarf2reader::DW_EH_PE_uleb128 |
michael@0 300 dwarf2reader::DW_EH_PE_datarel)));
michael@0 301 EXPECT_TRUE(reader.ValidEncoding(
michael@0 302 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 303 dwarf2reader::DW_EH_PE_udata2 |
michael@0 304 dwarf2reader::DW_EH_PE_datarel)));
michael@0 305 EXPECT_TRUE(reader.ValidEncoding(
michael@0 306 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 307 dwarf2reader::DW_EH_PE_udata4 |
michael@0 308 dwarf2reader::DW_EH_PE_datarel)));
michael@0 309 EXPECT_TRUE(reader.ValidEncoding(
michael@0 310 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 311 dwarf2reader::DW_EH_PE_udata8 |
michael@0 312 dwarf2reader::DW_EH_PE_datarel)));
michael@0 313 EXPECT_TRUE(reader.ValidEncoding(
michael@0 314 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 315 dwarf2reader::DW_EH_PE_sleb128 |
michael@0 316 dwarf2reader::DW_EH_PE_datarel)));
michael@0 317 EXPECT_TRUE(reader.ValidEncoding(
michael@0 318 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 319 dwarf2reader::DW_EH_PE_sdata2 |
michael@0 320 dwarf2reader::DW_EH_PE_datarel)));
michael@0 321 EXPECT_TRUE(reader.ValidEncoding(
michael@0 322 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 323 dwarf2reader::DW_EH_PE_sdata4 |
michael@0 324 dwarf2reader::DW_EH_PE_datarel)));
michael@0 325 EXPECT_TRUE(reader.ValidEncoding(
michael@0 326 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 327 dwarf2reader::DW_EH_PE_sdata8 |
michael@0 328 dwarf2reader::DW_EH_PE_datarel)));
michael@0 329 EXPECT_TRUE(reader.ValidEncoding(
michael@0 330 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 331 dwarf2reader::DW_EH_PE_absptr |
michael@0 332 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 333 EXPECT_TRUE(reader.ValidEncoding(
michael@0 334 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 335 dwarf2reader::DW_EH_PE_uleb128 |
michael@0 336 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 337 EXPECT_TRUE(reader.ValidEncoding(
michael@0 338 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 339 dwarf2reader::DW_EH_PE_udata2 |
michael@0 340 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 341 EXPECT_TRUE(reader.ValidEncoding(
michael@0 342 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 343 dwarf2reader::DW_EH_PE_udata4 |
michael@0 344 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 345 EXPECT_TRUE(reader.ValidEncoding(
michael@0 346 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 347 dwarf2reader::DW_EH_PE_udata8 |
michael@0 348 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 349 EXPECT_TRUE(reader.ValidEncoding(
michael@0 350 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 351 dwarf2reader::DW_EH_PE_sleb128 |
michael@0 352 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 353 EXPECT_TRUE(reader.ValidEncoding(
michael@0 354 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 355 dwarf2reader::DW_EH_PE_sdata2 |
michael@0 356 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 357 EXPECT_TRUE(reader.ValidEncoding(
michael@0 358 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 359 dwarf2reader::DW_EH_PE_sdata4 |
michael@0 360 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 361 EXPECT_TRUE(reader.ValidEncoding(
michael@0 362 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_indirect |
michael@0 363 dwarf2reader::DW_EH_PE_sdata8 |
michael@0 364 dwarf2reader::DW_EH_PE_funcrel)));
michael@0 365
michael@0 366 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x05)));
michael@0 367 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x07)));
michael@0 368 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x0d)));
michael@0 369 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x0f)));
michael@0 370 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x51)));
michael@0 371 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x60)));
michael@0 372 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0x70)));
michael@0 373 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0xf0)));
michael@0 374 EXPECT_FALSE(reader.ValidEncoding(DwarfPointerEncoding(0xd0)));
michael@0 375 }
michael@0 376
michael@0 377 TEST_F(ReaderDeathTest, DW_EH_PE_omit) {
michael@0 378 static const char data[1] = { 42 };
michael@0 379 ByteReader reader(ENDIANNESS_BIG);
michael@0 380 reader.SetAddressSize(4);
michael@0 381 EXPECT_DEATH(reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_omit,
michael@0 382 &pointer_size),
michael@0 383 "encoding != DW_EH_PE_omit");
michael@0 384 }
michael@0 385
michael@0 386 TEST_F(Reader, DW_EH_PE_absptr4) {
michael@0 387 static const char data[] = { 0x27, 0x57, 0xea, 0x40 };
michael@0 388 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 389 reader.SetAddressSize(4);
michael@0 390 EXPECT_EQ(0x40ea5727U,
michael@0 391 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_absptr,
michael@0 392 &pointer_size));
michael@0 393 EXPECT_EQ(4U, pointer_size);
michael@0 394 }
michael@0 395
michael@0 396 TEST_F(Reader, DW_EH_PE_absptr8) {
michael@0 397 static const char data[] = {
michael@0 398 0x60, 0x27, 0x57, 0xea, 0x40, 0xc2, 0x98, 0x05, 0x01, 0x50
michael@0 399 };
michael@0 400 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 401 reader.SetAddressSize(8);
michael@0 402 EXPECT_EQ(0x010598c240ea5727ULL,
michael@0 403 reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_absptr,
michael@0 404 &pointer_size));
michael@0 405 EXPECT_EQ(8U, pointer_size);
michael@0 406 }
michael@0 407
michael@0 408 TEST_F(Reader, DW_EH_PE_uleb128) {
michael@0 409 static const char data[] = { 0x81, 0x84, 0x4c };
michael@0 410 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 411 reader.SetAddressSize(4);
michael@0 412 EXPECT_EQ(0x130201U,
michael@0 413 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_uleb128,
michael@0 414 &pointer_size));
michael@0 415 EXPECT_EQ(3U, pointer_size);
michael@0 416 }
michael@0 417
michael@0 418 TEST_F(Reader, DW_EH_PE_udata2) {
michael@0 419 static const char data[] = { 0xf4, 0x8d };
michael@0 420 ByteReader reader(ENDIANNESS_BIG);
michael@0 421 reader.SetAddressSize(4);
michael@0 422 EXPECT_EQ(0xf48dU,
michael@0 423 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_udata2,
michael@0 424 &pointer_size));
michael@0 425 EXPECT_EQ(2U, pointer_size);
michael@0 426 }
michael@0 427
michael@0 428 TEST_F(Reader, DW_EH_PE_udata4) {
michael@0 429 static const char data[] = { 0xb2, 0x68, 0xa5, 0x62, 0x8f, 0x8b };
michael@0 430 ByteReader reader(ENDIANNESS_BIG);
michael@0 431 reader.SetAddressSize(8);
michael@0 432 EXPECT_EQ(0xa5628f8b,
michael@0 433 reader.ReadEncodedPointer(data + 2, dwarf2reader::DW_EH_PE_udata4,
michael@0 434 &pointer_size));
michael@0 435 EXPECT_EQ(4U, pointer_size);
michael@0 436 }
michael@0 437
michael@0 438 TEST_F(Reader, DW_EH_PE_udata8Addr8) {
michael@0 439 static const char data[] = {
michael@0 440 0x27, 0x04, 0x73, 0x04, 0x69, 0x9f, 0x19, 0xed, 0x8f, 0xfe
michael@0 441 };
michael@0 442 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 443 reader.SetAddressSize(8);
michael@0 444 EXPECT_EQ(0x8fed199f69047304ULL,
michael@0 445 reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_udata8,
michael@0 446 &pointer_size));
michael@0 447 EXPECT_EQ(8U, pointer_size);
michael@0 448 }
michael@0 449
michael@0 450 TEST_F(Reader, DW_EH_PE_udata8Addr4) {
michael@0 451 static const char data[] = {
michael@0 452 0x27, 0x04, 0x73, 0x04, 0x69, 0x9f, 0x19, 0xed, 0x8f, 0xfe
michael@0 453 };
michael@0 454 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 455 reader.SetAddressSize(4);
michael@0 456 EXPECT_EQ(0x69047304ULL,
michael@0 457 reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_udata8,
michael@0 458 &pointer_size));
michael@0 459 EXPECT_EQ(8U, pointer_size);
michael@0 460 }
michael@0 461
michael@0 462 TEST_F(Reader, DW_EH_PE_sleb128) {
michael@0 463 static const char data[] = { 0x42, 0xff, 0xfb, 0x73 };
michael@0 464 ByteReader reader(ENDIANNESS_BIG);
michael@0 465 reader.SetAddressSize(4);
michael@0 466 EXPECT_EQ(-0x030201U & 0xffffffff,
michael@0 467 reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_sleb128,
michael@0 468 &pointer_size));
michael@0 469 EXPECT_EQ(3U, pointer_size);
michael@0 470 }
michael@0 471
michael@0 472 TEST_F(Reader, DW_EH_PE_sdata2) {
michael@0 473 static const char data[] = { 0xb9, 0xbf };
michael@0 474 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 475 reader.SetAddressSize(8);
michael@0 476 EXPECT_EQ(0xffffffffffffbfb9ULL,
michael@0 477 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_sdata2,
michael@0 478 &pointer_size));
michael@0 479 EXPECT_EQ(2U, pointer_size);
michael@0 480 }
michael@0 481
michael@0 482 TEST_F(Reader, DW_EH_PE_sdata4) {
michael@0 483 static const char data[] = { 0xa0, 0xca, 0xf2, 0xb8, 0xc2, 0xad };
michael@0 484 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 485 reader.SetAddressSize(8);
michael@0 486 EXPECT_EQ(0xffffffffadc2b8f2ULL,
michael@0 487 reader.ReadEncodedPointer(data + 2, dwarf2reader::DW_EH_PE_sdata4,
michael@0 488 &pointer_size));
michael@0 489 EXPECT_EQ(4U, pointer_size);
michael@0 490 }
michael@0 491
michael@0 492 TEST_F(Reader, DW_EH_PE_sdata8) {
michael@0 493 static const char data[] = {
michael@0 494 0xf6, 0x66, 0x57, 0x79, 0xe0, 0x0c, 0x9b, 0x26, 0x87
michael@0 495 };
michael@0 496 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 497 reader.SetAddressSize(8);
michael@0 498 EXPECT_EQ(0x87269b0ce0795766ULL,
michael@0 499 reader.ReadEncodedPointer(data + 1, dwarf2reader::DW_EH_PE_sdata8,
michael@0 500 &pointer_size));
michael@0 501 EXPECT_EQ(8U, pointer_size);
michael@0 502 }
michael@0 503
michael@0 504 TEST_F(Reader, DW_EH_PE_pcrel) {
michael@0 505 static const char data[] = { 0x4a, 0x8b, 0x1b, 0x14, 0xc8, 0xc4, 0x02, 0xce };
michael@0 506 ByteReader reader(ENDIANNESS_BIG);
michael@0 507 reader.SetAddressSize(4);
michael@0 508 DwarfPointerEncoding encoding =
michael@0 509 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_pcrel
michael@0 510 | dwarf2reader::DW_EH_PE_absptr);
michael@0 511 reader.SetCFIDataBase(0x89951377, data);
michael@0 512 EXPECT_EQ(0x89951377 + 3 + 0x14c8c402,
michael@0 513 reader.ReadEncodedPointer(data + 3, encoding, &pointer_size));
michael@0 514 EXPECT_EQ(4U, pointer_size);
michael@0 515 }
michael@0 516
michael@0 517 TEST_F(Reader, DW_EH_PE_textrel) {
michael@0 518 static const char data[] = { 0xd9, 0x0d, 0x05, 0x17, 0xc9, 0x7a, 0x42, 0x1e };
michael@0 519 ByteReader reader(ENDIANNESS_LITTLE);
michael@0 520 reader.SetAddressSize(4);
michael@0 521 reader.SetTextBase(0xb91beaf0);
michael@0 522 DwarfPointerEncoding encoding =
michael@0 523 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_textrel
michael@0 524 | dwarf2reader::DW_EH_PE_sdata2);
michael@0 525 EXPECT_EQ((0xb91beaf0 + 0xffffc917) & 0xffffffff,
michael@0 526 reader.ReadEncodedPointer(data + 3, encoding, &pointer_size));
michael@0 527 EXPECT_EQ(2U, pointer_size);
michael@0 528 }
michael@0 529
michael@0 530 TEST_F(Reader, DW_EH_PE_datarel) {
michael@0 531 static const char data[] = { 0x16, 0xf2, 0xbb, 0x82, 0x68, 0xa7, 0xbc, 0x39 };
michael@0 532 ByteReader reader(ENDIANNESS_BIG);
michael@0 533 reader.SetAddressSize(8);
michael@0 534 reader.SetDataBase(0xbef308bd25ce74f0ULL);
michael@0 535 DwarfPointerEncoding encoding =
michael@0 536 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_datarel
michael@0 537 | dwarf2reader::DW_EH_PE_sleb128);
michael@0 538 EXPECT_EQ(0xbef308bd25ce74f0ULL + 0xfffffffffffa013bULL,
michael@0 539 reader.ReadEncodedPointer(data + 2, encoding, &pointer_size));
michael@0 540 EXPECT_EQ(3U, pointer_size);
michael@0 541 }
michael@0 542
michael@0 543 TEST_F(Reader, DW_EH_PE_funcrel) {
michael@0 544 static const char data[] = { 0x84, 0xf8, 0x14, 0x01, 0x61, 0xd1, 0x48, 0xc9 };
michael@0 545 ByteReader reader(ENDIANNESS_BIG);
michael@0 546 reader.SetAddressSize(4);
michael@0 547 reader.SetFunctionBase(0x823c3520);
michael@0 548 DwarfPointerEncoding encoding =
michael@0 549 DwarfPointerEncoding(dwarf2reader::DW_EH_PE_funcrel
michael@0 550 | dwarf2reader::DW_EH_PE_udata2);
michael@0 551 EXPECT_EQ(0x823c3520 + 0xd148,
michael@0 552 reader.ReadEncodedPointer(data + 5, encoding, &pointer_size));
michael@0 553 EXPECT_EQ(2U, pointer_size);
michael@0 554 }
michael@0 555
michael@0 556 TEST(UsableBase, CFI) {
michael@0 557 static const char data[1] = { 0x42 };
michael@0 558 ByteReader reader(ENDIANNESS_BIG);
michael@0 559 reader.SetCFIDataBase(0xb31cbd20, data);
michael@0 560 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
michael@0 561 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
michael@0 562 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
michael@0 563 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
michael@0 564 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
michael@0 565 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
michael@0 566 EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
michael@0 567 }
michael@0 568
michael@0 569 TEST(UsableBase, Text) {
michael@0 570 ByteReader reader(ENDIANNESS_BIG);
michael@0 571 reader.SetTextBase(0xa899ccb9);
michael@0 572 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
michael@0 573 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
michael@0 574 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
michael@0 575 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
michael@0 576 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
michael@0 577 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
michael@0 578 EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
michael@0 579 }
michael@0 580
michael@0 581 TEST(UsableBase, Data) {
michael@0 582 ByteReader reader(ENDIANNESS_BIG);
michael@0 583 reader.SetDataBase(0xf7b10bcd);
michael@0 584 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
michael@0 585 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
michael@0 586 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
michael@0 587 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
michael@0 588 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
michael@0 589 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
michael@0 590 EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
michael@0 591 }
michael@0 592
michael@0 593 TEST(UsableBase, Function) {
michael@0 594 ByteReader reader(ENDIANNESS_BIG);
michael@0 595 reader.SetFunctionBase(0xc2c0ed81);
michael@0 596 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
michael@0 597 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
michael@0 598 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
michael@0 599 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
michael@0 600 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
michael@0 601 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
michael@0 602 EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
michael@0 603 }
michael@0 604
michael@0 605 TEST(UsableBase, ClearFunction) {
michael@0 606 ByteReader reader(ENDIANNESS_BIG);
michael@0 607 reader.SetFunctionBase(0xc2c0ed81);
michael@0 608 reader.ClearFunctionBase();
michael@0 609 EXPECT_TRUE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_absptr));
michael@0 610 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_pcrel));
michael@0 611 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_textrel));
michael@0 612 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_datarel));
michael@0 613 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_funcrel));
michael@0 614 EXPECT_FALSE(reader.UsableEncoding(dwarf2reader::DW_EH_PE_omit));
michael@0 615 EXPECT_FALSE(reader.UsableEncoding(DwarfPointerEncoding(0x60)));
michael@0 616 }
michael@0 617
michael@0 618 struct AlignedFixture {
michael@0 619 AlignedFixture() : reader(ENDIANNESS_BIG) { reader.SetAddressSize(4); }
michael@0 620 static const char data[10];
michael@0 621 ByteReader reader;
michael@0 622 size_t pointer_size;
michael@0 623 };
michael@0 624
michael@0 625 const char AlignedFixture::data[10] = {
michael@0 626 0xfe, 0x6e, 0x93, 0xd8, 0x34, 0xd5, 0x1c, 0xd3, 0xac, 0x2b
michael@0 627 };
michael@0 628
michael@0 629 class Aligned: public AlignedFixture, public Test { };
michael@0 630
michael@0 631 TEST_F(Aligned, DW_EH_PE_aligned0) {
michael@0 632 reader.SetCFIDataBase(0xb440305c, data);
michael@0 633 EXPECT_EQ(0xfe6e93d8U,
michael@0 634 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
michael@0 635 &pointer_size));
michael@0 636 EXPECT_EQ(4U, pointer_size);
michael@0 637 }
michael@0 638
michael@0 639 TEST_F(Aligned, DW_EH_PE_aligned1) {
michael@0 640 reader.SetCFIDataBase(0xb440305d, data);
michael@0 641 EXPECT_EQ(0xd834d51cU,
michael@0 642 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
michael@0 643 &pointer_size));
michael@0 644 EXPECT_EQ(7U, pointer_size);
michael@0 645 }
michael@0 646
michael@0 647 TEST_F(Aligned, DW_EH_PE_aligned2) {
michael@0 648 reader.SetCFIDataBase(0xb440305e, data);
michael@0 649 EXPECT_EQ(0x93d834d5U,
michael@0 650 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
michael@0 651 &pointer_size));
michael@0 652 EXPECT_EQ(6U, pointer_size);
michael@0 653 }
michael@0 654
michael@0 655 TEST_F(Aligned, DW_EH_PE_aligned3) {
michael@0 656 reader.SetCFIDataBase(0xb440305f, data);
michael@0 657 EXPECT_EQ(0x6e93d834U,
michael@0 658 reader.ReadEncodedPointer(data, dwarf2reader::DW_EH_PE_aligned,
michael@0 659 &pointer_size));
michael@0 660 EXPECT_EQ(5U, pointer_size);
michael@0 661 }
michael@0 662
michael@0 663 TEST_F(Aligned, DW_EH_PE_aligned11) {
michael@0 664 reader.SetCFIDataBase(0xb4403061, data);
michael@0 665 EXPECT_EQ(0xd834d51cU,
michael@0 666 reader.ReadEncodedPointer(data + 1,
michael@0 667 dwarf2reader::DW_EH_PE_aligned,
michael@0 668 &pointer_size));
michael@0 669 EXPECT_EQ(6U, pointer_size);
michael@0 670 }
michael@0 671
michael@0 672 TEST_F(Aligned, DW_EH_PE_aligned30) {
michael@0 673 reader.SetCFIDataBase(0xb4403063, data);
michael@0 674 EXPECT_EQ(0x6e93d834U,
michael@0 675 reader.ReadEncodedPointer(data + 1,
michael@0 676 dwarf2reader::DW_EH_PE_aligned,
michael@0 677 &pointer_size));
michael@0 678 EXPECT_EQ(4U, pointer_size);
michael@0 679 }
michael@0 680
michael@0 681 TEST_F(Aligned, DW_EH_PE_aligned23) {
michael@0 682 reader.SetCFIDataBase(0xb4403062, data);
michael@0 683 EXPECT_EQ(0x1cd3ac2bU,
michael@0 684 reader.ReadEncodedPointer(data + 3,
michael@0 685 dwarf2reader::DW_EH_PE_aligned,
michael@0 686 &pointer_size));
michael@0 687 EXPECT_EQ(7U, pointer_size);
michael@0 688 }
michael@0 689
michael@0 690 TEST_F(Aligned, DW_EH_PE_aligned03) {
michael@0 691 reader.SetCFIDataBase(0xb4403064, data);
michael@0 692 EXPECT_EQ(0x34d51cd3U,
michael@0 693 reader.ReadEncodedPointer(data + 3,
michael@0 694 dwarf2reader::DW_EH_PE_aligned,
michael@0 695 &pointer_size));
michael@0 696 EXPECT_EQ(5U, pointer_size);
michael@0 697 }

mercurial