• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  //===-- DataExtractor.h -----------------------------------------*- C++ -*-===//
2  //
3  //                     The LLVM Compiler Infrastructure
4  //
5  // This file is distributed under the University of Illinois Open Source
6  // License. See LICENSE.TXT for details.
7  //
8  //===----------------------------------------------------------------------===//
9  
10  #ifndef liblldb_DataExtractor_h_
11  #define liblldb_DataExtractor_h_
12  #if defined (__cplusplus)
13  
14  
15  #include "lldb/lldb-private.h"
16  #include <limits.h>
17  #include <stdint.h>
18  #include <string.h>
19  
20  namespace lldb_private {
21  
22  //----------------------------------------------------------------------
23  /// @class DataExtractor DataExtractor.h "lldb/Core/DataExtractor.h"
24  /// @brief An data extractor class.
25  ///
26  /// DataExtractor is a class that can extract data (swapping if needed)
27  /// from a data buffer. The data buffer can be caller owned, or can be
28  /// shared data that can be shared between multiple DataExtractor
29  /// instances. Multiple DataExtractor objects can share the same data,
30  /// yet extract values in different address sizes and byte order modes.
31  /// Each object can have a unique position in the shared data and extract
32  /// data from different offsets.
33  ///
34  /// @see DataBuffer
35  //----------------------------------------------------------------------
36  class DataExtractor
37  {
38  public:
39      //------------------------------------------------------------------
40      /// @typedef DataExtractor::Type
41      /// @brief Type enumerations used in the dump routines.
42      /// @see DataExtractor::Dump()
43      /// @see DataExtractor::DumpRawHexBytes()
44      //------------------------------------------------------------------
45      typedef enum
46      {
47          TypeUInt8,      ///< Format output as unsigned 8 bit integers
48          TypeChar,       ///< Format output as characters
49          TypeUInt16,     ///< Format output as unsigned 16 bit integers
50          TypeUInt32,     ///< Format output as unsigned 32 bit integers
51          TypeUInt64,     ///< Format output as unsigned 64 bit integers
52          TypePointer,    ///< Format output as pointers
53          TypeULEB128,    ///< Format output as ULEB128 numbers
54          TypeSLEB128     ///< Format output as SLEB128 numbers
55      } Type;
56  
57      static void
58      DumpHexBytes (Stream *s,
59                    const void *src,
60                    size_t src_len,
61                    uint32_t bytes_per_line,
62                    lldb::addr_t base_addr); // Pass LLDB_INVALID_ADDRESS to not show address at start of line
63      //------------------------------------------------------------------
64      /// Default constructor.
65      ///
66      /// Initialize all members to a default empty state.
67      //------------------------------------------------------------------
68      DataExtractor ();
69  
70      //------------------------------------------------------------------
71      /// Construct with a buffer that is owned by the caller.
72      ///
73      /// This constructor allows us to use data that is owned by the
74      /// caller. The data must stay around as long as this object is
75      /// valid.
76      ///
77      /// @param[in] data
78      ///     A pointer to caller owned data.
79      ///
80      /// @param[in] data_length
81      ///     The length in bytes of \a data.
82      ///
83      /// @param[in] byte_order
84      ///     A byte order of the data that we are extracting from.
85      ///
86      /// @param[in] addr_size
87      ///     A new address byte size value.
88      //------------------------------------------------------------------
89      DataExtractor (const void* data, lldb::offset_t data_length, lldb::ByteOrder byte_order, uint32_t addr_size);
90  
91      //------------------------------------------------------------------
92      /// Construct with shared data.
93      ///
94      /// Copies the data shared pointer which adds a reference to the
95      /// contained in \a data_sp. The shared data reference is reference
96      /// counted to ensure the data lives as long as anyone still has a
97      /// valid shared pointer to the data in \a data_sp.
98      ///
99      /// @param[in] data_sp
100      ///     A shared pointer to data.
101      ///
102      /// @param[in] byte_order
103      ///     A byte order of the data that we are extracting from.
104      ///
105      /// @param[in] addr_size
106      ///     A new address byte size value.
107      //------------------------------------------------------------------
108      DataExtractor (const lldb::DataBufferSP& data_sp, lldb::ByteOrder byte_order, uint32_t addr_size);
109  
110      //------------------------------------------------------------------
111      /// Construct with a subset of \a data.
112      ///
113      /// Initialize this object with a subset of the data bytes in \a
114      /// data. If \a data contains shared data, then a reference to the
115      /// shared data will be added to ensure the shared data stays around
116      /// as long as any objects have references to the shared data. The
117      /// byte order value and the address size settings are copied from \a
118      /// data. If \a offset is not a valid offset in \a data, then no
119      /// reference to the shared data will be added. If there are not
120      /// \a length bytes available in \a data starting at \a offset,
121      /// the length will be truncated to contain as many bytes as
122      /// possible.
123      ///
124      /// @param[in] data
125      ///     Another DataExtractor object that contains data.
126      ///
127      /// @param[in] offset
128      ///     The offset into \a data at which the subset starts.
129      ///
130      /// @param[in] length
131      ///     The length in bytes of the subset of data.
132      //------------------------------------------------------------------
133      DataExtractor (const DataExtractor& data, lldb::offset_t offset, lldb::offset_t length);
134  
135      DataExtractor (const DataExtractor& rhs);
136      //------------------------------------------------------------------
137      /// Assignment operator.
138      ///
139      /// Copies all data, byte order and address size settings from \a rhs into
140      /// this object. If \a rhs contains shared data, a reference to that
141      /// shared data will be added.
142      ///
143      /// @param[in] rhs
144      ///     Another DataExtractor object to copy.
145      ///
146      /// @return
147      ///     A const reference to this object.
148      //------------------------------------------------------------------
149      const DataExtractor&
150      operator= (const DataExtractor& rhs);
151  
152      //------------------------------------------------------------------
153      /// Destructor
154      ///
155      /// If this object contains a valid shared data reference, the
156      /// reference count on the data will be decremented, and if zero,
157      /// the data will be freed.
158      //------------------------------------------------------------------
159      ~DataExtractor ();
160  
161      //------------------------------------------------------------------
162      /// Clears the object state.
163      ///
164      /// Clears the object contents back to a default invalid state, and
165      /// release any references to shared data that this object may
166      /// contain.
167      //------------------------------------------------------------------
168      void
169      Clear ();
170  
171      //------------------------------------------------------------------
172      /// Dumps the binary data as \a type objects to stream \a s (or to
173      /// Log() if \a s is NULL) starting \a offset bytes into the data
174      /// and stopping after dumping \a length bytes. The offset into the
175      /// data is displayed at the beginning of each line and can be
176      /// offset by base address \a base_addr. \a num_per_line objects
177      /// will be displayed on each line.
178      ///
179      /// @param[in] s
180      ///     The stream to dump the output to. If NULL the output will
181      ///     be dumped to Log().
182      ///
183      /// @param[in] offset
184      ///     The offset into the data at which to start dumping.
185      ///
186      /// @param[in] length
187      ///     The number of bytes to dump.
188      ///
189      /// @param[in] base_addr
190      ///     The base address that gets added to the offset displayed on
191      ///     each line.
192      ///
193      /// @param[in] num_per_line
194      ///     The number of \a type objects to display on each line.
195      ///
196      /// @param[in] type
197      ///     The type of objects to use when dumping data from this
198      ///     object. See DataExtractor::Type.
199      ///
200      /// @param[in] type_format
201      ///     The optional format to use for the \a type objects. If this
202      ///     is NULL, the default format for the \a type will be used.
203      ///
204      /// @return
205      ///     The offset at which dumping ended.
206      //------------------------------------------------------------------
207      lldb::offset_t
208      PutToLog (Log *log,
209                lldb::offset_t offset,
210                lldb::offset_t length,
211                uint64_t base_addr,
212                uint32_t num_per_line,
213                Type type,
214                const char *type_format = NULL) const;
215  
216      //------------------------------------------------------------------
217      /// Dumps \a item_count objects into the stream \a s.
218      ///
219      /// Dumps \a item_count objects using \a item_format, each of which
220      /// are \a item_byte_size bytes long starting at offset \a offset
221      /// bytes into the contained data, into the stream \a s. \a
222      /// num_per_line objects will be dumped on each line before a new
223      /// line will be output. If \a base_addr is a valid address, then
224      /// each new line of output will be prededed by the address value
225      /// plus appropriate offset, and a colon and space. Bitfield values
226      /// can be dumped by calling this function multiple times with the
227      /// same start offset, format and size, yet differing \a
228      /// item_bit_size and \a item_bit_offset values.
229      ///
230      /// @param[in] s
231      ///     The stream to dump the output to. This value can not be NULL.
232      ///
233      /// @param[in] offset
234      ///     The offset into the data at which to start dumping.
235      ///
236      /// @param[in] item_format
237      ///     The format to use when dumping each item.
238      ///
239      /// @param[in] item_byte_size
240      ///     The byte size of each item.
241      ///
242      /// @param[in] item_count
243      ///     The number of items to dump.
244      ///
245      /// @param[in] num_per_line
246      ///     The number of items to display on each line.
247      ///
248      /// @param[in] base_addr
249      ///     The base address that gets added to the offset displayed on
250      ///     each line if the value is valid. Is \a base_addr is
251      ///     LLDB_INVALID_ADDRESS then no address values will be prepended
252      ///     to any lines.
253      ///
254      /// @param[in] item_bit_size
255      ///     If the value to display is a bitfield, this value should
256      ///     be the number of bits that the bitfield item has within the
257      ///     item's byte size value. This function will need to be called
258      ///     multiple times with identical \a offset and \a item_byte_size
259      ///     values in order to display multiple bitfield values that
260      ///     exist within the same integer value. If the items being
261      ///     displayed are not bitfields, this value should be zero.
262      ///
263      /// @param[in] item_bit_offset
264      ///     If the value to display is a bitfield, this value should
265      ///     be the offset in bits, or shift right amount, that the
266      ///     bitfield item occupies within the item's byte size value.
267      ///     This function will need to be called multiple times with
268      ///     identical \a offset and \a item_byte_size values in order
269      ///     to display multiple bitfield values that exist within the
270      ///     same integer value. If the items being displayed are not
271      ///     bitfields, this value should be zero.
272      ///
273      /// @return
274      ///     The offset at which dumping ended.
275      //------------------------------------------------------------------
276      lldb::offset_t
277      Dump (Stream *s,
278            lldb::offset_t offset,
279            lldb::Format item_format,
280            size_t item_byte_size,
281            size_t item_count,
282            size_t num_per_line,
283            uint64_t base_addr,
284            uint32_t item_bit_size,
285            uint32_t item_bit_offset,
286            ExecutionContextScope *exe_scope = NULL) const;
287  
288      //------------------------------------------------------------------
289      /// Dump a UUID value at \a offset.
290      ///
291      /// Dump a UUID starting at \a offset bytes into this object's data.
292      /// If the stream \a s is NULL, the output will be sent to Log().
293      ///
294      /// @param[in] s
295      ///     The stream to dump the output to. If NULL the output will
296      ///     be dumped to Log().
297      ///
298      /// @param[in] offset
299      ///     The offset into the data at which to extract and dump a
300      ///     UUID value.
301      //------------------------------------------------------------------
302      void
303      DumpUUID (Stream *s, lldb::offset_t offset) const;
304  
305      //------------------------------------------------------------------
306      /// Extract an arbitrary number of bytes in the specified byte
307      /// order.
308      ///
309      /// Attemps to extract \a length bytes starting at \a offset bytes
310      /// into this data in the requested byte order (\a dst_byte_order)
311      /// and place the results in \a dst. \a dst must be at least \a
312      /// length bytes long.
313      ///
314      /// @param[in] offset
315      ///     The offset in bytes into the contained data at which to
316      ///     start extracting.
317      ///
318      /// @param[in] length
319      ///     The number of bytes to extract.
320      ///
321      /// @param[in] dst_byte_order
322      ///     A byte order of the data that we want when the value in
323      ///     copied to \a dst.
324      ///
325      /// @param[out] dst
326      ///     The buffer that will receive the extracted value if there
327      ///     are enough bytes available in the current data.
328      ///
329      /// @return
330      ///     The number of bytes that were extracted which will be \a
331      ///     length when the value is successfully extracted, or zero
332      ///     if there aren't enough bytes at the specified offset.
333      //------------------------------------------------------------------
334      size_t
335      ExtractBytes (lldb::offset_t offset, lldb::offset_t length, lldb::ByteOrder dst_byte_order, void *dst) const;
336  
337      //------------------------------------------------------------------
338      /// Extract an address from \a *offset_ptr.
339      ///
340      /// Extract a single address from the data and update the offset
341      /// pointed to by \a offset_ptr. The size of the extracted address
342      /// comes from the \a m_addr_size member variable and should be
343      /// set correctly prior to extracting any address values.
344      ///
345      /// @param[in,out] offset_ptr
346      ///     A pointer to an offset within the data that will be advanced
347      ///     by the appropriate number of bytes if the value is extracted
348      ///     correctly. If the offset is out of bounds or there are not
349      ///     enough bytes to extract this value, the offset will be left
350      ///     unmodified.
351      ///
352      /// @return
353      ///     The extracted address value.
354      //------------------------------------------------------------------
355      uint64_t
356      GetAddress (lldb::offset_t *offset_ptr) const;
357  
358      uint64_t
359      GetAddress_unchecked (lldb::offset_t *offset_ptr) const;
360  
361      //------------------------------------------------------------------
362      /// Get the current address size.
363      ///
364      /// Return the size in bytes of any address values this object will
365      /// extract.
366      ///
367      /// @return
368      ///     The size in bytes of address values that will be extracted.
369      //------------------------------------------------------------------
370      uint32_t
GetAddressByteSize()371      GetAddressByteSize () const
372      {
373          return m_addr_size;
374      }
375  
376      //------------------------------------------------------------------
377      /// Get the number of bytes contained in this object.
378      ///
379      /// @return
380      ///     The total number of bytes of data this object refers to.
381      //------------------------------------------------------------------
382      uint64_t
GetByteSize()383      GetByteSize () const
384      {
385          return m_end - m_start;
386      }
387  
388      //------------------------------------------------------------------
389      /// Extract a C string from \a *offset_ptr.
390      ///
391      /// Returns a pointer to a C String from the data at the offset
392      /// pointed to by \a offset_ptr. A variable length NULL terminated C
393      /// string will be extracted and the \a offset_ptr will be
394      /// updated with the offset of the byte that follows the NULL
395      /// terminator byte.
396      ///
397      /// @param[in,out] offset_ptr
398      ///     A pointer to an offset within the data that will be advanced
399      ///     by the appropriate number of bytes if the value is extracted
400      ///     correctly. If the offset is out of bounds or there are not
401      ///     enough bytes to extract this value, the offset will be left
402      ///     unmodified.
403      ///
404      /// @return
405      ///     A pointer to the C string value in the data. If the offset
406      ///     pointed to by \a offset_ptr is out of bounds, or if the
407      ///     offset plus the length of the C string is out of bounds,
408      ///     NULL will be returned.
409      //------------------------------------------------------------------
410      const char *
411      GetCStr (lldb::offset_t *offset_ptr) const;
412  
413      //------------------------------------------------------------------
414      /// Extract a C string from \a *offset_ptr with field size \a len.
415      ///
416      /// Returns a pointer to a C String from the data at the offset
417      /// pointed to by \a offset_ptr, with a field length of \a len.
418      /// A NULL terminated C string will be extracted and the \a offset_ptr
419      /// will be updated with the offset of the byte that follows the fixed
420      /// length field.
421      ///
422      /// @param[in,out] offset_ptr
423      ///     A pointer to an offset within the data that will be advanced
424      ///     by the appropriate number of bytes if the value is extracted
425      ///     correctly. If the offset is out of bounds or there are not
426      ///     enough bytes to extract this value, the offset will be left
427      ///     unmodified.
428      ///
429      /// @return
430      ///     A pointer to the C string value in the data. If the offset
431      ///     pointed to by \a offset_ptr is out of bounds, or if the
432      ///     offset plus the length of the field is out of bounds, or if
433      ///     the field does not contain a NULL terminator byte, NULL will
434      ///     be returned.
435      const char *
436      GetCStr (lldb::offset_t *offset_ptr, lldb::offset_t len) const;
437  
438      //------------------------------------------------------------------
439      /// Extract \a length bytes from \a *offset_ptr.
440      ///
441      /// Returns a pointer to a bytes in this object's data at the offset
442      /// pointed to by \a offset_ptr. If \a length is zero or too large,
443      /// then the offset pointed to by \a offset_ptr will not be updated
444      /// and NULL will be returned.
445      ///
446      /// @param[in,out] offset_ptr
447      ///     A pointer to an offset within the data that will be advanced
448      ///     by the appropriate number of bytes if the value is extracted
449      ///     correctly. If the offset is out of bounds or there are not
450      ///     enough bytes to extract this value, the offset will be left
451      ///     unmodified.
452      ///
453      /// @param[in] length
454      ///     The optional length of a string to extract. If the value is
455      ///     zero, a NULL terminated C string will be extracted.
456      ///
457      /// @return
458      ///     A pointer to the bytes in this object's data if the offset
459      ///     and length are valid, or NULL otherwise.
460      //------------------------------------------------------------------
461      const void*
GetData(lldb::offset_t * offset_ptr,lldb::offset_t length)462      GetData (lldb::offset_t *offset_ptr, lldb::offset_t length) const
463      {
464          const uint8_t *ptr = PeekData (*offset_ptr, length);
465          if (ptr)
466              *offset_ptr += length;
467          return ptr;
468      }
469  
470      //------------------------------------------------------------------
471      /// Copy \a dst_len bytes from \a *offset_ptr and ensure the copied
472      /// data is treated as a value that can be swapped to match the
473      /// specified byte order.
474      ///
475      /// For values that are larger than the supported integer sizes,
476      /// this function can be used to extract data in a specified byte
477      /// order. It can also be used to copy a smaller integer value from
478      /// to a larger value. The extra bytes left over will be padded
479      /// correctly according to the byte order of this object and the
480      /// \a dst_byte_order. This can be very handy when say copying a
481      /// partial data value into a register.
482      ///
483      /// @param[in] src_offset
484      ///     The offset into this data from which to start copying an
485      ///     endian entity
486      ///
487      /// @param[in] src_len
488      ///     The length of the endian data to copy from this object
489      ///     into the \a dst object
490      ///
491      /// @param[out] dst
492      ///     The buffer where to place the endian data. The data might
493      ///     need to be byte swapped (and appropriately padded with
494      ///     zeroes if \a src_len != \a dst_len) if \a dst_byte_order
495      ///     does not match the byte order in this object.
496      ///
497      /// @param[in] dst_len
498      ///     The length number of bytes that the endian value will
499      ///     occupy is \a dst.
500      ///
501      /// @param[in] byte_order
502      ///     The byte order that the endian value should be in the \a dst
503      ///     buffer.
504      ///
505      /// @return
506      ///     Returns the number of bytes that were copied, or zero if
507      ///     anything goes wrong.
508      //------------------------------------------------------------------
509      lldb::offset_t
510      CopyByteOrderedData (lldb::offset_t src_offset,
511                           lldb::offset_t src_len,
512                           void *dst,
513                           lldb::offset_t dst_len,
514                           lldb::ByteOrder dst_byte_order) const;
515  
516      //------------------------------------------------------------------
517      /// Get the data end pointer.
518      ///
519      /// @return
520      ///     Returns a pointer to the next byte contained in this
521      ///     object's data, or NULL of there is no data in this object.
522      //------------------------------------------------------------------
523      const uint8_t *
GetDataEnd()524      GetDataEnd () const
525      {
526          return m_end;
527      }
528  
529      //------------------------------------------------------------------
530      /// Get the shared data offset.
531      ///
532      /// Get the offset of the first byte of data in the shared data (if
533      /// any).
534      ///
535      /// @return
536      ///     If this object contains shared data, this function returns
537      ///     the offset in bytes into that shared data, zero otherwise.
538      //------------------------------------------------------------------
539      size_t
540      GetSharedDataOffset () const;
541  
542      //------------------------------------------------------------------
543      /// Get a the data start pointer.
544      ///
545      /// @return
546      ///     Returns a pointer to the first byte contained in this
547      ///     object's data, or NULL of there is no data in this object.
548      //------------------------------------------------------------------
549      const uint8_t *
GetDataStart()550      GetDataStart () const
551      {
552          return m_start;
553      }
554  
555  
556      //------------------------------------------------------------------
557      /// Extract a float from \a *offset_ptr.
558      ///
559      /// Extract a single float value.
560      ///
561      /// @param[in,out] offset_ptr
562      ///     A pointer to an offset within the data that will be advanced
563      ///     by the appropriate number of bytes if the value is extracted
564      ///     correctly. If the offset is out of bounds or there are not
565      ///     enough bytes to extract this value, the offset will be left
566      ///     unmodified.
567      ///
568      /// @return
569      ///     The floating value that was extracted, or zero on failure.
570      //------------------------------------------------------------------
571      float
572      GetFloat (lldb::offset_t *offset_ptr) const;
573  
574      double
575      GetDouble (lldb::offset_t *offset_ptr) const;
576  
577      long double
578      GetLongDouble (lldb::offset_t *offset_ptr) const;
579  
580      //------------------------------------------------------------------
581      /// Extract a GNU encoded pointer value from \a *offset_ptr.
582      ///
583      /// @param[in,out] offset_ptr
584      ///     A pointer to an offset within the data that will be advanced
585      ///     by the appropriate number of bytes if the value is extracted
586      ///     correctly. If the offset is out of bounds or there are not
587      ///     enough bytes to extract this value, the offset will be left
588      ///     unmodified.
589      ///
590      /// @param[in] eh_ptr_enc
591      ///     The GNU pointer encoding type.
592      ///
593      /// @param[in] pc_rel_addr
594      ///     The PC relative address to use when the encoding is
595      ///     \c DW_GNU_EH_PE_pcrel.
596      ///
597      /// @param[in] text_addr
598      ///     The text (code) relative address to use when the encoding is
599      ///     \c DW_GNU_EH_PE_textrel.
600      ///
601      /// @param[in] data_addr
602      ///     The data relative address to use when the encoding is
603      ///     \c DW_GNU_EH_PE_datarel.
604      ///
605      /// @return
606      ///     The extracted GNU encoded pointer value.
607      //------------------------------------------------------------------
608      uint64_t
609      GetGNUEHPointer (lldb::offset_t *offset_ptr,
610                       uint32_t eh_ptr_enc,
611                       lldb::addr_t pc_rel_addr,
612                       lldb::addr_t text_addr,
613                       lldb::addr_t data_addr);
614  
615      //------------------------------------------------------------------
616      /// Extract an integer of size \a byte_size from \a *offset_ptr.
617      ///
618      /// Extract a single integer value and update the offset pointed to
619      /// by \a offset_ptr. The size of the extracted integer is specified
620      /// by the \a byte_size argument. \a byte_size should have a value
621      /// >= 1 and <= 4 since the return value is only 32 bits wide. Any
622      /// \a byte_size values less than 1 or greater than 4 will result in
623      /// nothing being extracted, and zero being returned.
624      ///
625      /// @param[in,out] offset_ptr
626      ///     A pointer to an offset within the data that will be advanced
627      ///     by the appropriate number of bytes if the value is extracted
628      ///     correctly. If the offset is out of bounds or there are not
629      ///     enough bytes to extract this value, the offset will be left
630      ///     unmodified.
631      ///
632      /// @param[in] byte_size
633      ///     The size in byte of the integer to extract.
634      ///
635      /// @return
636      ///     The integer value that was extracted, or zero on failure.
637      //------------------------------------------------------------------
638      uint32_t
639      GetMaxU32 (lldb::offset_t *offset_ptr, size_t byte_size) const;
640  
641      //------------------------------------------------------------------
642      /// Extract an unsigned integer of size \a byte_size from \a
643      /// *offset_ptr.
644      ///
645      /// Extract a single unsigned integer value and update the offset
646      /// pointed to by \a offset_ptr. The size of the extracted integer
647      /// is specified by the \a byte_size argument. \a byte_size should
648      /// have a value greater than or equal to one and less than or equal
649      /// to eight since the return value is 64 bits wide. Any
650      /// \a byte_size values less than 1 or greater than 8 will result in
651      /// nothing being extracted, and zero being returned.
652      ///
653      /// @param[in,out] offset_ptr
654      ///     A pointer to an offset within the data that will be advanced
655      ///     by the appropriate number of bytes if the value is extracted
656      ///     correctly. If the offset is out of bounds or there are not
657      ///     enough bytes to extract this value, the offset will be left
658      ///     unmodified.
659      ///
660      /// @param[in] byte_size
661      ///     The size in byte of the integer to extract.
662      ///
663      /// @return
664      ///     The unsigned integer value that was extracted, or zero on
665      ///     failure.
666      //------------------------------------------------------------------
667      uint64_t
668      GetMaxU64 (lldb::offset_t *offset_ptr, size_t byte_size) const;
669  
670      uint64_t
671      GetMaxU64_unchecked (lldb::offset_t *offset_ptr, size_t byte_size) const;
672  
673      //------------------------------------------------------------------
674      /// Extract an signed integer of size \a byte_size from \a *offset_ptr.
675      ///
676      /// Extract a single signed integer value (sign extending if required)
677      /// and update the offset pointed to by \a offset_ptr. The size of
678      /// the extracted integer is specified by the \a byte_size argument.
679      /// \a byte_size should have a value greater than or equal to one
680      /// and less than or equal to eight since the return value is 64
681      /// bits wide. Any \a byte_size values less than 1 or greater than
682      /// 8 will result in nothing being extracted, and zero being returned.
683      ///
684      /// @param[in,out] offset_ptr
685      ///     A pointer to an offset within the data that will be advanced
686      ///     by the appropriate number of bytes if the value is extracted
687      ///     correctly. If the offset is out of bounds or there are not
688      ///     enough bytes to extract this value, the offset will be left
689      ///     unmodified.
690      ///
691      /// @param[in] byte_size
692      ///     The size in byte of the integer to extract.
693      ///
694      /// @return
695      ///     The sign extended signed integer value that was extracted,
696      ///     or zero on failure.
697      //------------------------------------------------------------------
698      int64_t
699      GetMaxS64 (lldb::offset_t *offset_ptr, size_t size) const;
700  
701      //------------------------------------------------------------------
702      /// Extract an unsigned integer of size \a byte_size from \a
703      /// *offset_ptr, then extract the bitfield from this value if
704      /// \a bitfield_bit_size is non-zero.
705      ///
706      /// Extract a single unsigned integer value and update the offset
707      /// pointed to by \a offset_ptr. The size of the extracted integer
708      /// is specified by the \a byte_size argument. \a byte_size should
709      /// have a value greater than or equal to one and less than or equal
710      /// to 8 since the return value is 64 bits wide. Any
711      /// \a byte_size values less than 1 or greater than 8 will result in
712      /// nothing being extracted, and zero being returned.
713      ///
714      /// @param[in,out] offset_ptr
715      ///     A pointer to an offset within the data that will be advanced
716      ///     by the appropriate number of bytes if the value is extracted
717      ///     correctly. If the offset is out of bounds or there are not
718      ///     enough bytes to extract this value, the offset will be left
719      ///     unmodified.
720      ///
721      /// @param[in] byte_size
722      ///     The size in byte of the integer to extract.
723      ///
724      /// @param[in] bitfield_bit_size
725      ///     The size in bits of the bitfield value to extract, or zero
726      ///     to just extract the entire integer value.
727      ///
728      /// @param[in] bitfield_bit_offset
729      ///     The bit offset of the bitfield value in the extracted
730      ///     integer (the number of bits to shift the integer to the
731      ///     right).
732      ///
733      /// @return
734      ///     The unsigned bitfield integer value that was extracted, or
735      ///     zero on failure.
736      //------------------------------------------------------------------
737      uint64_t
738      GetMaxU64Bitfield (lldb::offset_t *offset_ptr,
739                         size_t size,
740                         uint32_t bitfield_bit_size,
741                         uint32_t bitfield_bit_offset) const;
742  
743      //------------------------------------------------------------------
744      /// Extract an signed integer of size \a byte_size from \a
745      /// *offset_ptr, then extract and signe extend the bitfield from
746      /// this value if \a bitfield_bit_size is non-zero.
747      ///
748      /// Extract a single signed integer value (sign extending if required)
749      /// and update the offset pointed to by \a offset_ptr. The size of
750      /// the extracted integer is specified by the \a byte_size argument.
751      /// \a byte_size should have a value greater than or equal to one
752      /// and less than or equal to eight since the return value is 64
753      /// bits wide. Any \a byte_size values less than 1 or greater than
754      /// 8 will result in nothing being extracted, and zero being returned.
755      ///
756      /// @param[in,out] offset_ptr
757      ///     A pointer to an offset within the data that will be advanced
758      ///     by the appropriate number of bytes if the value is extracted
759      ///     correctly. If the offset is out of bounds or there are not
760      ///     enough bytes to extract this value, the offset will be left
761      ///     unmodified.
762      ///
763      /// @param[in] byte_size
764      ///     The size in bytes of the integer to extract.
765      ///
766      /// @param[in] bitfield_bit_size
767      ///     The size in bits of the bitfield value to extract, or zero
768      ///     to just extract the entire integer value.
769      ///
770      /// @param[in] bitfield_bit_offset
771      ///     The bit offset of the bitfield value in the extracted
772      ///     integer (the number of bits to shift the integer to the
773      ///     right).
774      ///
775      /// @return
776      ///     The signed bitfield integer value that was extracted, or
777      ///     zero on failure.
778      //------------------------------------------------------------------
779      int64_t
780      GetMaxS64Bitfield (lldb::offset_t *offset_ptr,
781                         size_t size,
782                         uint32_t bitfield_bit_size,
783                         uint32_t bitfield_bit_offset) const;
784  
785      //------------------------------------------------------------------
786      /// Extract an pointer from \a *offset_ptr.
787      ///
788      /// Extract a single pointer from the data and update the offset
789      /// pointed to by \a offset_ptr. The size of the extracted pointer
790      /// comes from the \a m_addr_size member variable and should be
791      /// set correctly prior to extracting any pointer values.
792      ///
793      /// @param[in,out] offset_ptr
794      ///     A pointer to an offset within the data that will be advanced
795      ///     by the appropriate number of bytes if the value is extracted
796      ///     correctly. If the offset is out of bounds or there are not
797      ///     enough bytes to extract this value, the offset will be left
798      ///     unmodified.
799      ///
800      /// @return
801      ///     The extracted pointer value as a 64 integer.
802      //------------------------------------------------------------------
803      uint64_t
804      GetPointer (lldb::offset_t *offset_ptr) const;
805  
806      //------------------------------------------------------------------
807      /// Get the current byte order value.
808      ///
809      /// @return
810      ///     The current byte order value from this object's internal
811      ///     state.
812      //------------------------------------------------------------------
813      lldb::ByteOrder
GetByteOrder()814      GetByteOrder() const
815      {
816          return m_byte_order;
817      }
818  
819      //------------------------------------------------------------------
820      /// Extract a uint8_t value from \a *offset_ptr.
821      ///
822      /// Extract a single uint8_t from the binary data at the offset
823      /// pointed to by \a offset_ptr, and advance the offset on success.
824      ///
825      /// @param[in,out] offset_ptr
826      ///     A pointer to an offset within the data that will be advanced
827      ///     by the appropriate number of bytes if the value is extracted
828      ///     correctly. If the offset is out of bounds or there are not
829      ///     enough bytes to extract this value, the offset will be left
830      ///     unmodified.
831      ///
832      /// @return
833      ///     The extracted uint8_t value.
834      //------------------------------------------------------------------
835      uint8_t
836      GetU8 ( lldb::offset_t *offset_ptr) const;
837  
838      uint8_t
GetU8_unchecked(lldb::offset_t * offset_ptr)839      GetU8_unchecked (lldb::offset_t *offset_ptr) const
840      {
841          uint8_t val = m_start[*offset_ptr];
842          *offset_ptr += 1;
843          return val;
844      }
845  
846      uint16_t
847      GetU16_unchecked (lldb::offset_t *offset_ptr) const;
848  
849      uint32_t
850      GetU32_unchecked (lldb::offset_t *offset_ptr) const;
851  
852      uint64_t
853      GetU64_unchecked (lldb::offset_t *offset_ptr) const;
854      //------------------------------------------------------------------
855      /// Extract \a count uint8_t values from \a *offset_ptr.
856      ///
857      /// Extract \a count uint8_t values from the binary data at the
858      /// offset pointed to by \a offset_ptr, and advance the offset on
859      /// success. The extracted values are copied into \a dst.
860      ///
861      /// @param[in,out] offset_ptr
862      ///     A pointer to an offset within the data that will be advanced
863      ///     by the appropriate number of bytes if the value is extracted
864      ///     correctly. If the offset is out of bounds or there are not
865      ///     enough bytes to extract this value, the offset will be left
866      ///     unmodified.
867      ///
868      /// @param[out] dst
869      ///     A buffer to copy \a count uint8_t values into. \a dst must
870      ///     be large enough to hold all requested data.
871      ///
872      /// @param[in] count
873      ///     The number of uint8_t values to extract.
874      ///
875      /// @return
876      ///     \a dst if all values were properly extracted and copied,
877      ///     NULL otherise.
878      //------------------------------------------------------------------
879      void *
880      GetU8 (lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
881  
882      //------------------------------------------------------------------
883      /// Extract a uint16_t value from \a *offset_ptr.
884      ///
885      /// Extract a single uint16_t from the binary data at the offset
886      /// pointed to by \a offset_ptr, and update the offset on success.
887      ///
888      /// @param[in,out] offset_ptr
889      ///     A pointer to an offset within the data that will be advanced
890      ///     by the appropriate number of bytes if the value is extracted
891      ///     correctly. If the offset is out of bounds or there are not
892      ///     enough bytes to extract this value, the offset will be left
893      ///     unmodified.
894      ///
895      /// @return
896      ///     The extracted uint16_t value.
897      //------------------------------------------------------------------
898      uint16_t
899      GetU16 (lldb::offset_t *offset_ptr) const;
900  
901      //------------------------------------------------------------------
902      /// Extract \a count uint16_t values from \a *offset_ptr.
903      ///
904      /// Extract \a count uint16_t values from the binary data at the
905      /// offset pointed to by \a offset_ptr, and advance the offset on
906      /// success. The extracted values are copied into \a dst.
907      ///
908      /// @param[in,out] offset_ptr
909      ///     A pointer to an offset within the data that will be advanced
910      ///     by the appropriate number of bytes if the value is extracted
911      ///     correctly. If the offset is out of bounds or there are not
912      ///     enough bytes to extract this value, the offset will be left
913      ///     unmodified.
914      ///
915      /// @param[out] dst
916      ///     A buffer to copy \a count uint16_t values into. \a dst must
917      ///     be large enough to hold all requested data.
918      ///
919      /// @param[in] count
920      ///     The number of uint16_t values to extract.
921      ///
922      /// @return
923      ///     \a dst if all values were properly extracted and copied,
924      ///     NULL otherise.
925      //------------------------------------------------------------------
926      void *
927      GetU16 (lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
928  
929      //------------------------------------------------------------------
930      /// Extract a uint32_t value from \a *offset_ptr.
931      ///
932      /// Extract a single uint32_t from the binary data at the offset
933      /// pointed to by \a offset_ptr, and update the offset on success.
934      ///
935      /// @param[in,out] offset_ptr
936      ///     A pointer to an offset within the data that will be advanced
937      ///     by the appropriate number of bytes if the value is extracted
938      ///     correctly. If the offset is out of bounds or there are not
939      ///     enough bytes to extract this value, the offset will be left
940      ///     unmodified.
941      ///
942      /// @return
943      ///     The extracted uint32_t value.
944      //------------------------------------------------------------------
945      uint32_t
946      GetU32 (lldb::offset_t *offset_ptr) const;
947  
948      //------------------------------------------------------------------
949      /// Extract \a count uint32_t values from \a *offset_ptr.
950      ///
951      /// Extract \a count uint32_t values from the binary data at the
952      /// offset pointed to by \a offset_ptr, and advance the offset on
953      /// success. The extracted values are copied into \a dst.
954      ///
955      /// @param[in,out] offset_ptr
956      ///     A pointer to an offset within the data that will be advanced
957      ///     by the appropriate number of bytes if the value is extracted
958      ///     correctly. If the offset is out of bounds or there are not
959      ///     enough bytes to extract this value, the offset will be left
960      ///     unmodified.
961      ///
962      /// @param[out] dst
963      ///     A buffer to copy \a count uint32_t values into. \a dst must
964      ///     be large enough to hold all requested data.
965      ///
966      /// @param[in] count
967      ///     The number of uint32_t values to extract.
968      ///
969      /// @return
970      ///     \a dst if all values were properly extracted and copied,
971      ///     NULL otherise.
972      //------------------------------------------------------------------
973      void *
974      GetU32 (lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
975  
976      //------------------------------------------------------------------
977      /// Extract a uint64_t value from \a *offset_ptr.
978      ///
979      /// Extract a single uint64_t from the binary data at the offset
980      /// pointed to by \a offset_ptr, and update the offset on success.
981      ///
982      /// @param[in,out] offset_ptr
983      ///     A pointer to an offset within the data that will be advanced
984      ///     by the appropriate number of bytes if the value is extracted
985      ///     correctly. If the offset is out of bounds or there are not
986      ///     enough bytes to extract this value, the offset will be left
987      ///     unmodified.
988      ///
989      /// @return
990      ///     The extracted uint64_t value.
991      //------------------------------------------------------------------
992      uint64_t
993      GetU64 (lldb::offset_t *offset_ptr) const;
994  
995      //------------------------------------------------------------------
996      /// Extract \a count uint64_t values from \a *offset_ptr.
997      ///
998      /// Extract \a count uint64_t values from the binary data at the
999      /// offset pointed to by \a offset_ptr, and advance the offset on
1000      /// success. The extracted values are copied into \a dst.
1001      ///
1002      /// @param[in,out] offset_ptr
1003      ///     A pointer to an offset within the data that will be advanced
1004      ///     by the appropriate number of bytes if the value is extracted
1005      ///     correctly. If the offset is out of bounds or there are not
1006      ///     enough bytes to extract this value, the offset will be left
1007      ///     unmodified.
1008      ///
1009      /// @param[out] dst
1010      ///     A buffer to copy \a count uint64_t values into. \a dst must
1011      ///     be large enough to hold all requested data.
1012      ///
1013      /// @param[in] count
1014      ///     The number of uint64_t values to extract.
1015      ///
1016      /// @return
1017      ///     \a dst if all values were properly extracted and copied,
1018      ///     NULL otherise.
1019      //------------------------------------------------------------------
1020      void *
1021      GetU64 ( lldb::offset_t *offset_ptr, void *dst, uint32_t count) const;
1022  
1023      //------------------------------------------------------------------
1024      /// Extract a signed LEB128 value from \a *offset_ptr.
1025      ///
1026      /// Extracts an signed LEB128 number from this object's data
1027      /// starting at the offset pointed to by \a offset_ptr. The offset
1028      /// pointed to by \a offset_ptr will be updated with the offset of
1029      /// the byte following the last extracted byte.
1030      ///
1031      /// @param[in,out] offset_ptr
1032      ///     A pointer to an offset within the data that will be advanced
1033      ///     by the appropriate number of bytes if the value is extracted
1034      ///     correctly. If the offset is out of bounds or there are not
1035      ///     enough bytes to extract this value, the offset will be left
1036      ///     unmodified.
1037      ///
1038      /// @return
1039      ///     The extracted signed integer value.
1040      //------------------------------------------------------------------
1041      int64_t
1042      GetSLEB128 (lldb::offset_t *offset_ptr) const;
1043  
1044      //------------------------------------------------------------------
1045      /// Extract a unsigned LEB128 value from \a *offset_ptr.
1046      ///
1047      /// Extracts an unsigned LEB128 number from this object's data
1048      /// starting at the offset pointed to by \a offset_ptr. The offset
1049      /// pointed to by \a offset_ptr will be updated with the offset of
1050      /// the byte following the last extracted byte.
1051      ///
1052      /// @param[in,out] offset_ptr
1053      ///     A pointer to an offset within the data that will be advanced
1054      ///     by the appropriate number of bytes if the value is extracted
1055      ///     correctly. If the offset is out of bounds or there are not
1056      ///     enough bytes to extract this value, the offset will be left
1057      ///     unmodified.
1058      ///
1059      /// @return
1060      ///     The extracted unsigned integer value.
1061      //------------------------------------------------------------------
1062      uint64_t
1063      GetULEB128 (lldb::offset_t *offset_ptr) const;
1064  
1065      lldb::DataBufferSP &
GetSharedDataBuffer()1066      GetSharedDataBuffer ()
1067      {
1068          return m_data_sp;
1069      }
1070  
1071      //------------------------------------------------------------------
1072      /// Peek at a C string at \a offset.
1073      ///
1074      /// Peeks at a string in the contained data. No verification is done
1075      /// to make sure the entire string lies within the bounds of this
1076      /// object's data, only \a offset is verified to be a valid offset.
1077      ///
1078      /// @param[in] offset
1079      ///     An offset into the data.
1080      ///
1081      /// @return
1082      ///     A non-NULL C string pointer if \a offset is a valid offset,
1083      ///     NULL otherwise.
1084      //------------------------------------------------------------------
1085      const char *
1086      PeekCStr (lldb::offset_t offset) const;
1087  
1088      //------------------------------------------------------------------
1089      /// Peek at a bytes at \a offset.
1090      ///
1091      /// Returns a pointer to \a length bytes at \a offset as long as
1092      /// there are \a length bytes available starting at \a offset.
1093      ///
1094      /// @return
1095      ///     A non-NULL data pointer if \a offset is a valid offset and
1096      ///     there are \a length bytes available at that offset, NULL
1097      ///     otherwise.
1098      //------------------------------------------------------------------
1099      const uint8_t*
PeekData(lldb::offset_t offset,lldb::offset_t length)1100      PeekData (lldb::offset_t offset, lldb::offset_t length) const
1101      {
1102          if (length > 0 && ValidOffsetForDataOfSize(offset, length))
1103              return m_start + offset;
1104          return NULL;
1105      }
1106  
1107      //------------------------------------------------------------------
1108      /// Set the address byte size.
1109      ///
1110      /// Set the size in bytes that will be used when extracting any
1111      /// address and pointer values from data contained in this object.
1112      ///
1113      /// @param[in] addr_size
1114      ///     The size in bytes to use when extracting addresses.
1115      //------------------------------------------------------------------
1116      void
SetAddressByteSize(uint32_t addr_size)1117      SetAddressByteSize (uint32_t addr_size)
1118      {
1119          m_addr_size = addr_size;
1120      }
1121  
1122      //------------------------------------------------------------------
1123      /// Set data with a buffer that is caller owned.
1124      ///
1125      /// Use data that is owned by the caller when extracting values.
1126      /// The data must stay around as long as this object, or any object
1127      /// that copies a subset of this object's data, is valid. If \a
1128      /// bytes is NULL, or \a length is zero, this object will contain
1129      /// no data.
1130      ///
1131      /// @param[in] bytes
1132      ///     A pointer to caller owned data.
1133      ///
1134      /// @param[in] length
1135      ///     The length in bytes of \a bytes.
1136      ///
1137      /// @param[in] byte_order
1138      ///     A byte order of the data that we are extracting from.
1139      ///
1140      /// @return
1141      ///     The number of bytes that this object now contains.
1142      //------------------------------------------------------------------
1143      lldb::offset_t
1144      SetData (const void *bytes, lldb::offset_t length, lldb::ByteOrder byte_order);
1145  
1146      //------------------------------------------------------------------
1147      /// Adopt a subset of \a data.
1148      ///
1149      /// Set this object's data to be a subset of the data bytes in \a
1150      /// data. If \a data contains shared data, then a reference to the
1151      /// shared data will be added to ensure the shared data stays around
1152      /// as long as any objects have references to the shared data. The
1153      /// byte order and the address size settings are copied from \a
1154      /// data. If \a offset is not a valid offset in \a data, then no
1155      /// reference to the shared data will be added. If there are not
1156      /// \a length bytes available in \a data starting at \a offset,
1157      /// the length will be truncated to contains as many bytes as
1158      /// possible.
1159      ///
1160      /// @param[in] data
1161      ///     Another DataExtractor object that contains data.
1162      ///
1163      /// @param[in] offset
1164      ///     The offset into \a data at which the subset starts.
1165      ///
1166      /// @param[in] length
1167      ///     The length in bytes of the subset of \a data.
1168      ///
1169      /// @return
1170      ///     The number of bytes that this object now contains.
1171      //------------------------------------------------------------------
1172      lldb::offset_t
1173      SetData (const DataExtractor& data, lldb::offset_t offset, lldb::offset_t length);
1174  
1175      //------------------------------------------------------------------
1176      /// Adopt a subset of shared data in \a data_sp.
1177      ///
1178      /// Copies the data shared pointer which adds a reference to the
1179      /// contained in \a data_sp. The shared data reference is reference
1180      /// counted to ensure the data lives as long as anyone still has a
1181      /// valid shared pointer to the data in \a data_sp. The byte order
1182      /// and address byte size settings remain the same. If
1183      /// \a offset is not a valid offset in \a data_sp, then no reference
1184      /// to the shared data will be added. If there are not \a length
1185      /// bytes available in \a data starting at \a offset, the length
1186      /// will be truncated to contains as many bytes as possible.
1187      ///
1188      /// @param[in] data_sp
1189      ///     A shared pointer to data.
1190      ///
1191      /// @param[in] offset
1192      ///     The offset into \a data_sp at which the subset starts.
1193      ///
1194      /// @param[in] length
1195      ///     The length in bytes of the subset of \a data_sp.
1196      ///
1197      /// @return
1198      ///     The number of bytes that this object now contains.
1199      //------------------------------------------------------------------
1200      lldb::offset_t
1201      SetData (const lldb::DataBufferSP& data_sp, lldb::offset_t offset = 0, lldb::offset_t length = LLDB_INVALID_OFFSET);
1202  
1203      //------------------------------------------------------------------
1204      /// Set the byte_order value.
1205      ///
1206      /// Sets the byte order of the data to extract. Extracted values
1207      /// will be swapped if necessary when decoding.
1208      ///
1209      /// @param[in] byte_order
1210      ///     The byte order value to use when extracting data.
1211      //------------------------------------------------------------------
1212      void
SetByteOrder(lldb::ByteOrder byte_order)1213      SetByteOrder (lldb::ByteOrder byte_order)
1214      {
1215          m_byte_order = byte_order;
1216      }
1217  
1218      //------------------------------------------------------------------
1219      /// Skip an LEB128 number at \a *offset_ptr.
1220      ///
1221      /// Skips a LEB128 number (signed or unsigned) from this object's
1222      /// data starting at the offset pointed to by \a offset_ptr. The
1223      /// offset pointed to by \a offset_ptr will be updated with the
1224      /// offset of the byte following the last extracted byte.
1225      ///
1226      /// @param[in,out] offset_ptr
1227      ///     A pointer to an offset within the data that will be advanced
1228      ///     by the appropriate number of bytes if the value is extracted
1229      ///     correctly. If the offset is out of bounds or there are not
1230      ///     enough bytes to extract this value, the offset will be left
1231      ///     unmodified.
1232      ///
1233      /// @return
1234      //      The number of bytes consumed during the extraction.
1235      //------------------------------------------------------------------
1236      uint32_t
1237      Skip_LEB128 (lldb::offset_t *offset_ptr) const;
1238  
1239      //------------------------------------------------------------------
1240      /// Test the validity of \a offset.
1241      ///
1242      /// @return
1243      ///     \b true if \a offset is a valid offset into the data in this
1244      ///     object, \b false otherwise.
1245      //------------------------------------------------------------------
1246      bool
ValidOffset(lldb::offset_t offset)1247      ValidOffset (lldb::offset_t offset) const
1248      {
1249          return offset < GetByteSize();
1250      }
1251  
1252      //------------------------------------------------------------------
1253      /// Test the availability of \a length bytes of data from \a offset.
1254      ///
1255      /// @return
1256      ///     \b true if \a offset is a valid offset and there are \a
1257      ///     length bytes available at that offset, \b false otherwise.
1258      //------------------------------------------------------------------
1259      bool
ValidOffsetForDataOfSize(lldb::offset_t offset,lldb::offset_t length)1260      ValidOffsetForDataOfSize (lldb::offset_t offset, lldb::offset_t length) const
1261      {
1262          return length <= BytesLeft (offset);
1263      }
1264  
1265      size_t
1266      Copy (DataExtractor& dest_data) const;
1267  
1268      bool
1269      Append (DataExtractor& rhs);
1270  
1271      bool
1272      Append (void* bytes, lldb::offset_t length);
1273  
1274      lldb::offset_t
BytesLeft(lldb::offset_t offset)1275      BytesLeft (lldb::offset_t offset) const
1276      {
1277          const lldb::offset_t size = GetByteSize();
1278          if (size > offset)
1279              return size - offset;
1280          return 0;
1281      }
1282  
1283  protected:
1284  
1285      //------------------------------------------------------------------
1286      // Member variables
1287      //------------------------------------------------------------------
1288      const uint8_t * m_start;        ///< A pointer to the first byte of data.
1289      const uint8_t * m_end;          ///< A pointer to the byte that is past the end of the data.
1290      lldb::ByteOrder m_byte_order;   ///< The byte order of the data we are extracting from.
1291      uint32_t m_addr_size;           ///< The address size to use when extracting pointers or addresses
1292      mutable lldb::DataBufferSP m_data_sp; ///< The shared pointer to data that can be shared among multilple instances
1293  };
1294  
1295  } // namespace lldb_private
1296  
1297  #endif  // #if defined (__cplusplus)
1298  #endif  // #ifndef liblldb_DataExtractor_h_
1299