Sat, 03 Jan 2015 20:18:00 +0100
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 | } |