Home | History | Annotate | Line # | Download | only in dwarf2
loc.c revision 1.1.1.2
      1 /* DWARF 2 location expression support for GDB.
      2 
      3    Copyright (C) 2003-2023 Free Software Foundation, Inc.
      4 
      5    Contributed by Daniel Jacobowitz, MontaVista Software, Inc.
      6 
      7    This file is part of GDB.
      8 
      9    This program is free software; you can redistribute it and/or modify
     10    it under the terms of the GNU General Public License as published by
     11    the Free Software Foundation; either version 3 of the License, or
     12    (at your option) any later version.
     13 
     14    This program is distributed in the hope that it will be useful,
     15    but WITHOUT ANY WARRANTY; without even the implied warranty of
     16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17    GNU General Public License for more details.
     18 
     19    You should have received a copy of the GNU General Public License
     20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     21 
     22 #include "defs.h"
     23 #include "ui-out.h"
     24 #include "value.h"
     25 #include "frame.h"
     26 #include "gdbcore.h"
     27 #include "target.h"
     28 #include "inferior.h"
     29 #include "ax.h"
     30 #include "ax-gdb.h"
     31 #include "regcache.h"
     32 #include "objfiles.h"
     33 #include "block.h"
     34 #include "gdbcmd.h"
     35 #include "complaints.h"
     36 #include "dwarf2.h"
     37 #include "dwarf2/expr.h"
     38 #include "dwarf2/loc.h"
     39 #include "dwarf2/read.h"
     40 #include "dwarf2/frame.h"
     41 #include "dwarf2/leb.h"
     42 #include "compile/compile.h"
     43 #include "gdbsupport/selftest.h"
     44 #include <algorithm>
     45 #include <vector>
     46 #include <unordered_set>
     47 #include "gdbsupport/underlying.h"
     48 #include "gdbsupport/byte-vector.h"
     49 
     50 static struct value *dwarf2_evaluate_loc_desc_full
     51   (struct type *type, frame_info_ptr frame, const gdb_byte *data,
     52    size_t size, dwarf2_per_cu_data *per_cu, dwarf2_per_objfile *per_objfile,
     53    struct type *subobj_type, LONGEST subobj_byte_offset, bool as_lval = true);
     54 
     55 /* Until these have formal names, we define these here.
     56    ref: http://gcc.gnu.org/wiki/DebugFission
     57    Each entry in .debug_loc.dwo begins with a byte that describes the entry,
     58    and is then followed by data specific to that entry.  */
     59 
     60 enum debug_loc_kind
     61 {
     62   /* Indicates the end of the list of entries.  */
     63   DEBUG_LOC_END_OF_LIST = 0,
     64 
     65   /* This is followed by an unsigned LEB128 number that is an index into
     66      .debug_addr and specifies the base address for all following entries.  */
     67   DEBUG_LOC_BASE_ADDRESS = 1,
     68 
     69   /* This is followed by two unsigned LEB128 numbers that are indices into
     70      .debug_addr and specify the beginning and ending addresses, and then
     71      a normal location expression as in .debug_loc.  */
     72   DEBUG_LOC_START_END = 2,
     73 
     74   /* This is followed by an unsigned LEB128 number that is an index into
     75      .debug_addr and specifies the beginning address, and a 4 byte unsigned
     76      number that specifies the length, and then a normal location expression
     77      as in .debug_loc.  */
     78   DEBUG_LOC_START_LENGTH = 3,
     79 
     80   /* This is followed by two unsigned LEB128 operands. The values of these
     81      operands are the starting and ending offsets, respectively, relative to
     82      the applicable base address.  */
     83   DEBUG_LOC_OFFSET_PAIR = 4,
     84 
     85   /* An internal value indicating there is insufficient data.  */
     86   DEBUG_LOC_BUFFER_OVERFLOW = -1,
     87 
     88   /* An internal value indicating an invalid kind of entry was found.  */
     89   DEBUG_LOC_INVALID_ENTRY = -2
     90 };
     91 
     92 /* Helper function which throws an error if a synthetic pointer is
     93    invalid.  */
     94 
     95 void
     96 invalid_synthetic_pointer (void)
     97 {
     98   error (_("access outside bounds of object "
     99 	   "referenced via synthetic pointer"));
    100 }
    101 
    102 /* Decode the addresses in a non-dwo .debug_loc entry.
    103    A pointer to the next byte to examine is returned in *NEW_PTR.
    104    The encoded low,high addresses are return in *LOW,*HIGH.
    105    The result indicates the kind of entry found.  */
    106 
    107 static enum debug_loc_kind
    108 decode_debug_loc_addresses (const gdb_byte *loc_ptr, const gdb_byte *buf_end,
    109 			    const gdb_byte **new_ptr,
    110 			    CORE_ADDR *low, CORE_ADDR *high,
    111 			    enum bfd_endian byte_order,
    112 			    unsigned int addr_size,
    113 			    int signed_addr_p)
    114 {
    115   CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
    116 
    117   if (buf_end - loc_ptr < 2 * addr_size)
    118     return DEBUG_LOC_BUFFER_OVERFLOW;
    119 
    120   if (signed_addr_p)
    121     *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
    122   else
    123     *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
    124   loc_ptr += addr_size;
    125 
    126   if (signed_addr_p)
    127     *high = extract_signed_integer (loc_ptr, addr_size, byte_order);
    128   else
    129     *high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
    130   loc_ptr += addr_size;
    131 
    132   *new_ptr = loc_ptr;
    133 
    134   /* A base-address-selection entry.  */
    135   if ((*low & base_mask) == base_mask)
    136     return DEBUG_LOC_BASE_ADDRESS;
    137 
    138   /* An end-of-list entry.  */
    139   if (*low == 0 && *high == 0)
    140     return DEBUG_LOC_END_OF_LIST;
    141 
    142   /* We want the caller to apply the base address, so we must return
    143      DEBUG_LOC_OFFSET_PAIR here.  */
    144   return DEBUG_LOC_OFFSET_PAIR;
    145 }
    146 
    147 /* Decode the addresses in .debug_loclists entry.
    148    A pointer to the next byte to examine is returned in *NEW_PTR.
    149    The encoded low,high addresses are return in *LOW,*HIGH.
    150    The result indicates the kind of entry found.  */
    151 
    152 static enum debug_loc_kind
    153 decode_debug_loclists_addresses (dwarf2_per_cu_data *per_cu,
    154 				 dwarf2_per_objfile *per_objfile,
    155 				 const gdb_byte *loc_ptr,
    156 				 const gdb_byte *buf_end,
    157 				 const gdb_byte **new_ptr,
    158 				 CORE_ADDR *low, CORE_ADDR *high,
    159 				 enum bfd_endian byte_order,
    160 				 unsigned int addr_size,
    161 				 int signed_addr_p)
    162 {
    163   uint64_t u64;
    164 
    165   if (loc_ptr == buf_end)
    166     return DEBUG_LOC_BUFFER_OVERFLOW;
    167 
    168   switch (*loc_ptr++)
    169     {
    170     case DW_LLE_base_addressx:
    171       *low = 0;
    172       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
    173       if (loc_ptr == NULL)
    174 	 return DEBUG_LOC_BUFFER_OVERFLOW;
    175 
    176       *high = dwarf2_read_addr_index (per_cu, per_objfile, u64);
    177       *new_ptr = loc_ptr;
    178       return DEBUG_LOC_BASE_ADDRESS;
    179 
    180     case DW_LLE_startx_length:
    181       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
    182       if (loc_ptr == NULL)
    183 	 return DEBUG_LOC_BUFFER_OVERFLOW;
    184 
    185       *low = dwarf2_read_addr_index (per_cu, per_objfile, u64);
    186       *high = *low;
    187       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
    188       if (loc_ptr == NULL)
    189 	 return DEBUG_LOC_BUFFER_OVERFLOW;
    190 
    191       *high += u64;
    192       *new_ptr = loc_ptr;
    193       return DEBUG_LOC_START_LENGTH;
    194 
    195     case DW_LLE_start_length:
    196       if (buf_end - loc_ptr < addr_size)
    197 	 return DEBUG_LOC_BUFFER_OVERFLOW;
    198 
    199       if (signed_addr_p)
    200 	 *low = extract_signed_integer (loc_ptr, addr_size, byte_order);
    201       else
    202 	 *low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
    203 
    204       loc_ptr += addr_size;
    205       *high = *low;
    206 
    207       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
    208       if (loc_ptr == NULL)
    209 	 return DEBUG_LOC_BUFFER_OVERFLOW;
    210 
    211       *high += u64;
    212       *new_ptr = loc_ptr;
    213       return DEBUG_LOC_START_LENGTH;
    214 
    215     case DW_LLE_end_of_list:
    216       *new_ptr = loc_ptr;
    217       return DEBUG_LOC_END_OF_LIST;
    218 
    219     case DW_LLE_base_address:
    220       if (loc_ptr + addr_size > buf_end)
    221 	return DEBUG_LOC_BUFFER_OVERFLOW;
    222 
    223       if (signed_addr_p)
    224 	*high = extract_signed_integer (loc_ptr, addr_size, byte_order);
    225       else
    226 	*high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
    227 
    228       loc_ptr += addr_size;
    229       *new_ptr = loc_ptr;
    230       return DEBUG_LOC_BASE_ADDRESS;
    231 
    232     case DW_LLE_offset_pair:
    233       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
    234       if (loc_ptr == NULL)
    235 	return DEBUG_LOC_BUFFER_OVERFLOW;
    236 
    237       *low = u64;
    238       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &u64);
    239       if (loc_ptr == NULL)
    240 	return DEBUG_LOC_BUFFER_OVERFLOW;
    241 
    242       *high = u64;
    243       *new_ptr = loc_ptr;
    244       return DEBUG_LOC_OFFSET_PAIR;
    245 
    246     case DW_LLE_start_end:
    247       if (loc_ptr + 2 * addr_size > buf_end)
    248 	return DEBUG_LOC_BUFFER_OVERFLOW;
    249 
    250       if (signed_addr_p)
    251 	*low = extract_signed_integer (loc_ptr, addr_size, byte_order);
    252       else
    253 	*low = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
    254 
    255       loc_ptr += addr_size;
    256       if (signed_addr_p)
    257 	*high = extract_signed_integer (loc_ptr, addr_size, byte_order);
    258       else
    259 	*high = extract_unsigned_integer (loc_ptr, addr_size, byte_order);
    260 
    261       loc_ptr += addr_size;
    262       *new_ptr = loc_ptr;
    263       return DEBUG_LOC_START_END;
    264 
    265     /* Following cases are not supported yet.  */
    266     case DW_LLE_startx_endx:
    267     case DW_LLE_default_location:
    268     default:
    269       return DEBUG_LOC_INVALID_ENTRY;
    270     }
    271 }
    272 
    273 /* Decode the addresses in .debug_loc.dwo entry.
    274    A pointer to the next byte to examine is returned in *NEW_PTR.
    275    The encoded low,high addresses are return in *LOW,*HIGH.
    276    The result indicates the kind of entry found.  */
    277 
    278 static enum debug_loc_kind
    279 decode_debug_loc_dwo_addresses (dwarf2_per_cu_data *per_cu,
    280 				dwarf2_per_objfile *per_objfile,
    281 				const gdb_byte *loc_ptr,
    282 				const gdb_byte *buf_end,
    283 				const gdb_byte **new_ptr,
    284 				CORE_ADDR *low, CORE_ADDR *high,
    285 				enum bfd_endian byte_order)
    286 {
    287   uint64_t low_index, high_index;
    288 
    289   if (loc_ptr == buf_end)
    290     return DEBUG_LOC_BUFFER_OVERFLOW;
    291 
    292   switch (*loc_ptr++)
    293     {
    294     case DW_LLE_GNU_end_of_list_entry:
    295       *new_ptr = loc_ptr;
    296       return DEBUG_LOC_END_OF_LIST;
    297 
    298     case DW_LLE_GNU_base_address_selection_entry:
    299       *low = 0;
    300       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
    301       if (loc_ptr == NULL)
    302 	return DEBUG_LOC_BUFFER_OVERFLOW;
    303 
    304       *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index);
    305       *new_ptr = loc_ptr;
    306       return DEBUG_LOC_BASE_ADDRESS;
    307 
    308     case DW_LLE_GNU_start_end_entry:
    309       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
    310       if (loc_ptr == NULL)
    311 	return DEBUG_LOC_BUFFER_OVERFLOW;
    312 
    313       *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index);
    314       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &high_index);
    315       if (loc_ptr == NULL)
    316 	return DEBUG_LOC_BUFFER_OVERFLOW;
    317 
    318       *high = dwarf2_read_addr_index (per_cu, per_objfile, high_index);
    319       *new_ptr = loc_ptr;
    320       return DEBUG_LOC_START_END;
    321 
    322     case DW_LLE_GNU_start_length_entry:
    323       loc_ptr = gdb_read_uleb128 (loc_ptr, buf_end, &low_index);
    324       if (loc_ptr == NULL)
    325 	return DEBUG_LOC_BUFFER_OVERFLOW;
    326 
    327       *low = dwarf2_read_addr_index (per_cu, per_objfile, low_index);
    328       if (loc_ptr + 4 > buf_end)
    329 	return DEBUG_LOC_BUFFER_OVERFLOW;
    330 
    331       *high = *low;
    332       *high += extract_unsigned_integer (loc_ptr, 4, byte_order);
    333       *new_ptr = loc_ptr + 4;
    334       return DEBUG_LOC_START_LENGTH;
    335 
    336     default:
    337       return DEBUG_LOC_INVALID_ENTRY;
    338     }
    339 }
    340 
    341 /* A function for dealing with location lists.  Given a
    342    symbol baton (BATON) and a pc value (PC), find the appropriate
    343    location expression, set *LOCEXPR_LENGTH, and return a pointer
    344    to the beginning of the expression.  Returns NULL on failure.
    345 
    346    For now, only return the first matching location expression; there
    347    can be more than one in the list.  */
    348 
    349 const gdb_byte *
    350 dwarf2_find_location_expression (struct dwarf2_loclist_baton *baton,
    351 				 size_t *locexpr_length, CORE_ADDR pc)
    352 {
    353   dwarf2_per_objfile *per_objfile = baton->per_objfile;
    354   struct objfile *objfile = per_objfile->objfile;
    355   struct gdbarch *gdbarch = objfile->arch ();
    356   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    357   unsigned int addr_size = baton->per_cu->addr_size ();
    358   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd.get ());
    359   /* Adjustment for relocatable objects.  */
    360   CORE_ADDR text_offset = baton->per_objfile->objfile->text_section_offset ();
    361   CORE_ADDR base_address = baton->base_address;
    362   const gdb_byte *loc_ptr, *buf_end;
    363 
    364   loc_ptr = baton->data;
    365   buf_end = baton->data + baton->size;
    366 
    367   while (1)
    368     {
    369       CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
    370       int length;
    371       enum debug_loc_kind kind;
    372       const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
    373 
    374       if (baton->per_cu->version () < 5 && baton->from_dwo)
    375 	kind = decode_debug_loc_dwo_addresses (baton->per_cu,
    376 					       baton->per_objfile,
    377 					       loc_ptr, buf_end, &new_ptr,
    378 					       &low, &high, byte_order);
    379       else if (baton->per_cu->version () < 5)
    380 	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
    381 					   &low, &high,
    382 					   byte_order, addr_size,
    383 					   signed_addr_p);
    384       else
    385 	kind = decode_debug_loclists_addresses (baton->per_cu,
    386 						baton->per_objfile,
    387 						loc_ptr, buf_end, &new_ptr,
    388 						&low, &high, byte_order,
    389 						addr_size, signed_addr_p);
    390 
    391       loc_ptr = new_ptr;
    392       switch (kind)
    393 	{
    394 	case DEBUG_LOC_END_OF_LIST:
    395 	  *locexpr_length = 0;
    396 	  return NULL;
    397 
    398 	case DEBUG_LOC_BASE_ADDRESS:
    399 	  base_address = high;
    400 	  continue;
    401 
    402 	case DEBUG_LOC_START_END:
    403 	case DEBUG_LOC_START_LENGTH:
    404 	case DEBUG_LOC_OFFSET_PAIR:
    405 	  break;
    406 
    407 	case DEBUG_LOC_BUFFER_OVERFLOW:
    408 	case DEBUG_LOC_INVALID_ENTRY:
    409 	  error (_("dwarf2_find_location_expression: "
    410 		   "Corrupted DWARF expression."));
    411 
    412 	default:
    413 	  gdb_assert_not_reached ("bad debug_loc_kind");
    414 	}
    415 
    416       /* Otherwise, a location expression entry.
    417 	 If the entry is from a DWO, don't add base address: the entry is from
    418 	 .debug_addr which already has the DWARF "base address". We still add
    419 	 text offset in case we're debugging a PIE executable. However, if the
    420 	 entry is DW_LLE_offset_pair from a DWO, add the base address as the
    421 	 operands are offsets relative to the applicable base address.
    422 	 If the entry is DW_LLE_start_end or DW_LLE_start_length, then
    423 	 it already is an address, and we don't need to add the base.  */
    424       low += text_offset;
    425       high += text_offset;
    426       if (!baton->from_dwo && kind == DEBUG_LOC_OFFSET_PAIR)
    427 	{
    428 	  low += base_address;
    429 	  high += base_address;
    430 	}
    431 
    432       if (baton->per_cu->version () < 5)
    433 	{
    434 	  length = extract_unsigned_integer (loc_ptr, 2, byte_order);
    435 	  loc_ptr += 2;
    436 	}
    437       else
    438 	{
    439 	  unsigned int bytes_read;
    440 
    441 	  length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
    442 	  loc_ptr += bytes_read;
    443 	}
    444 
    445       if (low == high && pc == low)
    446 	{
    447 	  /* This is entry PC record present only at entry point
    448 	     of a function.  Verify it is really the function entry point.  */
    449 
    450 	  const struct block *pc_block = block_for_pc (pc);
    451 	  struct symbol *pc_func = NULL;
    452 
    453 	  if (pc_block)
    454 	    pc_func = block_linkage_function (pc_block);
    455 
    456 	  if (pc_func && pc == pc_func->value_block ()->entry_pc ())
    457 	    {
    458 	      *locexpr_length = length;
    459 	      return loc_ptr;
    460 	    }
    461 	}
    462 
    463       if (pc >= low && pc < high)
    464 	{
    465 	  *locexpr_length = length;
    466 	  return loc_ptr;
    467 	}
    468 
    469       loc_ptr += length;
    470     }
    471 }
    472 
    473 /* Implement find_frame_base_location method for LOC_BLOCK functions using
    474    DWARF expression for its DW_AT_frame_base.  */
    475 
    476 static void
    477 locexpr_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
    478 				  const gdb_byte **start, size_t *length)
    479 {
    480   struct dwarf2_locexpr_baton *symbaton
    481     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
    482 
    483   *length = symbaton->size;
    484   *start = symbaton->data;
    485 }
    486 
    487 /* Implement the struct symbol_block_ops::get_frame_base method for
    488    LOC_BLOCK functions using a DWARF expression as its DW_AT_frame_base.  */
    489 
    490 static CORE_ADDR
    491 locexpr_get_frame_base (struct symbol *framefunc, frame_info_ptr frame)
    492 {
    493   struct gdbarch *gdbarch;
    494   struct type *type;
    495   struct dwarf2_locexpr_baton *dlbaton;
    496   const gdb_byte *start;
    497   size_t length;
    498   struct value *result;
    499 
    500   /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
    501      Thus, it's supposed to provide the find_frame_base_location method as
    502      well.  */
    503   gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
    504 
    505   gdbarch = get_frame_arch (frame);
    506   type = builtin_type (gdbarch)->builtin_data_ptr;
    507   dlbaton = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (framefunc);
    508 
    509   SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
    510     (framefunc, get_frame_pc (frame), &start, &length);
    511   result = dwarf2_evaluate_loc_desc (type, frame, start, length,
    512 				     dlbaton->per_cu, dlbaton->per_objfile);
    513 
    514   /* The DW_AT_frame_base attribute contains a location description which
    515      computes the base address itself.  However, the call to
    516      dwarf2_evaluate_loc_desc returns a value representing a variable at
    517      that address.  The frame base address is thus this variable's
    518      address.  */
    519   return value_address (result);
    520 }
    521 
    522 /* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
    523    function uses DWARF expression for its DW_AT_frame_base.  */
    524 
    525 const struct symbol_block_ops dwarf2_block_frame_base_locexpr_funcs =
    526 {
    527   locexpr_find_frame_base_location,
    528   locexpr_get_frame_base
    529 };
    530 
    531 /* Implement find_frame_base_location method for LOC_BLOCK functions using
    532    DWARF location list for its DW_AT_frame_base.  */
    533 
    534 static void
    535 loclist_find_frame_base_location (struct symbol *framefunc, CORE_ADDR pc,
    536 				  const gdb_byte **start, size_t *length)
    537 {
    538   struct dwarf2_loclist_baton *symbaton
    539     = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
    540 
    541   *start = dwarf2_find_location_expression (symbaton, length, pc);
    542 }
    543 
    544 /* Implement the struct symbol_block_ops::get_frame_base method for
    545    LOC_BLOCK functions using a DWARF location list as its DW_AT_frame_base.  */
    546 
    547 static CORE_ADDR
    548 loclist_get_frame_base (struct symbol *framefunc, frame_info_ptr frame)
    549 {
    550   struct gdbarch *gdbarch;
    551   struct type *type;
    552   struct dwarf2_loclist_baton *dlbaton;
    553   const gdb_byte *start;
    554   size_t length;
    555   struct value *result;
    556 
    557   /* If this method is called, then FRAMEFUNC is supposed to be a DWARF block.
    558      Thus, it's supposed to provide the find_frame_base_location method as
    559      well.  */
    560   gdb_assert (SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location != NULL);
    561 
    562   gdbarch = get_frame_arch (frame);
    563   type = builtin_type (gdbarch)->builtin_data_ptr;
    564   dlbaton = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (framefunc);
    565 
    566   SYMBOL_BLOCK_OPS (framefunc)->find_frame_base_location
    567     (framefunc, get_frame_pc (frame), &start, &length);
    568   result = dwarf2_evaluate_loc_desc (type, frame, start, length,
    569 				     dlbaton->per_cu, dlbaton->per_objfile);
    570 
    571   /* The DW_AT_frame_base attribute contains a location description which
    572      computes the base address itself.  However, the call to
    573      dwarf2_evaluate_loc_desc returns a value representing a variable at
    574      that address.  The frame base address is thus this variable's
    575      address.  */
    576   return value_address (result);
    577 }
    578 
    579 /* Vector for inferior functions as represented by LOC_BLOCK, if the inferior
    580    function uses DWARF location list for its DW_AT_frame_base.  */
    581 
    582 const struct symbol_block_ops dwarf2_block_frame_base_loclist_funcs =
    583 {
    584   loclist_find_frame_base_location,
    585   loclist_get_frame_base
    586 };
    587 
    588 /* See dwarf2/loc.h.  */
    589 
    590 void
    591 func_get_frame_base_dwarf_block (struct symbol *framefunc, CORE_ADDR pc,
    592 				 const gdb_byte **start, size_t *length)
    593 {
    594   if (SYMBOL_BLOCK_OPS (framefunc) != NULL)
    595     {
    596       const struct symbol_block_ops *ops_block = SYMBOL_BLOCK_OPS (framefunc);
    597 
    598       ops_block->find_frame_base_location (framefunc, pc, start, length);
    599     }
    600   else
    601     *length = 0;
    602 
    603   if (*length == 0)
    604     error (_("Could not find the frame base for \"%s\"."),
    605 	   framefunc->natural_name ());
    606 }
    607 
    608 /* See loc.h.  */
    609 
    610 value *
    611 compute_var_value (const char *name)
    612 {
    613   struct block_symbol sym = lookup_symbol (name, nullptr, VAR_DOMAIN,
    614 					   nullptr);
    615   if (sym.symbol != nullptr)
    616     return value_of_variable (sym.symbol, sym.block);
    617   return nullptr;
    618 }
    619 
    620 /* See dwarf2/loc.h.  */
    621 
    622 unsigned int entry_values_debug = 0;
    623 
    624 /* Helper to set entry_values_debug.  */
    625 
    626 static void
    627 show_entry_values_debug (struct ui_file *file, int from_tty,
    628 			 struct cmd_list_element *c, const char *value)
    629 {
    630   gdb_printf (file,
    631 	      _("Entry values and tail call frames debugging is %s.\n"),
    632 	      value);
    633 }
    634 
    635 /* See gdbtypes.h.  */
    636 
    637 void
    638 call_site_target::iterate_over_addresses
    639      (struct gdbarch *call_site_gdbarch,
    640       const struct call_site *call_site,
    641       frame_info_ptr caller_frame,
    642       iterate_ftype callback) const
    643 {
    644   switch (m_loc_kind)
    645     {
    646     case call_site_target::DWARF_BLOCK:
    647       {
    648 	struct dwarf2_locexpr_baton *dwarf_block;
    649 	struct value *val;
    650 	struct type *caller_core_addr_type;
    651 	struct gdbarch *caller_arch;
    652 
    653 	dwarf_block = m_loc.dwarf_block;
    654 	if (dwarf_block == NULL)
    655 	  {
    656 	    struct bound_minimal_symbol msym;
    657 
    658 	    msym = lookup_minimal_symbol_by_pc (call_site->pc () - 1);
    659 	    throw_error (NO_ENTRY_VALUE_ERROR,
    660 			 _("DW_AT_call_target is not specified at %s in %s"),
    661 			 paddress (call_site_gdbarch, call_site->pc ()),
    662 			 (msym.minsym == NULL ? "???"
    663 			  : msym.minsym->print_name ()));
    664 
    665 	  }
    666 	if (caller_frame == NULL)
    667 	  {
    668 	    struct bound_minimal_symbol msym;
    669 
    670 	    msym = lookup_minimal_symbol_by_pc (call_site->pc () - 1);
    671 	    throw_error (NO_ENTRY_VALUE_ERROR,
    672 			 _("DW_AT_call_target DWARF block resolving "
    673 			   "requires known frame which is currently not "
    674 			   "available at %s in %s"),
    675 			 paddress (call_site_gdbarch, call_site->pc ()),
    676 			 (msym.minsym == NULL ? "???"
    677 			  : msym.minsym->print_name ()));
    678 
    679 	  }
    680 	caller_arch = get_frame_arch (caller_frame);
    681 	caller_core_addr_type = builtin_type (caller_arch)->builtin_func_ptr;
    682 	val = dwarf2_evaluate_loc_desc (caller_core_addr_type, caller_frame,
    683 					dwarf_block->data, dwarf_block->size,
    684 					dwarf_block->per_cu,
    685 					dwarf_block->per_objfile);
    686 	/* DW_AT_call_target is a DWARF expression, not a DWARF location.  */
    687 	if (VALUE_LVAL (val) == lval_memory)
    688 	  callback (value_address (val));
    689 	else
    690 	  callback (value_as_address (val));
    691       }
    692       break;
    693 
    694     case call_site_target::PHYSNAME:
    695       {
    696 	const char *physname;
    697 	struct bound_minimal_symbol msym;
    698 
    699 	physname = m_loc.physname;
    700 
    701 	/* Handle both the mangled and demangled PHYSNAME.  */
    702 	msym = lookup_minimal_symbol (physname, NULL, NULL);
    703 	if (msym.minsym == NULL)
    704 	  {
    705 	    msym = lookup_minimal_symbol_by_pc (call_site->pc () - 1);
    706 	    throw_error (NO_ENTRY_VALUE_ERROR,
    707 			 _("Cannot find function \"%s\" for a call site target "
    708 			   "at %s in %s"),
    709 			 physname, paddress (call_site_gdbarch, call_site->pc ()),
    710 			 (msym.minsym == NULL ? "???"
    711 			  : msym.minsym->print_name ()));
    712 
    713 	  }
    714 	callback (msym.value_address ());
    715       }
    716       break;
    717 
    718     case call_site_target::PHYSADDR:
    719       {
    720 	dwarf2_per_objfile *per_objfile = call_site->per_objfile;
    721 	compunit_symtab *cust = per_objfile->get_symtab (call_site->per_cu);
    722 	int sect_idx = cust->block_line_section ();
    723 	CORE_ADDR delta = per_objfile->objfile->section_offsets[sect_idx];
    724 
    725 	callback (m_loc.physaddr + delta);
    726       }
    727       break;
    728 
    729     case call_site_target::ADDRESSES:
    730       {
    731 	dwarf2_per_objfile *per_objfile = call_site->per_objfile;
    732 	compunit_symtab *cust = per_objfile->get_symtab (call_site->per_cu);
    733 	int sect_idx = cust->block_line_section ();
    734 	CORE_ADDR delta = per_objfile->objfile->section_offsets[sect_idx];
    735 
    736 	for (unsigned i = 0; i < m_loc.addresses.length; ++i)
    737 	  callback (m_loc.addresses.values[i] + delta);
    738       }
    739       break;
    740 
    741     default:
    742       internal_error (_("invalid call site target kind"));
    743     }
    744 }
    745 
    746 /* Convert function entry point exact address ADDR to the function which is
    747    compliant with TAIL_CALL_LIST_COMPLETE condition.  Throw
    748    NO_ENTRY_VALUE_ERROR otherwise.  */
    749 
    750 static struct symbol *
    751 func_addr_to_tail_call_list (struct gdbarch *gdbarch, CORE_ADDR addr)
    752 {
    753   struct symbol *sym = find_pc_function (addr);
    754   struct type *type;
    755 
    756   if (sym == NULL || sym->value_block ()->entry_pc () != addr)
    757     throw_error (NO_ENTRY_VALUE_ERROR,
    758 		 _("DW_TAG_call_site resolving failed to find function "
    759 		   "name for address %s"),
    760 		 paddress (gdbarch, addr));
    761 
    762   type = sym->type ();
    763   gdb_assert (type->code () == TYPE_CODE_FUNC);
    764   gdb_assert (TYPE_SPECIFIC_FIELD (type) == TYPE_SPECIFIC_FUNC);
    765 
    766   return sym;
    767 }
    768 
    769 /* Verify function with entry point exact address ADDR can never call itself
    770    via its tail calls (incl. transitively).  Throw NO_ENTRY_VALUE_ERROR if it
    771    can call itself via tail calls.
    772 
    773    If a funtion can tail call itself its entry value based parameters are
    774    unreliable.  There is no verification whether the value of some/all
    775    parameters is unchanged through the self tail call, we expect if there is
    776    a self tail call all the parameters can be modified.  */
    777 
    778 static void
    779 func_verify_no_selftailcall (struct gdbarch *gdbarch, CORE_ADDR verify_addr)
    780 {
    781   CORE_ADDR addr;
    782 
    783   /* The verification is completely unordered.  Track here function addresses
    784      which still need to be iterated.  */
    785   std::vector<CORE_ADDR> todo;
    786 
    787   /* Track here CORE_ADDRs which were already visited.  */
    788   std::unordered_set<CORE_ADDR> addr_hash;
    789 
    790   todo.push_back (verify_addr);
    791   while (!todo.empty ())
    792     {
    793       struct symbol *func_sym;
    794       struct call_site *call_site;
    795 
    796       addr = todo.back ();
    797       todo.pop_back ();
    798 
    799       func_sym = func_addr_to_tail_call_list (gdbarch, addr);
    800 
    801       for (call_site = TYPE_TAIL_CALL_LIST (func_sym->type ());
    802 	   call_site; call_site = call_site->tail_call_next)
    803 	{
    804 	  /* CALLER_FRAME with registers is not available for tail-call jumped
    805 	     frames.  */
    806 	  call_site->iterate_over_addresses (gdbarch, nullptr,
    807 					     [&] (CORE_ADDR target_addr)
    808 	    {
    809 	      if (target_addr == verify_addr)
    810 		{
    811 		  struct bound_minimal_symbol msym;
    812 
    813 		  msym = lookup_minimal_symbol_by_pc (verify_addr);
    814 		  throw_error (NO_ENTRY_VALUE_ERROR,
    815 			       _("DW_OP_entry_value resolving has found "
    816 				 "function \"%s\" at %s can call itself via tail "
    817 				 "calls"),
    818 			       (msym.minsym == NULL ? "???"
    819 				: msym.minsym->print_name ()),
    820 			       paddress (gdbarch, verify_addr));
    821 		}
    822 
    823 	      if (addr_hash.insert (target_addr).second)
    824 		todo.push_back (target_addr);
    825 	    });
    826 	}
    827     }
    828 }
    829 
    830 /* Print user readable form of CALL_SITE->PC to gdb_stdlog.  Used only for
    831    ENTRY_VALUES_DEBUG.  */
    832 
    833 static void
    834 tailcall_dump (struct gdbarch *gdbarch, const struct call_site *call_site)
    835 {
    836   CORE_ADDR addr = call_site->pc ();
    837   struct bound_minimal_symbol msym = lookup_minimal_symbol_by_pc (addr - 1);
    838 
    839   gdb_printf (gdb_stdlog, " %s(%s)", paddress (gdbarch, addr),
    840 	      (msym.minsym == NULL ? "???"
    841 	       : msym.minsym->print_name ()));
    842 
    843 }
    844 
    845 /* Intersect RESULTP with CHAIN to keep RESULTP unambiguous, keep in RESULTP
    846    only top callers and bottom callees which are present in both.  GDBARCH is
    847    used only for ENTRY_VALUES_DEBUG.  RESULTP is NULL after return if there are
    848    no remaining possibilities to provide unambiguous non-trivial result.
    849    RESULTP should point to NULL on the first (initialization) call.  Caller is
    850    responsible for xfree of any RESULTP data.  */
    851 
    852 static void
    853 chain_candidate (struct gdbarch *gdbarch,
    854 		 gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
    855 		 const std::vector<struct call_site *> &chain)
    856 {
    857   long length = chain.size ();
    858   int callers, callees, idx;
    859 
    860   if (*resultp == NULL)
    861     {
    862       /* Create the initial chain containing all the passed PCs.  */
    863 
    864       struct call_site_chain *result
    865 	= ((struct call_site_chain *)
    866 	   xmalloc (sizeof (*result)
    867 		    + sizeof (*result->call_site) * (length - 1)));
    868       result->length = length;
    869       result->callers = result->callees = length;
    870       if (!chain.empty ())
    871 	memcpy (result->call_site, chain.data (),
    872 		sizeof (*result->call_site) * length);
    873       resultp->reset (result);
    874 
    875       if (entry_values_debug)
    876 	{
    877 	  gdb_printf (gdb_stdlog, "tailcall: initial:");
    878 	  for (idx = 0; idx < length; idx++)
    879 	    tailcall_dump (gdbarch, result->call_site[idx]);
    880 	  gdb_putc ('\n', gdb_stdlog);
    881 	}
    882 
    883       return;
    884     }
    885 
    886   if (entry_values_debug)
    887     {
    888       gdb_printf (gdb_stdlog, "tailcall: compare:");
    889       for (idx = 0; idx < length; idx++)
    890 	tailcall_dump (gdbarch, chain[idx]);
    891       gdb_putc ('\n', gdb_stdlog);
    892     }
    893 
    894   /* Intersect callers.  */
    895 
    896   callers = std::min ((long) (*resultp)->callers, length);
    897   for (idx = 0; idx < callers; idx++)
    898     if ((*resultp)->call_site[idx] != chain[idx])
    899       {
    900 	(*resultp)->callers = idx;
    901 	break;
    902       }
    903 
    904   /* Intersect callees.  */
    905 
    906   callees = std::min ((long) (*resultp)->callees, length);
    907   for (idx = 0; idx < callees; idx++)
    908     if ((*resultp)->call_site[(*resultp)->length - 1 - idx]
    909 	!= chain[length - 1 - idx])
    910       {
    911 	(*resultp)->callees = idx;
    912 	break;
    913       }
    914 
    915   if (entry_values_debug)
    916     {
    917       gdb_printf (gdb_stdlog, "tailcall: reduced:");
    918       for (idx = 0; idx < (*resultp)->callers; idx++)
    919 	tailcall_dump (gdbarch, (*resultp)->call_site[idx]);
    920       gdb_puts (" |", gdb_stdlog);
    921       for (idx = 0; idx < (*resultp)->callees; idx++)
    922 	tailcall_dump (gdbarch,
    923 		       (*resultp)->call_site[(*resultp)->length
    924 					     - (*resultp)->callees + idx]);
    925       gdb_putc ('\n', gdb_stdlog);
    926     }
    927 
    928   if ((*resultp)->callers == 0 && (*resultp)->callees == 0)
    929     {
    930       /* There are no common callers or callees.  It could be also a direct
    931 	 call (which has length 0) with ambiguous possibility of an indirect
    932 	 call - CALLERS == CALLEES == 0 is valid during the first allocation
    933 	 but any subsequence processing of such entry means ambiguity.  */
    934       resultp->reset (NULL);
    935       return;
    936     }
    937 
    938   /* See call_site_find_chain_1 why there is no way to reach the bottom callee
    939      PC again.  In such case there must be two different code paths to reach
    940      it.  CALLERS + CALLEES equal to LENGTH in the case of self tail-call.  */
    941   gdb_assert ((*resultp)->callers + (*resultp)->callees <= (*resultp)->length);
    942 }
    943 
    944 /* Recursively try to construct the call chain.  GDBARCH, RESULTP, and
    945    CHAIN are passed to chain_candidate.  ADDR_HASH tracks which
    946    addresses have already been seen along the current chain.
    947    CALL_SITE is the call site to visit, and CALLEE_PC is the PC we're
    948    trying to "reach".  Returns false if an error has already been
    949    detected and so an early return can be done.  If it makes sense to
    950    keep trying (even if no answer has yet been found), returns
    951    true.  */
    952 
    953 static bool
    954 call_site_find_chain_2
    955      (struct gdbarch *gdbarch,
    956       gdb::unique_xmalloc_ptr<struct call_site_chain> *resultp,
    957       std::vector<struct call_site *> &chain,
    958       std::unordered_set<CORE_ADDR> &addr_hash,
    959       struct call_site *call_site,
    960       CORE_ADDR callee_pc)
    961 {
    962   std::vector<CORE_ADDR> addresses;
    963   bool found_exact = false;
    964   call_site->iterate_over_addresses (gdbarch, nullptr,
    965 				     [&] (CORE_ADDR addr)
    966     {
    967       if (addr == callee_pc)
    968 	found_exact = true;
    969       else
    970 	addresses.push_back (addr);
    971     });
    972 
    973   if (found_exact)
    974     {
    975       chain_candidate (gdbarch, resultp, chain);
    976       /* If RESULTP was reset, then chain_candidate failed, and so we
    977 	 can tell our callers to early-return.  */
    978       return *resultp != nullptr;
    979     }
    980 
    981   for (CORE_ADDR target_func_addr : addresses)
    982     {
    983       struct symbol *target_func
    984 	= func_addr_to_tail_call_list (gdbarch, target_func_addr);
    985       for (struct call_site *target_call_site
    986 	     = TYPE_TAIL_CALL_LIST (target_func->type ());
    987 	   target_call_site != nullptr;
    988 	   target_call_site = target_call_site->tail_call_next)
    989 	{
    990 	  if (addr_hash.insert (target_call_site->pc ()).second)
    991 	    {
    992 	      /* Successfully entered TARGET_CALL_SITE.  */
    993 	      chain.push_back (target_call_site);
    994 
    995 	      if (!call_site_find_chain_2 (gdbarch, resultp, chain,
    996 					   addr_hash, target_call_site,
    997 					   callee_pc))
    998 		return false;
    999 
   1000 	      size_t removed = addr_hash.erase (target_call_site->pc ());
   1001 	      gdb_assert (removed == 1);
   1002 	      chain.pop_back ();
   1003 	    }
   1004 	}
   1005     }
   1006 
   1007   return true;
   1008 }
   1009 
   1010 /* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All
   1011    the assumed frames between them use GDBARCH.  Any unreliability
   1012    results in thrown NO_ENTRY_VALUE_ERROR.  */
   1013 
   1014 static gdb::unique_xmalloc_ptr<call_site_chain>
   1015 call_site_find_chain_1 (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
   1016 			CORE_ADDR callee_pc)
   1017 {
   1018   CORE_ADDR save_callee_pc = callee_pc;
   1019   gdb::unique_xmalloc_ptr<struct call_site_chain> retval;
   1020   struct call_site *call_site;
   1021 
   1022   /* CHAIN contains only the intermediate CALL_SITEs.  Neither CALLER_PC's
   1023      call_site nor any possible call_site at CALLEE_PC's function is there.
   1024      Any CALL_SITE in CHAIN will be iterated to its siblings - via
   1025      TAIL_CALL_NEXT.  This is inappropriate for CALLER_PC's call_site.  */
   1026   std::vector<struct call_site *> chain;
   1027 
   1028   /* A given call site may have multiple associated addresses.  This
   1029      can happen if, e.g., the caller is split by hot/cold
   1030      partitioning.  This vector tracks the ones we haven't visited
   1031      yet.  */
   1032   std::vector<std::vector<CORE_ADDR>> unvisited_addresses;
   1033 
   1034   /* We are not interested in the specific PC inside the callee function.  */
   1035   callee_pc = get_pc_function_start (callee_pc);
   1036   if (callee_pc == 0)
   1037     throw_error (NO_ENTRY_VALUE_ERROR, _("Unable to find function for PC %s"),
   1038 		 paddress (gdbarch, save_callee_pc));
   1039 
   1040   /* Mark CALL_SITEs so we do not visit the same ones twice.  */
   1041   std::unordered_set<CORE_ADDR> addr_hash;
   1042 
   1043   /* Do not push CALL_SITE to CHAIN.  Push there only the first tail call site
   1044      at the target's function.  All the possible tail call sites in the
   1045      target's function will get iterated as already pushed into CHAIN via their
   1046      TAIL_CALL_NEXT.  */
   1047   call_site = call_site_for_pc (gdbarch, caller_pc);
   1048   /* No need to check the return value here, because we no longer care
   1049      about possible early returns.  */
   1050   call_site_find_chain_2 (gdbarch, &retval, chain, addr_hash, call_site,
   1051 			  callee_pc);
   1052 
   1053   if (retval == NULL)
   1054     {
   1055       struct bound_minimal_symbol msym_caller, msym_callee;
   1056 
   1057       msym_caller = lookup_minimal_symbol_by_pc (caller_pc);
   1058       msym_callee = lookup_minimal_symbol_by_pc (callee_pc);
   1059       throw_error (NO_ENTRY_VALUE_ERROR,
   1060 		   _("There are no unambiguously determinable intermediate "
   1061 		     "callers or callees between caller function \"%s\" at %s "
   1062 		     "and callee function \"%s\" at %s"),
   1063 		   (msym_caller.minsym == NULL
   1064 		    ? "???" : msym_caller.minsym->print_name ()),
   1065 		   paddress (gdbarch, caller_pc),
   1066 		   (msym_callee.minsym == NULL
   1067 		    ? "???" : msym_callee.minsym->print_name ()),
   1068 		   paddress (gdbarch, callee_pc));
   1069     }
   1070 
   1071   return retval;
   1072 }
   1073 
   1074 /* Create and return call_site_chain for CALLER_PC and CALLEE_PC.  All the
   1075    assumed frames between them use GDBARCH.  If valid call_site_chain cannot be
   1076    constructed return NULL.  */
   1077 
   1078 gdb::unique_xmalloc_ptr<call_site_chain>
   1079 call_site_find_chain (struct gdbarch *gdbarch, CORE_ADDR caller_pc,
   1080 		      CORE_ADDR callee_pc)
   1081 {
   1082   gdb::unique_xmalloc_ptr<call_site_chain> retval;
   1083 
   1084   try
   1085     {
   1086       retval = call_site_find_chain_1 (gdbarch, caller_pc, callee_pc);
   1087     }
   1088   catch (const gdb_exception_error &e)
   1089     {
   1090       if (e.error == NO_ENTRY_VALUE_ERROR)
   1091 	{
   1092 	  if (entry_values_debug)
   1093 	    exception_print (gdb_stdout, e);
   1094 
   1095 	  return NULL;
   1096 	}
   1097       else
   1098 	throw;
   1099     }
   1100 
   1101   return retval;
   1102 }
   1103 
   1104 /* Return 1 if KIND and KIND_U match PARAMETER.  Return 0 otherwise.  */
   1105 
   1106 static int
   1107 call_site_parameter_matches (struct call_site_parameter *parameter,
   1108 			     enum call_site_parameter_kind kind,
   1109 			     union call_site_parameter_u kind_u)
   1110 {
   1111   if (kind == parameter->kind)
   1112     switch (kind)
   1113       {
   1114       case CALL_SITE_PARAMETER_DWARF_REG:
   1115 	return kind_u.dwarf_reg == parameter->u.dwarf_reg;
   1116 
   1117       case CALL_SITE_PARAMETER_FB_OFFSET:
   1118 	return kind_u.fb_offset == parameter->u.fb_offset;
   1119 
   1120       case CALL_SITE_PARAMETER_PARAM_OFFSET:
   1121 	return kind_u.param_cu_off == parameter->u.param_cu_off;
   1122       }
   1123   return 0;
   1124 }
   1125 
   1126 /* See loc.h.  */
   1127 
   1128 struct call_site_parameter *
   1129 dwarf_expr_reg_to_entry_parameter (frame_info_ptr frame,
   1130 				   enum call_site_parameter_kind kind,
   1131 				   union call_site_parameter_u kind_u,
   1132 				   dwarf2_per_cu_data **per_cu_return,
   1133 				   dwarf2_per_objfile **per_objfile_return)
   1134 {
   1135   CORE_ADDR func_addr, caller_pc;
   1136   struct gdbarch *gdbarch;
   1137   frame_info_ptr caller_frame;
   1138   struct call_site *call_site;
   1139   int iparams;
   1140   /* Initialize it just to avoid a GCC false warning.  */
   1141   struct call_site_parameter *parameter = NULL;
   1142   CORE_ADDR target_addr;
   1143 
   1144   while (get_frame_type (frame) == INLINE_FRAME)
   1145     {
   1146       frame = get_prev_frame (frame);
   1147       gdb_assert (frame != NULL);
   1148     }
   1149 
   1150   func_addr = get_frame_func (frame);
   1151   gdbarch = get_frame_arch (frame);
   1152   caller_frame = get_prev_frame (frame);
   1153   if (gdbarch != frame_unwind_arch (frame))
   1154     {
   1155       struct bound_minimal_symbol msym
   1156 	= lookup_minimal_symbol_by_pc (func_addr);
   1157       struct gdbarch *caller_gdbarch = frame_unwind_arch (frame);
   1158 
   1159       throw_error (NO_ENTRY_VALUE_ERROR,
   1160 		   _("DW_OP_entry_value resolving callee gdbarch %s "
   1161 		     "(of %s (%s)) does not match caller gdbarch %s"),
   1162 		   gdbarch_bfd_arch_info (gdbarch)->printable_name,
   1163 		   paddress (gdbarch, func_addr),
   1164 		   (msym.minsym == NULL ? "???"
   1165 		    : msym.minsym->print_name ()),
   1166 		   gdbarch_bfd_arch_info (caller_gdbarch)->printable_name);
   1167     }
   1168 
   1169   if (caller_frame == NULL)
   1170     {
   1171       struct bound_minimal_symbol msym
   1172 	= lookup_minimal_symbol_by_pc (func_addr);
   1173 
   1174       throw_error (NO_ENTRY_VALUE_ERROR, _("DW_OP_entry_value resolving "
   1175 					   "requires caller of %s (%s)"),
   1176 		   paddress (gdbarch, func_addr),
   1177 		   (msym.minsym == NULL ? "???"
   1178 		    : msym.minsym->print_name ()));
   1179     }
   1180   caller_pc = get_frame_pc (caller_frame);
   1181   call_site = call_site_for_pc (gdbarch, caller_pc);
   1182 
   1183   bool found = false;
   1184   unsigned count = 0;
   1185   call_site->iterate_over_addresses (gdbarch, caller_frame,
   1186 				     [&] (CORE_ADDR addr)
   1187     {
   1188       /* Preserve any address.  */
   1189       target_addr = addr;
   1190       ++count;
   1191       if (addr == func_addr)
   1192 	found = true;
   1193     });
   1194   if (!found)
   1195     {
   1196       struct minimal_symbol *target_msym, *func_msym;
   1197 
   1198       target_msym = lookup_minimal_symbol_by_pc (target_addr).minsym;
   1199       func_msym = lookup_minimal_symbol_by_pc (func_addr).minsym;
   1200       throw_error (NO_ENTRY_VALUE_ERROR,
   1201 		   _("DW_OP_entry_value resolving expects callee %s at %s %s"
   1202 		     "but the called frame is for %s at %s"),
   1203 		   (target_msym == NULL ? "???"
   1204 					: target_msym->print_name ()),
   1205 		   paddress (gdbarch, target_addr),
   1206 		   (count > 0
   1207 		    ? _("(but note there are multiple addresses not listed)")
   1208 		    : ""),
   1209 		   func_msym == NULL ? "???" : func_msym->print_name (),
   1210 		   paddress (gdbarch, func_addr));
   1211     }
   1212 
   1213   /* No entry value based parameters would be reliable if this function can
   1214      call itself via tail calls.  */
   1215   func_verify_no_selftailcall (gdbarch, func_addr);
   1216 
   1217   for (iparams = 0; iparams < call_site->parameter_count; iparams++)
   1218     {
   1219       parameter = &call_site->parameter[iparams];
   1220       if (call_site_parameter_matches (parameter, kind, kind_u))
   1221 	break;
   1222     }
   1223   if (iparams == call_site->parameter_count)
   1224     {
   1225       struct minimal_symbol *msym
   1226 	= lookup_minimal_symbol_by_pc (caller_pc).minsym;
   1227 
   1228       /* DW_TAG_call_site_parameter will be missing just if GCC could not
   1229 	 determine its value.  */
   1230       throw_error (NO_ENTRY_VALUE_ERROR, _("Cannot find matching parameter "
   1231 					   "at DW_TAG_call_site %s at %s"),
   1232 		   paddress (gdbarch, caller_pc),
   1233 		   msym == NULL ? "???" : msym->print_name ());
   1234     }
   1235 
   1236   *per_cu_return = call_site->per_cu;
   1237   *per_objfile_return = call_site->per_objfile;
   1238   return parameter;
   1239 }
   1240 
   1241 /* Return value for PARAMETER matching DEREF_SIZE.  If DEREF_SIZE is -1, return
   1242    the normal DW_AT_call_value block.  Otherwise return the
   1243    DW_AT_call_data_value (dereferenced) block.
   1244 
   1245    TYPE and CALLER_FRAME specify how to evaluate the DWARF block into returned
   1246    struct value.
   1247 
   1248    Function always returns non-NULL, non-optimized out value.  It throws
   1249    NO_ENTRY_VALUE_ERROR if it cannot resolve the value for any reason.  */
   1250 
   1251 static struct value *
   1252 dwarf_entry_parameter_to_value (struct call_site_parameter *parameter,
   1253 				CORE_ADDR deref_size, struct type *type,
   1254 				frame_info_ptr caller_frame,
   1255 				dwarf2_per_cu_data *per_cu,
   1256 				dwarf2_per_objfile *per_objfile)
   1257 {
   1258   const gdb_byte *data_src;
   1259   size_t size;
   1260 
   1261   data_src = deref_size == -1 ? parameter->value : parameter->data_value;
   1262   size = deref_size == -1 ? parameter->value_size : parameter->data_value_size;
   1263 
   1264   /* DEREF_SIZE size is not verified here.  */
   1265   if (data_src == NULL)
   1266     throw_error (NO_ENTRY_VALUE_ERROR,
   1267 		 _("Cannot resolve DW_AT_call_data_value"));
   1268 
   1269   return dwarf2_evaluate_loc_desc (type, caller_frame, data_src, size, per_cu,
   1270 				   per_objfile, false);
   1271 }
   1272 
   1273 /* VALUE must be of type lval_computed with entry_data_value_funcs.  Perform
   1274    the indirect method on it, that is use its stored target value, the sole
   1275    purpose of entry_data_value_funcs..  */
   1276 
   1277 static struct value *
   1278 entry_data_value_coerce_ref (const struct value *value)
   1279 {
   1280   struct type *checked_type = check_typedef (value_type (value));
   1281   struct value *target_val;
   1282 
   1283   if (!TYPE_IS_REFERENCE (checked_type))
   1284     return NULL;
   1285 
   1286   target_val = (struct value *) value_computed_closure (value);
   1287   value_incref (target_val);
   1288   return target_val;
   1289 }
   1290 
   1291 /* Implement copy_closure.  */
   1292 
   1293 static void *
   1294 entry_data_value_copy_closure (const struct value *v)
   1295 {
   1296   struct value *target_val = (struct value *) value_computed_closure (v);
   1297 
   1298   value_incref (target_val);
   1299   return target_val;
   1300 }
   1301 
   1302 /* Implement free_closure.  */
   1303 
   1304 static void
   1305 entry_data_value_free_closure (struct value *v)
   1306 {
   1307   struct value *target_val = (struct value *) value_computed_closure (v);
   1308 
   1309   value_decref (target_val);
   1310 }
   1311 
   1312 /* Vector for methods for an entry value reference where the referenced value
   1313    is stored in the caller.  On the first dereference use
   1314    DW_AT_call_data_value in the caller.  */
   1315 
   1316 static const struct lval_funcs entry_data_value_funcs =
   1317 {
   1318   NULL,	/* read */
   1319   NULL,	/* write */
   1320   nullptr,
   1321   NULL,	/* indirect */
   1322   entry_data_value_coerce_ref,
   1323   NULL,	/* check_synthetic_pointer */
   1324   entry_data_value_copy_closure,
   1325   entry_data_value_free_closure
   1326 };
   1327 
   1328 /* See dwarf2/loc.h.  */
   1329 struct value *
   1330 value_of_dwarf_reg_entry (struct type *type, frame_info_ptr frame,
   1331 			  enum call_site_parameter_kind kind,
   1332 			  union call_site_parameter_u kind_u)
   1333 {
   1334   struct type *checked_type = check_typedef (type);
   1335   struct type *target_type = checked_type->target_type ();
   1336   frame_info_ptr caller_frame = get_prev_frame (frame);
   1337   struct value *outer_val, *target_val, *val;
   1338   struct call_site_parameter *parameter;
   1339   dwarf2_per_cu_data *caller_per_cu;
   1340   dwarf2_per_objfile *caller_per_objfile;
   1341 
   1342   parameter = dwarf_expr_reg_to_entry_parameter (frame, kind, kind_u,
   1343 						 &caller_per_cu,
   1344 						 &caller_per_objfile);
   1345 
   1346   outer_val = dwarf_entry_parameter_to_value (parameter, -1 /* deref_size */,
   1347 					      type, caller_frame,
   1348 					      caller_per_cu,
   1349 					      caller_per_objfile);
   1350 
   1351   /* Check if DW_AT_call_data_value cannot be used.  If it should be
   1352      used and it is not available do not fall back to OUTER_VAL - dereferencing
   1353      TYPE_CODE_REF with non-entry data value would give current value - not the
   1354      entry value.  */
   1355 
   1356   if (!TYPE_IS_REFERENCE (checked_type)
   1357       || checked_type->target_type () == NULL)
   1358     return outer_val;
   1359 
   1360   target_val = dwarf_entry_parameter_to_value (parameter,
   1361 					       target_type->length (),
   1362 					       target_type, caller_frame,
   1363 					       caller_per_cu,
   1364 					       caller_per_objfile);
   1365 
   1366   val = allocate_computed_value (type, &entry_data_value_funcs,
   1367 				 release_value (target_val).release ());
   1368 
   1369   /* Copy the referencing pointer to the new computed value.  */
   1370   memcpy (value_contents_raw (val).data (),
   1371 	  value_contents_raw (outer_val).data (),
   1372 	  checked_type->length ());
   1373   set_value_lazy (val, 0);
   1374 
   1375   return val;
   1376 }
   1377 
   1378 /* Read parameter of TYPE at (callee) FRAME's function entry.  DATA and
   1379    SIZE are DWARF block used to match DW_AT_location at the caller's
   1380    DW_TAG_call_site_parameter.
   1381 
   1382    Function always returns non-NULL value.  It throws NO_ENTRY_VALUE_ERROR if it
   1383    cannot resolve the parameter for any reason.  */
   1384 
   1385 static struct value *
   1386 value_of_dwarf_block_entry (struct type *type, frame_info_ptr frame,
   1387 			    const gdb_byte *block, size_t block_len)
   1388 {
   1389   union call_site_parameter_u kind_u;
   1390 
   1391   kind_u.dwarf_reg = dwarf_block_to_dwarf_reg (block, block + block_len);
   1392   if (kind_u.dwarf_reg != -1)
   1393     return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_DWARF_REG,
   1394 				     kind_u);
   1395 
   1396   if (dwarf_block_to_fb_offset (block, block + block_len, &kind_u.fb_offset))
   1397     return value_of_dwarf_reg_entry (type, frame, CALL_SITE_PARAMETER_FB_OFFSET,
   1398 				     kind_u);
   1399 
   1400   /* This can normally happen - throw NO_ENTRY_VALUE_ERROR to get the message
   1401      suppressed during normal operation.  The expression can be arbitrary if
   1402      there is no caller-callee entry value binding expected.  */
   1403   throw_error (NO_ENTRY_VALUE_ERROR,
   1404 	       _("DWARF-2 expression error: DW_OP_entry_value is supported "
   1405 		 "only for single DW_OP_reg* or for DW_OP_fbreg(*)"));
   1406 }
   1407 
   1408 /* Fetch a DW_AT_const_value through a synthetic pointer.  */
   1409 
   1410 static struct value *
   1411 fetch_const_value_from_synthetic_pointer (sect_offset die, LONGEST byte_offset,
   1412 					  dwarf2_per_cu_data *per_cu,
   1413 					  dwarf2_per_objfile *per_objfile,
   1414 					  struct type *type)
   1415 {
   1416   struct value *result = NULL;
   1417   const gdb_byte *bytes;
   1418   LONGEST len;
   1419 
   1420   auto_obstack temp_obstack;
   1421   bytes = dwarf2_fetch_constant_bytes (die, per_cu, per_objfile,
   1422 				       &temp_obstack, &len);
   1423 
   1424   if (bytes != NULL)
   1425     {
   1426       if (byte_offset >= 0
   1427 	  && byte_offset + type->target_type ()->length () <= len)
   1428 	{
   1429 	  bytes += byte_offset;
   1430 	  result = value_from_contents (type->target_type (), bytes);
   1431 	}
   1432       else
   1433 	invalid_synthetic_pointer ();
   1434     }
   1435   else
   1436     result = allocate_optimized_out_value (type->target_type ());
   1437 
   1438   return result;
   1439 }
   1440 
   1441 /* See loc.h.  */
   1442 
   1443 struct value *
   1444 indirect_synthetic_pointer (sect_offset die, LONGEST byte_offset,
   1445 			    dwarf2_per_cu_data *per_cu,
   1446 			    dwarf2_per_objfile *per_objfile,
   1447 			    frame_info_ptr frame, struct type *type,
   1448 			    bool resolve_abstract_p)
   1449 {
   1450   /* Fetch the location expression of the DIE we're pointing to.  */
   1451   auto get_frame_address_in_block_wrapper = [frame] ()
   1452     {
   1453      return get_frame_address_in_block (frame);
   1454     };
   1455   struct dwarf2_locexpr_baton baton
   1456     = dwarf2_fetch_die_loc_sect_off (die, per_cu, per_objfile,
   1457 				     get_frame_address_in_block_wrapper,
   1458 				     resolve_abstract_p);
   1459 
   1460   /* Get type of pointed-to DIE.  */
   1461   struct type *orig_type = dwarf2_fetch_die_type_sect_off (die, per_cu,
   1462 							   per_objfile);
   1463   if (orig_type == NULL)
   1464     invalid_synthetic_pointer ();
   1465 
   1466   /* If pointed-to DIE has a DW_AT_location, evaluate it and return the
   1467      resulting value.  Otherwise, it may have a DW_AT_const_value instead,
   1468      or it may've been optimized out.  */
   1469   if (baton.data != NULL)
   1470     return dwarf2_evaluate_loc_desc_full (orig_type, frame, baton.data,
   1471 					  baton.size, baton.per_cu,
   1472 					  baton.per_objfile,
   1473 					  type->target_type (),
   1474 					  byte_offset);
   1475   else
   1476     return fetch_const_value_from_synthetic_pointer (die, byte_offset, per_cu,
   1477 						     per_objfile, type);
   1478 }
   1479 
   1480 /* Evaluate a location description, starting at DATA and with length
   1481    SIZE, to find the current location of variable of TYPE in the
   1482    context of FRAME.  If SUBOBJ_TYPE is non-NULL, return instead the
   1483    location of the subobject of type SUBOBJ_TYPE at byte offset
   1484    SUBOBJ_BYTE_OFFSET within the variable of type TYPE.  */
   1485 
   1486 static struct value *
   1487 dwarf2_evaluate_loc_desc_full (struct type *type, frame_info_ptr frame,
   1488 			       const gdb_byte *data, size_t size,
   1489 			       dwarf2_per_cu_data *per_cu,
   1490 			       dwarf2_per_objfile *per_objfile,
   1491 			       struct type *subobj_type,
   1492 			       LONGEST subobj_byte_offset,
   1493 			       bool as_lval)
   1494 {
   1495   if (subobj_type == NULL)
   1496     {
   1497       subobj_type = type;
   1498       subobj_byte_offset = 0;
   1499     }
   1500   else if (subobj_byte_offset < 0)
   1501     invalid_synthetic_pointer ();
   1502 
   1503   if (size == 0)
   1504     return allocate_optimized_out_value (subobj_type);
   1505 
   1506   dwarf_expr_context ctx (per_objfile, per_cu->addr_size ());
   1507 
   1508   value *retval;
   1509   scoped_value_mark free_values;
   1510 
   1511   try
   1512     {
   1513       retval = ctx.evaluate (data, size, as_lval, per_cu, frame, nullptr,
   1514 			     type, subobj_type, subobj_byte_offset);
   1515     }
   1516   catch (const gdb_exception_error &ex)
   1517     {
   1518       if (ex.error == NOT_AVAILABLE_ERROR)
   1519 	{
   1520 	  free_values.free_to_mark ();
   1521 	  retval = allocate_value (subobj_type);
   1522 	  mark_value_bytes_unavailable (retval, 0,
   1523 					subobj_type->length ());
   1524 	  return retval;
   1525 	}
   1526       else if (ex.error == NO_ENTRY_VALUE_ERROR)
   1527 	{
   1528 	  if (entry_values_debug)
   1529 	    exception_print (gdb_stdout, ex);
   1530 	  free_values.free_to_mark ();
   1531 	  return allocate_optimized_out_value (subobj_type);
   1532 	}
   1533       else
   1534 	throw;
   1535     }
   1536 
   1537   /* We need to clean up all the values that are not needed any more.
   1538      The problem with a value_ref_ptr class is that it disconnects the
   1539      RETVAL from the value garbage collection, so we need to make
   1540      a copy of that value on the stack to keep everything consistent.
   1541      The value_ref_ptr will clean up after itself at the end of this block.  */
   1542   value_ref_ptr value_holder = value_ref_ptr::new_reference (retval);
   1543   free_values.free_to_mark ();
   1544 
   1545   return value_copy (retval);
   1546 }
   1547 
   1548 /* The exported interface to dwarf2_evaluate_loc_desc_full; it always
   1549    passes 0 as the byte_offset.  */
   1550 
   1551 struct value *
   1552 dwarf2_evaluate_loc_desc (struct type *type, frame_info_ptr frame,
   1553 			  const gdb_byte *data, size_t size,
   1554 			  dwarf2_per_cu_data *per_cu,
   1555 			  dwarf2_per_objfile *per_objfile, bool as_lval)
   1556 {
   1557   return dwarf2_evaluate_loc_desc_full (type, frame, data, size, per_cu,
   1558 					per_objfile, NULL, 0, as_lval);
   1559 }
   1560 
   1561 /* Evaluates a dwarf expression and stores the result in VAL,
   1562    expecting that the dwarf expression only produces a single
   1563    CORE_ADDR.  FRAME is the frame in which the expression is
   1564    evaluated.  ADDR_STACK is a context (location of a variable) and
   1565    might be needed to evaluate the location expression.
   1566 
   1567    PUSH_VALUES is an array of values to be pushed to the expression stack
   1568    before evaluation starts.  PUSH_VALUES[0] is pushed first, then
   1569    PUSH_VALUES[1], and so on.
   1570 
   1571    Returns 1 on success, 0 otherwise.  */
   1572 
   1573 static int
   1574 dwarf2_locexpr_baton_eval (const struct dwarf2_locexpr_baton *dlbaton,
   1575 			   frame_info_ptr frame,
   1576 			   const struct property_addr_info *addr_stack,
   1577 			   CORE_ADDR *valp,
   1578 			   gdb::array_view<CORE_ADDR> push_values,
   1579 			   bool *is_reference)
   1580 {
   1581   if (dlbaton == NULL || dlbaton->size == 0)
   1582     return 0;
   1583 
   1584   dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
   1585   dwarf2_per_cu_data *per_cu = dlbaton->per_cu;
   1586   dwarf_expr_context ctx (per_objfile, per_cu->addr_size ());
   1587 
   1588   value *result;
   1589   scoped_value_mark free_values;
   1590 
   1591   /* Place any initial values onto the expression stack.  */
   1592   for (const auto &val : push_values)
   1593     ctx.push_address (val, false);
   1594 
   1595   try
   1596     {
   1597       result = ctx.evaluate (dlbaton->data, dlbaton->size,
   1598 			     true, per_cu, frame, addr_stack);
   1599     }
   1600   catch (const gdb_exception_error &ex)
   1601     {
   1602       if (ex.error == NOT_AVAILABLE_ERROR)
   1603 	{
   1604 	  return 0;
   1605 	}
   1606       else if (ex.error == NO_ENTRY_VALUE_ERROR)
   1607 	{
   1608 	  if (entry_values_debug)
   1609 	    exception_print (gdb_stdout, ex);
   1610 	  return 0;
   1611 	}
   1612       else
   1613 	throw;
   1614     }
   1615 
   1616   if (value_optimized_out (result))
   1617     return 0;
   1618 
   1619   if (VALUE_LVAL (result) == lval_memory)
   1620     *valp = value_address (result);
   1621   else
   1622     {
   1623       if (VALUE_LVAL (result) == not_lval)
   1624 	*is_reference = false;
   1625 
   1626       *valp = value_as_address (result);
   1627     }
   1628 
   1629   return 1;
   1630 }
   1631 
   1632 /* See dwarf2/loc.h.  */
   1633 
   1634 bool
   1635 dwarf2_evaluate_property (const struct dynamic_prop *prop,
   1636 			  frame_info_ptr frame,
   1637 			  const struct property_addr_info *addr_stack,
   1638 			  CORE_ADDR *value,
   1639 			  gdb::array_view<CORE_ADDR> push_values)
   1640 {
   1641   if (prop == NULL)
   1642     return false;
   1643 
   1644   if (frame == NULL && has_stack_frames ())
   1645     frame = get_selected_frame (NULL);
   1646 
   1647   switch (prop->kind ())
   1648     {
   1649     case PROP_LOCEXPR:
   1650       {
   1651 	const struct dwarf2_property_baton *baton
   1652 	  = (const struct dwarf2_property_baton *) prop->baton ();
   1653 	gdb_assert (baton->property_type != NULL);
   1654 
   1655 	bool is_reference = baton->locexpr.is_reference;
   1656 	if (dwarf2_locexpr_baton_eval (&baton->locexpr, frame, addr_stack,
   1657 				       value, push_values, &is_reference))
   1658 	  {
   1659 	    if (is_reference)
   1660 	      {
   1661 		struct value *val = value_at (baton->property_type, *value);
   1662 		*value = value_as_address (val);
   1663 	      }
   1664 	    else
   1665 	      {
   1666 		gdb_assert (baton->property_type != NULL);
   1667 
   1668 		struct type *type = check_typedef (baton->property_type);
   1669 		if (type->length () < sizeof (CORE_ADDR)
   1670 		    && !type->is_unsigned ())
   1671 		  {
   1672 		    /* If we have a valid return candidate and it's value
   1673 		       is signed, we have to sign-extend the value because
   1674 		       CORE_ADDR on 64bit machine has 8 bytes but address
   1675 		       size of an 32bit application is bytes.  */
   1676 		    const int addr_size
   1677 		      = (baton->locexpr.per_cu->addr_size ()
   1678 			 * TARGET_CHAR_BIT);
   1679 		    const CORE_ADDR neg_mask
   1680 		      = (~((CORE_ADDR) 0) <<  (addr_size - 1));
   1681 
   1682 		    /* Check if signed bit is set and sign-extend values.  */
   1683 		    if (*value & neg_mask)
   1684 		      *value |= neg_mask;
   1685 		  }
   1686 	      }
   1687 	    return true;
   1688 	  }
   1689       }
   1690       break;
   1691 
   1692     case PROP_LOCLIST:
   1693       {
   1694 	struct dwarf2_property_baton *baton
   1695 	  = (struct dwarf2_property_baton *) prop->baton ();
   1696 	CORE_ADDR pc;
   1697 	const gdb_byte *data;
   1698 	struct value *val;
   1699 	size_t size;
   1700 
   1701 	if (frame == NULL
   1702 	    || !get_frame_address_in_block_if_available (frame, &pc))
   1703 	  return false;
   1704 
   1705 	data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
   1706 	if (data != NULL)
   1707 	  {
   1708 	    val = dwarf2_evaluate_loc_desc (baton->property_type, frame, data,
   1709 					    size, baton->loclist.per_cu,
   1710 					    baton->loclist.per_objfile);
   1711 	    if (!value_optimized_out (val))
   1712 	      {
   1713 		*value = value_as_address (val);
   1714 		return true;
   1715 	      }
   1716 	  }
   1717       }
   1718       break;
   1719 
   1720     case PROP_CONST:
   1721       *value = prop->const_val ();
   1722       return true;
   1723 
   1724     case PROP_ADDR_OFFSET:
   1725       {
   1726 	struct dwarf2_property_baton *baton
   1727 	  = (struct dwarf2_property_baton *) prop->baton ();
   1728 	const struct property_addr_info *pinfo;
   1729 	struct value *val;
   1730 
   1731 	for (pinfo = addr_stack; pinfo != NULL; pinfo = pinfo->next)
   1732 	  {
   1733 	    /* This approach lets us avoid checking the qualifiers.  */
   1734 	    if (TYPE_MAIN_TYPE (pinfo->type)
   1735 		== TYPE_MAIN_TYPE (baton->property_type))
   1736 	      break;
   1737 	  }
   1738 	if (pinfo == NULL)
   1739 	  error (_("cannot find reference address for offset property"));
   1740 	if (pinfo->valaddr.data () != NULL)
   1741 	  val = value_from_contents
   1742 		  (baton->offset_info.type,
   1743 		   pinfo->valaddr.data () + baton->offset_info.offset);
   1744 	else
   1745 	  val = value_at (baton->offset_info.type,
   1746 			  pinfo->addr + baton->offset_info.offset);
   1747 	*value = value_as_address (val);
   1748 	return true;
   1749       }
   1750 
   1751     case PROP_VARIABLE_NAME:
   1752       {
   1753 	struct value *val = compute_var_value (prop->variable_name ());
   1754 	if (val != nullptr)
   1755 	  {
   1756 	    *value = value_as_long (val);
   1757 	    return true;
   1758 	  }
   1759       }
   1760       break;
   1761     }
   1762 
   1763   return false;
   1764 }
   1765 
   1766 /* See dwarf2/loc.h.  */
   1767 
   1768 void
   1769 dwarf2_compile_property_to_c (string_file *stream,
   1770 			      const char *result_name,
   1771 			      struct gdbarch *gdbarch,
   1772 			      std::vector<bool> &registers_used,
   1773 			      const struct dynamic_prop *prop,
   1774 			      CORE_ADDR pc,
   1775 			      struct symbol *sym)
   1776 {
   1777   struct dwarf2_property_baton *baton
   1778     = (struct dwarf2_property_baton *) prop->baton ();
   1779   const gdb_byte *data;
   1780   size_t size;
   1781   dwarf2_per_cu_data *per_cu;
   1782   dwarf2_per_objfile *per_objfile;
   1783 
   1784   if (prop->kind () == PROP_LOCEXPR)
   1785     {
   1786       data = baton->locexpr.data;
   1787       size = baton->locexpr.size;
   1788       per_cu = baton->locexpr.per_cu;
   1789       per_objfile = baton->locexpr.per_objfile;
   1790     }
   1791   else
   1792     {
   1793       gdb_assert (prop->kind () == PROP_LOCLIST);
   1794 
   1795       data = dwarf2_find_location_expression (&baton->loclist, &size, pc);
   1796       per_cu = baton->loclist.per_cu;
   1797       per_objfile = baton->loclist.per_objfile;
   1798     }
   1799 
   1800   compile_dwarf_bounds_to_c (stream, result_name, prop, sym, pc,
   1801 			     gdbarch, registers_used,
   1802 			     per_cu->addr_size (),
   1803 			     data, data + size, per_cu, per_objfile);
   1804 }
   1805 
   1806 /* Compute the correct symbol_needs_kind value for the location
   1807    expression in EXPR.
   1808 
   1809    Implemented by traversing the logical control flow graph of the
   1810    expression.  */
   1811 
   1812 static enum symbol_needs_kind
   1813 dwarf2_get_symbol_read_needs (gdb::array_view<const gdb_byte> expr,
   1814 			      dwarf2_per_cu_data *per_cu,
   1815 			      dwarf2_per_objfile *per_objfile,
   1816 			      bfd_endian byte_order,
   1817 			      int addr_size,
   1818 			      int ref_addr_size,
   1819 			      int depth = 0)
   1820 {
   1821   enum symbol_needs_kind symbol_needs = SYMBOL_NEEDS_NONE;
   1822 
   1823   /* If the expression is empty, we have nothing to do.  */
   1824   if (expr.empty ())
   1825     return symbol_needs;
   1826 
   1827   const gdb_byte *expr_end = expr.data () + expr.size ();
   1828 
   1829   /* List of operations to visit.  Operations in this list are not visited yet,
   1830      so are not in VISITED_OPS (and vice-versa).  */
   1831   std::vector<const gdb_byte *> ops_to_visit;
   1832 
   1833   /* Operations already visited.  */
   1834   std::unordered_set<const gdb_byte *> visited_ops;
   1835 
   1836   /* Insert OP in OPS_TO_VISIT if it is within the expression's range and
   1837      hasn't been visited yet.  */
   1838   auto insert_in_ops_to_visit
   1839     = [expr_end, &visited_ops, &ops_to_visit] (const gdb_byte *op_ptr)
   1840       {
   1841 	if (op_ptr >= expr_end)
   1842 	  return;
   1843 
   1844 	if (visited_ops.find (op_ptr) != visited_ops.end ())
   1845 	  return;
   1846 
   1847 	ops_to_visit.push_back (op_ptr);
   1848       };
   1849 
   1850   /* Expressions can invoke other expressions with DW_OP_call*.  Protect against
   1851      a loop of calls.  */
   1852   const int max_depth = 256;
   1853 
   1854   if (depth > max_depth)
   1855     error (_("DWARF-2 expression error: Loop detected."));
   1856 
   1857   depth++;
   1858 
   1859   /* Initialize the to-visit list with the first operation.  */
   1860   insert_in_ops_to_visit (&expr[0]);
   1861 
   1862   while (!ops_to_visit.empty ())
   1863     {
   1864       /* Pop one op to visit, mark it as visited.  */
   1865       const gdb_byte *op_ptr = ops_to_visit.back ();
   1866       ops_to_visit.pop_back ();
   1867       gdb_assert (visited_ops.find (op_ptr) == visited_ops.end ());
   1868       visited_ops.insert (op_ptr);
   1869 
   1870       dwarf_location_atom op = (dwarf_location_atom) *op_ptr;
   1871 
   1872       /* Most operations have a single possible following operation
   1873 	 (they are not conditional branches).  The code below updates
   1874 	 OP_PTR to point to that following operation, which is pushed
   1875 	 back to OPS_TO_VISIT, if needed, at the bottom.  Here, leave
   1876 	 OP_PTR pointing just after the operand.  */
   1877       op_ptr++;
   1878 
   1879       /* The DWARF expression might have a bug causing an infinite
   1880 	 loop.  In that case, quitting is the only way out.  */
   1881       QUIT;
   1882 
   1883       switch (op)
   1884 	{
   1885 	case DW_OP_lit0:
   1886 	case DW_OP_lit1:
   1887 	case DW_OP_lit2:
   1888 	case DW_OP_lit3:
   1889 	case DW_OP_lit4:
   1890 	case DW_OP_lit5:
   1891 	case DW_OP_lit6:
   1892 	case DW_OP_lit7:
   1893 	case DW_OP_lit8:
   1894 	case DW_OP_lit9:
   1895 	case DW_OP_lit10:
   1896 	case DW_OP_lit11:
   1897 	case DW_OP_lit12:
   1898 	case DW_OP_lit13:
   1899 	case DW_OP_lit14:
   1900 	case DW_OP_lit15:
   1901 	case DW_OP_lit16:
   1902 	case DW_OP_lit17:
   1903 	case DW_OP_lit18:
   1904 	case DW_OP_lit19:
   1905 	case DW_OP_lit20:
   1906 	case DW_OP_lit21:
   1907 	case DW_OP_lit22:
   1908 	case DW_OP_lit23:
   1909 	case DW_OP_lit24:
   1910 	case DW_OP_lit25:
   1911 	case DW_OP_lit26:
   1912 	case DW_OP_lit27:
   1913 	case DW_OP_lit28:
   1914 	case DW_OP_lit29:
   1915 	case DW_OP_lit30:
   1916 	case DW_OP_lit31:
   1917 	case DW_OP_stack_value:
   1918 	case DW_OP_dup:
   1919 	case DW_OP_drop:
   1920 	case DW_OP_swap:
   1921 	case DW_OP_over:
   1922 	case DW_OP_rot:
   1923 	case DW_OP_deref:
   1924 	case DW_OP_abs:
   1925 	case DW_OP_neg:
   1926 	case DW_OP_not:
   1927 	case DW_OP_and:
   1928 	case DW_OP_div:
   1929 	case DW_OP_minus:
   1930 	case DW_OP_mod:
   1931 	case DW_OP_mul:
   1932 	case DW_OP_or:
   1933 	case DW_OP_plus:
   1934 	case DW_OP_shl:
   1935 	case DW_OP_shr:
   1936 	case DW_OP_shra:
   1937 	case DW_OP_xor:
   1938 	case DW_OP_le:
   1939 	case DW_OP_ge:
   1940 	case DW_OP_eq:
   1941 	case DW_OP_lt:
   1942 	case DW_OP_gt:
   1943 	case DW_OP_ne:
   1944 	case DW_OP_GNU_push_tls_address:
   1945 	case DW_OP_nop:
   1946 	case DW_OP_GNU_uninit:
   1947 	case DW_OP_push_object_address:
   1948 	  break;
   1949 
   1950 	case DW_OP_form_tls_address:
   1951 	  if (symbol_needs <= SYMBOL_NEEDS_REGISTERS)
   1952 	    symbol_needs = SYMBOL_NEEDS_REGISTERS;
   1953 	  break;
   1954 
   1955 	case DW_OP_convert:
   1956 	case DW_OP_GNU_convert:
   1957 	case DW_OP_reinterpret:
   1958 	case DW_OP_GNU_reinterpret:
   1959 	case DW_OP_addrx:
   1960 	case DW_OP_GNU_addr_index:
   1961 	case DW_OP_GNU_const_index:
   1962 	case DW_OP_constu:
   1963 	case DW_OP_plus_uconst:
   1964 	case DW_OP_piece:
   1965 	  op_ptr = safe_skip_leb128 (op_ptr, expr_end);
   1966 	  break;
   1967 
   1968 	case DW_OP_consts:
   1969 	  op_ptr = safe_skip_leb128 (op_ptr, expr_end);
   1970 	  break;
   1971 
   1972 	case DW_OP_bit_piece:
   1973 	  op_ptr = safe_skip_leb128 (op_ptr, expr_end);
   1974 	  op_ptr = safe_skip_leb128 (op_ptr, expr_end);
   1975 	  break;
   1976 
   1977 	case DW_OP_deref_type:
   1978 	case DW_OP_GNU_deref_type:
   1979 	  op_ptr++;
   1980 	  op_ptr = safe_skip_leb128 (op_ptr, expr_end);
   1981 	  break;
   1982 
   1983 	case DW_OP_addr:
   1984 	  op_ptr += addr_size;
   1985 	  break;
   1986 
   1987 	case DW_OP_const1u:
   1988 	case DW_OP_const1s:
   1989 	  op_ptr += 1;
   1990 	  break;
   1991 
   1992 	case DW_OP_const2u:
   1993 	case DW_OP_const2s:
   1994 	  op_ptr += 2;
   1995 	  break;
   1996 
   1997 	case DW_OP_const4s:
   1998 	case DW_OP_const4u:
   1999 	  op_ptr += 4;
   2000 	  break;
   2001 
   2002 	case DW_OP_const8s:
   2003 	case DW_OP_const8u:
   2004 	  op_ptr += 8;
   2005 	  break;
   2006 
   2007 	case DW_OP_reg0:
   2008 	case DW_OP_reg1:
   2009 	case DW_OP_reg2:
   2010 	case DW_OP_reg3:
   2011 	case DW_OP_reg4:
   2012 	case DW_OP_reg5:
   2013 	case DW_OP_reg6:
   2014 	case DW_OP_reg7:
   2015 	case DW_OP_reg8:
   2016 	case DW_OP_reg9:
   2017 	case DW_OP_reg10:
   2018 	case DW_OP_reg11:
   2019 	case DW_OP_reg12:
   2020 	case DW_OP_reg13:
   2021 	case DW_OP_reg14:
   2022 	case DW_OP_reg15:
   2023 	case DW_OP_reg16:
   2024 	case DW_OP_reg17:
   2025 	case DW_OP_reg18:
   2026 	case DW_OP_reg19:
   2027 	case DW_OP_reg20:
   2028 	case DW_OP_reg21:
   2029 	case DW_OP_reg22:
   2030 	case DW_OP_reg23:
   2031 	case DW_OP_reg24:
   2032 	case DW_OP_reg25:
   2033 	case DW_OP_reg26:
   2034 	case DW_OP_reg27:
   2035 	case DW_OP_reg28:
   2036 	case DW_OP_reg29:
   2037 	case DW_OP_reg30:
   2038 	case DW_OP_reg31:
   2039 	case DW_OP_regx:
   2040 	case DW_OP_breg0:
   2041 	case DW_OP_breg1:
   2042 	case DW_OP_breg2:
   2043 	case DW_OP_breg3:
   2044 	case DW_OP_breg4:
   2045 	case DW_OP_breg5:
   2046 	case DW_OP_breg6:
   2047 	case DW_OP_breg7:
   2048 	case DW_OP_breg8:
   2049 	case DW_OP_breg9:
   2050 	case DW_OP_breg10:
   2051 	case DW_OP_breg11:
   2052 	case DW_OP_breg12:
   2053 	case DW_OP_breg13:
   2054 	case DW_OP_breg14:
   2055 	case DW_OP_breg15:
   2056 	case DW_OP_breg16:
   2057 	case DW_OP_breg17:
   2058 	case DW_OP_breg18:
   2059 	case DW_OP_breg19:
   2060 	case DW_OP_breg20:
   2061 	case DW_OP_breg21:
   2062 	case DW_OP_breg22:
   2063 	case DW_OP_breg23:
   2064 	case DW_OP_breg24:
   2065 	case DW_OP_breg25:
   2066 	case DW_OP_breg26:
   2067 	case DW_OP_breg27:
   2068 	case DW_OP_breg28:
   2069 	case DW_OP_breg29:
   2070 	case DW_OP_breg30:
   2071 	case DW_OP_breg31:
   2072 	case DW_OP_bregx:
   2073 	case DW_OP_fbreg:
   2074 	case DW_OP_call_frame_cfa:
   2075 	case DW_OP_entry_value:
   2076 	case DW_OP_GNU_entry_value:
   2077 	case DW_OP_GNU_parameter_ref:
   2078 	case DW_OP_regval_type:
   2079 	case DW_OP_GNU_regval_type:
   2080 	  symbol_needs = SYMBOL_NEEDS_FRAME;
   2081 	  break;
   2082 
   2083 	case DW_OP_implicit_value:
   2084 	  {
   2085 	    uint64_t uoffset;
   2086 	    op_ptr = safe_read_uleb128 (op_ptr, expr_end, &uoffset);
   2087 	    op_ptr += uoffset;
   2088 	    break;
   2089 	  }
   2090 
   2091 	case DW_OP_implicit_pointer:
   2092 	case DW_OP_GNU_implicit_pointer:
   2093 	  op_ptr += ref_addr_size;
   2094 	  op_ptr = safe_skip_leb128 (op_ptr, expr_end);
   2095 	  break;
   2096 
   2097 	case DW_OP_deref_size:
   2098 	case DW_OP_pick:
   2099 	  op_ptr++;
   2100 	  break;
   2101 
   2102 	case DW_OP_skip:
   2103 	  {
   2104 	    int64_t offset = extract_signed_integer (op_ptr, 2, byte_order);
   2105 	    op_ptr += 2;
   2106 	    op_ptr += offset;
   2107 	    break;
   2108 	  }
   2109 
   2110 	case DW_OP_bra:
   2111 	  {
   2112 	    /* This is the only operation that pushes two operations in
   2113 	       the to-visit list, so handle it all here.  */
   2114 	    LONGEST offset = extract_signed_integer (op_ptr, 2, byte_order);
   2115 	    op_ptr += 2;
   2116 
   2117 	    insert_in_ops_to_visit (op_ptr + offset);
   2118 	    insert_in_ops_to_visit (op_ptr);
   2119 	    continue;
   2120 	  }
   2121 
   2122 	case DW_OP_call2:
   2123 	case DW_OP_call4:
   2124 	  {
   2125 	    unsigned int len = op == DW_OP_call2 ? 2 : 4;
   2126 	    cu_offset cu_off
   2127 	      = (cu_offset) extract_unsigned_integer (op_ptr, len, byte_order);
   2128 	    op_ptr += len;
   2129 
   2130 	    auto get_frame_pc = [&symbol_needs] ()
   2131 	      {
   2132 		symbol_needs = SYMBOL_NEEDS_FRAME;
   2133 		return 0;
   2134 	      };
   2135 
   2136 	    struct dwarf2_locexpr_baton baton
   2137 	      = dwarf2_fetch_die_loc_cu_off (cu_off, per_cu,
   2138 					     per_objfile,
   2139 					     get_frame_pc);
   2140 
   2141 	    /* If SYMBOL_NEEDS_FRAME is returned from the previous call,
   2142 	       we dont have to check the baton content.  */
   2143 	    if (symbol_needs != SYMBOL_NEEDS_FRAME)
   2144 	      {
   2145 		gdbarch *arch = baton.per_objfile->objfile->arch ();
   2146 		gdb::array_view<const gdb_byte> sub_expr (baton.data,
   2147 							  baton.size);
   2148 		symbol_needs
   2149 		  = dwarf2_get_symbol_read_needs (sub_expr,
   2150 						  baton.per_cu,
   2151 						  baton.per_objfile,
   2152 						  gdbarch_byte_order (arch),
   2153 						  baton.per_cu->addr_size (),
   2154 						  baton.per_cu->ref_addr_size (),
   2155 						  depth);
   2156 	      }
   2157 	    break;
   2158 	  }
   2159 
   2160 	case DW_OP_GNU_variable_value:
   2161 	  {
   2162 	    sect_offset sect_off
   2163 	      = (sect_offset) extract_unsigned_integer (op_ptr,
   2164 							ref_addr_size,
   2165 							byte_order);
   2166 	    op_ptr += ref_addr_size;
   2167 
   2168 	    struct type *die_type
   2169 	      = dwarf2_fetch_die_type_sect_off (sect_off, per_cu,
   2170 						per_objfile);
   2171 
   2172 	    if (die_type == NULL)
   2173 	      error (_("Bad DW_OP_GNU_variable_value DIE."));
   2174 
   2175 	    /* Note: Things still work when the following test is
   2176 	       removed.  This test and error is here to conform to the
   2177 	       proposed specification.  */
   2178 	    if (die_type->code () != TYPE_CODE_INT
   2179 	       && die_type->code () != TYPE_CODE_PTR)
   2180 	      error (_("Type of DW_OP_GNU_variable_value DIE must be "
   2181 		       "an integer or pointer."));
   2182 
   2183 	    auto get_frame_pc = [&symbol_needs] ()
   2184 	      {
   2185 		symbol_needs = SYMBOL_NEEDS_FRAME;
   2186 		return 0;
   2187 	      };
   2188 
   2189 	    struct dwarf2_locexpr_baton baton
   2190 	      = dwarf2_fetch_die_loc_sect_off (sect_off, per_cu,
   2191 					       per_objfile,
   2192 					       get_frame_pc, true);
   2193 
   2194 	    /* If SYMBOL_NEEDS_FRAME is returned from the previous call,
   2195 	       we dont have to check the baton content.  */
   2196 	    if (symbol_needs != SYMBOL_NEEDS_FRAME)
   2197 	      {
   2198 		gdbarch *arch = baton.per_objfile->objfile->arch ();
   2199 		gdb::array_view<const gdb_byte> sub_expr (baton.data,
   2200 							  baton.size);
   2201 		symbol_needs
   2202 		  = dwarf2_get_symbol_read_needs (sub_expr,
   2203 						  baton.per_cu,
   2204 						  baton.per_objfile,
   2205 						  gdbarch_byte_order (arch),
   2206 						  baton.per_cu->addr_size (),
   2207 						  baton.per_cu->ref_addr_size (),
   2208 						  depth);
   2209 	      }
   2210 	    break;
   2211 	  }
   2212 
   2213 	case DW_OP_const_type:
   2214 	case DW_OP_GNU_const_type:
   2215 	  {
   2216 	    uint64_t uoffset;
   2217 	    op_ptr = safe_read_uleb128 (op_ptr, expr_end, &uoffset);
   2218 	    gdb_byte offset = *op_ptr++;
   2219 	    op_ptr += offset;
   2220 	    break;
   2221 	  }
   2222 
   2223 	default:
   2224 	  error (_("Unhandled DWARF expression opcode 0x%x"), op);
   2225 	}
   2226 
   2227       /* If it is known that a frame information is
   2228 	 needed we can stop parsing the expression.  */
   2229       if (symbol_needs == SYMBOL_NEEDS_FRAME)
   2230 	break;
   2231 
   2232       insert_in_ops_to_visit (op_ptr);
   2233     }
   2234 
   2235   return symbol_needs;
   2236 }
   2237 
   2238 /* A helper function that throws an unimplemented error mentioning a
   2239    given DWARF operator.  */
   2240 
   2241 static void ATTRIBUTE_NORETURN
   2242 unimplemented (unsigned int op)
   2243 {
   2244   const char *name = get_DW_OP_name (op);
   2245 
   2246   if (name)
   2247     error (_("DWARF operator %s cannot be translated to an agent expression"),
   2248 	   name);
   2249   else
   2250     error (_("Unknown DWARF operator 0x%02x cannot be translated "
   2251 	     "to an agent expression"),
   2252 	   op);
   2253 }
   2254 
   2255 /* See dwarf2/loc.h.
   2256 
   2257    This is basically a wrapper on gdbarch_dwarf2_reg_to_regnum so that we
   2258    can issue a complaint, which is better than having every target's
   2259    implementation of dwarf2_reg_to_regnum do it.  */
   2260 
   2261 int
   2262 dwarf_reg_to_regnum (struct gdbarch *arch, int dwarf_reg)
   2263 {
   2264   int reg = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_reg);
   2265 
   2266   if (reg == -1)
   2267     {
   2268       complaint (_("bad DWARF register number %d"), dwarf_reg);
   2269     }
   2270   return reg;
   2271 }
   2272 
   2273 /* Subroutine of dwarf_reg_to_regnum_or_error to simplify it.
   2274    Throw an error because DWARF_REG is bad.  */
   2275 
   2276 static void
   2277 throw_bad_regnum_error (ULONGEST dwarf_reg)
   2278 {
   2279   /* Still want to print -1 as "-1".
   2280      We *could* have int and ULONGEST versions of dwarf2_reg_to_regnum_or_error
   2281      but that's overkill for now.  */
   2282   if ((int) dwarf_reg == dwarf_reg)
   2283     error (_("Unable to access DWARF register number %d"), (int) dwarf_reg);
   2284   error (_("Unable to access DWARF register number %s"),
   2285 	 pulongest (dwarf_reg));
   2286 }
   2287 
   2288 /* See dwarf2/loc.h.  */
   2289 
   2290 int
   2291 dwarf_reg_to_regnum_or_error (struct gdbarch *arch, ULONGEST dwarf_reg)
   2292 {
   2293   int reg;
   2294 
   2295   if (dwarf_reg > INT_MAX)
   2296     throw_bad_regnum_error (dwarf_reg);
   2297   /* Yes, we will end up issuing a complaint and an error if DWARF_REG is
   2298      bad, but that's ok.  */
   2299   reg = dwarf_reg_to_regnum (arch, (int) dwarf_reg);
   2300   if (reg == -1)
   2301     throw_bad_regnum_error (dwarf_reg);
   2302   return reg;
   2303 }
   2304 
   2305 /* A helper function that emits an access to memory.  ARCH is the
   2306    target architecture.  EXPR is the expression which we are building.
   2307    NBITS is the number of bits we want to read.  This emits the
   2308    opcodes needed to read the memory and then extract the desired
   2309    bits.  */
   2310 
   2311 static void
   2312 access_memory (struct gdbarch *arch, struct agent_expr *expr, ULONGEST nbits)
   2313 {
   2314   ULONGEST nbytes = (nbits + 7) / 8;
   2315 
   2316   gdb_assert (nbytes > 0 && nbytes <= sizeof (LONGEST));
   2317 
   2318   if (expr->tracing)
   2319     ax_trace_quick (expr, nbytes);
   2320 
   2321   if (nbits <= 8)
   2322     ax_simple (expr, aop_ref8);
   2323   else if (nbits <= 16)
   2324     ax_simple (expr, aop_ref16);
   2325   else if (nbits <= 32)
   2326     ax_simple (expr, aop_ref32);
   2327   else
   2328     ax_simple (expr, aop_ref64);
   2329 
   2330   /* If we read exactly the number of bytes we wanted, we're done.  */
   2331   if (8 * nbytes == nbits)
   2332     return;
   2333 
   2334   if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG)
   2335     {
   2336       /* On a bits-big-endian machine, we want the high-order
   2337 	 NBITS.  */
   2338       ax_const_l (expr, 8 * nbytes - nbits);
   2339       ax_simple (expr, aop_rsh_unsigned);
   2340     }
   2341   else
   2342     {
   2343       /* On a bits-little-endian box, we want the low-order NBITS.  */
   2344       ax_zero_ext (expr, nbits);
   2345     }
   2346 }
   2347 
   2348 /* Compile a DWARF location expression to an agent expression.
   2349 
   2350    EXPR is the agent expression we are building.
   2351    LOC is the agent value we modify.
   2352    ARCH is the architecture.
   2353    ADDR_SIZE is the size of addresses, in bytes.
   2354    OP_PTR is the start of the location expression.
   2355    OP_END is one past the last byte of the location expression.
   2356 
   2357    This will throw an exception for various kinds of errors -- for
   2358    example, if the expression cannot be compiled, or if the expression
   2359    is invalid.  */
   2360 
   2361 static void
   2362 dwarf2_compile_expr_to_ax (struct agent_expr *expr, struct axs_value *loc,
   2363 			   unsigned int addr_size, const gdb_byte *op_ptr,
   2364 			   const gdb_byte *op_end,
   2365 			   dwarf2_per_cu_data *per_cu,
   2366 			   dwarf2_per_objfile *per_objfile)
   2367 {
   2368   gdbarch *arch = expr->gdbarch;
   2369   std::vector<int> dw_labels, patches;
   2370   const gdb_byte * const base = op_ptr;
   2371   const gdb_byte *previous_piece = op_ptr;
   2372   enum bfd_endian byte_order = gdbarch_byte_order (arch);
   2373   ULONGEST bits_collected = 0;
   2374   unsigned int addr_size_bits = 8 * addr_size;
   2375   bool bits_big_endian = byte_order == BFD_ENDIAN_BIG;
   2376 
   2377   std::vector<int> offsets (op_end - op_ptr, -1);
   2378 
   2379   /* By default we are making an address.  */
   2380   loc->kind = axs_lvalue_memory;
   2381 
   2382   while (op_ptr < op_end)
   2383     {
   2384       enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
   2385       uint64_t uoffset, reg;
   2386       int64_t offset;
   2387       int i;
   2388 
   2389       offsets[op_ptr - base] = expr->len;
   2390       ++op_ptr;
   2391 
   2392       /* Our basic approach to code generation is to map DWARF
   2393 	 operations directly to AX operations.  However, there are
   2394 	 some differences.
   2395 
   2396 	 First, DWARF works on address-sized units, but AX always uses
   2397 	 LONGEST.  For most operations we simply ignore this
   2398 	 difference; instead we generate sign extensions as needed
   2399 	 before division and comparison operations.  It would be nice
   2400 	 to omit the sign extensions, but there is no way to determine
   2401 	 the size of the target's LONGEST.  (This code uses the size
   2402 	 of the host LONGEST in some cases -- that is a bug but it is
   2403 	 difficult to fix.)
   2404 
   2405 	 Second, some DWARF operations cannot be translated to AX.
   2406 	 For these we simply fail.  See
   2407 	 http://sourceware.org/bugzilla/show_bug.cgi?id=11662.  */
   2408       switch (op)
   2409 	{
   2410 	case DW_OP_lit0:
   2411 	case DW_OP_lit1:
   2412 	case DW_OP_lit2:
   2413 	case DW_OP_lit3:
   2414 	case DW_OP_lit4:
   2415 	case DW_OP_lit5:
   2416 	case DW_OP_lit6:
   2417 	case DW_OP_lit7:
   2418 	case DW_OP_lit8:
   2419 	case DW_OP_lit9:
   2420 	case DW_OP_lit10:
   2421 	case DW_OP_lit11:
   2422 	case DW_OP_lit12:
   2423 	case DW_OP_lit13:
   2424 	case DW_OP_lit14:
   2425 	case DW_OP_lit15:
   2426 	case DW_OP_lit16:
   2427 	case DW_OP_lit17:
   2428 	case DW_OP_lit18:
   2429 	case DW_OP_lit19:
   2430 	case DW_OP_lit20:
   2431 	case DW_OP_lit21:
   2432 	case DW_OP_lit22:
   2433 	case DW_OP_lit23:
   2434 	case DW_OP_lit24:
   2435 	case DW_OP_lit25:
   2436 	case DW_OP_lit26:
   2437 	case DW_OP_lit27:
   2438 	case DW_OP_lit28:
   2439 	case DW_OP_lit29:
   2440 	case DW_OP_lit30:
   2441 	case DW_OP_lit31:
   2442 	  ax_const_l (expr, op - DW_OP_lit0);
   2443 	  break;
   2444 
   2445 	case DW_OP_addr:
   2446 	  uoffset = extract_unsigned_integer (op_ptr, addr_size, byte_order);
   2447 	  op_ptr += addr_size;
   2448 	  /* Some versions of GCC emit DW_OP_addr before
   2449 	     DW_OP_GNU_push_tls_address.  In this case the value is an
   2450 	     index, not an address.  We don't support things like
   2451 	     branching between the address and the TLS op.  */
   2452 	  if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
   2453 	    uoffset += per_objfile->objfile->text_section_offset ();
   2454 	  ax_const_l (expr, uoffset);
   2455 	  break;
   2456 
   2457 	case DW_OP_const1u:
   2458 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 1, byte_order));
   2459 	  op_ptr += 1;
   2460 	  break;
   2461 
   2462 	case DW_OP_const1s:
   2463 	  ax_const_l (expr, extract_signed_integer (op_ptr, 1, byte_order));
   2464 	  op_ptr += 1;
   2465 	  break;
   2466 
   2467 	case DW_OP_const2u:
   2468 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 2, byte_order));
   2469 	  op_ptr += 2;
   2470 	  break;
   2471 
   2472 	case DW_OP_const2s:
   2473 	  ax_const_l (expr, extract_signed_integer (op_ptr, 2, byte_order));
   2474 	  op_ptr += 2;
   2475 	  break;
   2476 
   2477 	case DW_OP_const4u:
   2478 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 4, byte_order));
   2479 	  op_ptr += 4;
   2480 	  break;
   2481 
   2482 	case DW_OP_const4s:
   2483 	  ax_const_l (expr, extract_signed_integer (op_ptr, 4, byte_order));
   2484 	  op_ptr += 4;
   2485 	  break;
   2486 
   2487 	case DW_OP_const8u:
   2488 	  ax_const_l (expr, extract_unsigned_integer (op_ptr, 8, byte_order));
   2489 	  op_ptr += 8;
   2490 	  break;
   2491 
   2492 	case DW_OP_const8s:
   2493 	  ax_const_l (expr, extract_signed_integer (op_ptr, 8, byte_order));
   2494 	  op_ptr += 8;
   2495 	  break;
   2496 
   2497 	case DW_OP_constu:
   2498 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
   2499 	  ax_const_l (expr, uoffset);
   2500 	  break;
   2501 
   2502 	case DW_OP_consts:
   2503 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
   2504 	  ax_const_l (expr, offset);
   2505 	  break;
   2506 
   2507 	case DW_OP_reg0:
   2508 	case DW_OP_reg1:
   2509 	case DW_OP_reg2:
   2510 	case DW_OP_reg3:
   2511 	case DW_OP_reg4:
   2512 	case DW_OP_reg5:
   2513 	case DW_OP_reg6:
   2514 	case DW_OP_reg7:
   2515 	case DW_OP_reg8:
   2516 	case DW_OP_reg9:
   2517 	case DW_OP_reg10:
   2518 	case DW_OP_reg11:
   2519 	case DW_OP_reg12:
   2520 	case DW_OP_reg13:
   2521 	case DW_OP_reg14:
   2522 	case DW_OP_reg15:
   2523 	case DW_OP_reg16:
   2524 	case DW_OP_reg17:
   2525 	case DW_OP_reg18:
   2526 	case DW_OP_reg19:
   2527 	case DW_OP_reg20:
   2528 	case DW_OP_reg21:
   2529 	case DW_OP_reg22:
   2530 	case DW_OP_reg23:
   2531 	case DW_OP_reg24:
   2532 	case DW_OP_reg25:
   2533 	case DW_OP_reg26:
   2534 	case DW_OP_reg27:
   2535 	case DW_OP_reg28:
   2536 	case DW_OP_reg29:
   2537 	case DW_OP_reg30:
   2538 	case DW_OP_reg31:
   2539 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
   2540 	  loc->u.reg = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_reg0);
   2541 	  loc->kind = axs_lvalue_register;
   2542 	  break;
   2543 
   2544 	case DW_OP_regx:
   2545 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
   2546 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_regx");
   2547 	  loc->u.reg = dwarf_reg_to_regnum_or_error (arch, reg);
   2548 	  loc->kind = axs_lvalue_register;
   2549 	  break;
   2550 
   2551 	case DW_OP_implicit_value:
   2552 	  {
   2553 	    uint64_t len;
   2554 
   2555 	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &len);
   2556 	    if (op_ptr + len > op_end)
   2557 	      error (_("DW_OP_implicit_value: too few bytes available."));
   2558 	    if (len > sizeof (ULONGEST))
   2559 	      error (_("Cannot translate DW_OP_implicit_value of %d bytes"),
   2560 		     (int) len);
   2561 
   2562 	    ax_const_l (expr, extract_unsigned_integer (op_ptr, len,
   2563 							byte_order));
   2564 	    op_ptr += len;
   2565 	    dwarf_expr_require_composition (op_ptr, op_end,
   2566 					    "DW_OP_implicit_value");
   2567 
   2568 	    loc->kind = axs_rvalue;
   2569 	  }
   2570 	  break;
   2571 
   2572 	case DW_OP_stack_value:
   2573 	  dwarf_expr_require_composition (op_ptr, op_end, "DW_OP_stack_value");
   2574 	  loc->kind = axs_rvalue;
   2575 	  break;
   2576 
   2577 	case DW_OP_breg0:
   2578 	case DW_OP_breg1:
   2579 	case DW_OP_breg2:
   2580 	case DW_OP_breg3:
   2581 	case DW_OP_breg4:
   2582 	case DW_OP_breg5:
   2583 	case DW_OP_breg6:
   2584 	case DW_OP_breg7:
   2585 	case DW_OP_breg8:
   2586 	case DW_OP_breg9:
   2587 	case DW_OP_breg10:
   2588 	case DW_OP_breg11:
   2589 	case DW_OP_breg12:
   2590 	case DW_OP_breg13:
   2591 	case DW_OP_breg14:
   2592 	case DW_OP_breg15:
   2593 	case DW_OP_breg16:
   2594 	case DW_OP_breg17:
   2595 	case DW_OP_breg18:
   2596 	case DW_OP_breg19:
   2597 	case DW_OP_breg20:
   2598 	case DW_OP_breg21:
   2599 	case DW_OP_breg22:
   2600 	case DW_OP_breg23:
   2601 	case DW_OP_breg24:
   2602 	case DW_OP_breg25:
   2603 	case DW_OP_breg26:
   2604 	case DW_OP_breg27:
   2605 	case DW_OP_breg28:
   2606 	case DW_OP_breg29:
   2607 	case DW_OP_breg30:
   2608 	case DW_OP_breg31:
   2609 	  op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
   2610 	  i = dwarf_reg_to_regnum_or_error (arch, op - DW_OP_breg0);
   2611 	  ax_reg (expr, i);
   2612 	  if (offset != 0)
   2613 	    {
   2614 	      ax_const_l (expr, offset);
   2615 	      ax_simple (expr, aop_add);
   2616 	    }
   2617 	  break;
   2618 
   2619 	case DW_OP_bregx:
   2620 	  {
   2621 	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
   2622 	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
   2623 	    i = dwarf_reg_to_regnum_or_error (arch, reg);
   2624 	    ax_reg (expr, i);
   2625 	    if (offset != 0)
   2626 	      {
   2627 		ax_const_l (expr, offset);
   2628 		ax_simple (expr, aop_add);
   2629 	      }
   2630 	  }
   2631 	  break;
   2632 
   2633 	case DW_OP_fbreg:
   2634 	  {
   2635 	    const gdb_byte *datastart;
   2636 	    size_t datalen;
   2637 	    const struct block *b;
   2638 	    struct symbol *framefunc;
   2639 
   2640 	    b = block_for_pc (expr->scope);
   2641 
   2642 	    if (!b)
   2643 	      error (_("No block found for address"));
   2644 
   2645 	    framefunc = block_linkage_function (b);
   2646 
   2647 	    if (!framefunc)
   2648 	      error (_("No function found for block"));
   2649 
   2650 	    func_get_frame_base_dwarf_block (framefunc, expr->scope,
   2651 					     &datastart, &datalen);
   2652 
   2653 	    op_ptr = safe_read_sleb128 (op_ptr, op_end, &offset);
   2654 	    dwarf2_compile_expr_to_ax (expr, loc, addr_size, datastart,
   2655 				       datastart + datalen, per_cu,
   2656 				       per_objfile);
   2657 	    if (loc->kind == axs_lvalue_register)
   2658 	      require_rvalue (expr, loc);
   2659 
   2660 	    if (offset != 0)
   2661 	      {
   2662 		ax_const_l (expr, offset);
   2663 		ax_simple (expr, aop_add);
   2664 	      }
   2665 
   2666 	    loc->kind = axs_lvalue_memory;
   2667 	  }
   2668 	  break;
   2669 
   2670 	case DW_OP_dup:
   2671 	  ax_simple (expr, aop_dup);
   2672 	  break;
   2673 
   2674 	case DW_OP_drop:
   2675 	  ax_simple (expr, aop_pop);
   2676 	  break;
   2677 
   2678 	case DW_OP_pick:
   2679 	  offset = *op_ptr++;
   2680 	  ax_pick (expr, offset);
   2681 	  break;
   2682 
   2683 	case DW_OP_swap:
   2684 	  ax_simple (expr, aop_swap);
   2685 	  break;
   2686 
   2687 	case DW_OP_over:
   2688 	  ax_pick (expr, 1);
   2689 	  break;
   2690 
   2691 	case DW_OP_rot:
   2692 	  ax_simple (expr, aop_rot);
   2693 	  break;
   2694 
   2695 	case DW_OP_deref:
   2696 	case DW_OP_deref_size:
   2697 	  {
   2698 	    int size;
   2699 
   2700 	    if (op == DW_OP_deref_size)
   2701 	      size = *op_ptr++;
   2702 	    else
   2703 	      size = addr_size;
   2704 
   2705 	    if (size != 1 && size != 2 && size != 4 && size != 8)
   2706 	      error (_("Unsupported size %d in %s"),
   2707 		     size, get_DW_OP_name (op));
   2708 	    access_memory (arch, expr, size * TARGET_CHAR_BIT);
   2709 	  }
   2710 	  break;
   2711 
   2712 	case DW_OP_abs:
   2713 	  /* Sign extend the operand.  */
   2714 	  ax_ext (expr, addr_size_bits);
   2715 	  ax_simple (expr, aop_dup);
   2716 	  ax_const_l (expr, 0);
   2717 	  ax_simple (expr, aop_less_signed);
   2718 	  ax_simple (expr, aop_log_not);
   2719 	  i = ax_goto (expr, aop_if_goto);
   2720 	  /* We have to emit 0 - X.  */
   2721 	  ax_const_l (expr, 0);
   2722 	  ax_simple (expr, aop_swap);
   2723 	  ax_simple (expr, aop_sub);
   2724 	  ax_label (expr, i, expr->len);
   2725 	  break;
   2726 
   2727 	case DW_OP_neg:
   2728 	  /* No need to sign extend here.  */
   2729 	  ax_const_l (expr, 0);
   2730 	  ax_simple (expr, aop_swap);
   2731 	  ax_simple (expr, aop_sub);
   2732 	  break;
   2733 
   2734 	case DW_OP_not:
   2735 	  /* Sign extend the operand.  */
   2736 	  ax_ext (expr, addr_size_bits);
   2737 	  ax_simple (expr, aop_bit_not);
   2738 	  break;
   2739 
   2740 	case DW_OP_plus_uconst:
   2741 	  op_ptr = safe_read_uleb128 (op_ptr, op_end, &reg);
   2742 	  /* It would be really weird to emit `DW_OP_plus_uconst 0',
   2743 	     but we micro-optimize anyhow.  */
   2744 	  if (reg != 0)
   2745 	    {
   2746 	      ax_const_l (expr, reg);
   2747 	      ax_simple (expr, aop_add);
   2748 	    }
   2749 	  break;
   2750 
   2751 	case DW_OP_and:
   2752 	  ax_simple (expr, aop_bit_and);
   2753 	  break;
   2754 
   2755 	case DW_OP_div:
   2756 	  /* Sign extend the operands.  */
   2757 	  ax_ext (expr, addr_size_bits);
   2758 	  ax_simple (expr, aop_swap);
   2759 	  ax_ext (expr, addr_size_bits);
   2760 	  ax_simple (expr, aop_swap);
   2761 	  ax_simple (expr, aop_div_signed);
   2762 	  break;
   2763 
   2764 	case DW_OP_minus:
   2765 	  ax_simple (expr, aop_sub);
   2766 	  break;
   2767 
   2768 	case DW_OP_mod:
   2769 	  ax_simple (expr, aop_rem_unsigned);
   2770 	  break;
   2771 
   2772 	case DW_OP_mul:
   2773 	  ax_simple (expr, aop_mul);
   2774 	  break;
   2775 
   2776 	case DW_OP_or:
   2777 	  ax_simple (expr, aop_bit_or);
   2778 	  break;
   2779 
   2780 	case DW_OP_plus:
   2781 	  ax_simple (expr, aop_add);
   2782 	  break;
   2783 
   2784 	case DW_OP_shl:
   2785 	  ax_simple (expr, aop_lsh);
   2786 	  break;
   2787 
   2788 	case DW_OP_shr:
   2789 	  ax_simple (expr, aop_rsh_unsigned);
   2790 	  break;
   2791 
   2792 	case DW_OP_shra:
   2793 	  ax_simple (expr, aop_rsh_signed);
   2794 	  break;
   2795 
   2796 	case DW_OP_xor:
   2797 	  ax_simple (expr, aop_bit_xor);
   2798 	  break;
   2799 
   2800 	case DW_OP_le:
   2801 	  /* Sign extend the operands.  */
   2802 	  ax_ext (expr, addr_size_bits);
   2803 	  ax_simple (expr, aop_swap);
   2804 	  ax_ext (expr, addr_size_bits);
   2805 	  /* Note no swap here: A <= B is !(B < A).  */
   2806 	  ax_simple (expr, aop_less_signed);
   2807 	  ax_simple (expr, aop_log_not);
   2808 	  break;
   2809 
   2810 	case DW_OP_ge:
   2811 	  /* Sign extend the operands.  */
   2812 	  ax_ext (expr, addr_size_bits);
   2813 	  ax_simple (expr, aop_swap);
   2814 	  ax_ext (expr, addr_size_bits);
   2815 	  ax_simple (expr, aop_swap);
   2816 	  /* A >= B is !(A < B).  */
   2817 	  ax_simple (expr, aop_less_signed);
   2818 	  ax_simple (expr, aop_log_not);
   2819 	  break;
   2820 
   2821 	case DW_OP_eq:
   2822 	  /* Sign extend the operands.  */
   2823 	  ax_ext (expr, addr_size_bits);
   2824 	  ax_simple (expr, aop_swap);
   2825 	  ax_ext (expr, addr_size_bits);
   2826 	  /* No need for a second swap here.  */
   2827 	  ax_simple (expr, aop_equal);
   2828 	  break;
   2829 
   2830 	case DW_OP_lt:
   2831 	  /* Sign extend the operands.  */
   2832 	  ax_ext (expr, addr_size_bits);
   2833 	  ax_simple (expr, aop_swap);
   2834 	  ax_ext (expr, addr_size_bits);
   2835 	  ax_simple (expr, aop_swap);
   2836 	  ax_simple (expr, aop_less_signed);
   2837 	  break;
   2838 
   2839 	case DW_OP_gt:
   2840 	  /* Sign extend the operands.  */
   2841 	  ax_ext (expr, addr_size_bits);
   2842 	  ax_simple (expr, aop_swap);
   2843 	  ax_ext (expr, addr_size_bits);
   2844 	  /* Note no swap here: A > B is B < A.  */
   2845 	  ax_simple (expr, aop_less_signed);
   2846 	  break;
   2847 
   2848 	case DW_OP_ne:
   2849 	  /* Sign extend the operands.  */
   2850 	  ax_ext (expr, addr_size_bits);
   2851 	  ax_simple (expr, aop_swap);
   2852 	  ax_ext (expr, addr_size_bits);
   2853 	  /* No need for a swap here.  */
   2854 	  ax_simple (expr, aop_equal);
   2855 	  ax_simple (expr, aop_log_not);
   2856 	  break;
   2857 
   2858 	case DW_OP_call_frame_cfa:
   2859 	  {
   2860 	    int regnum;
   2861 	    CORE_ADDR text_offset;
   2862 	    LONGEST off;
   2863 	    const gdb_byte *cfa_start, *cfa_end;
   2864 
   2865 	    if (dwarf2_fetch_cfa_info (arch, expr->scope, per_cu,
   2866 				       &regnum, &off,
   2867 				       &text_offset, &cfa_start, &cfa_end))
   2868 	      {
   2869 		/* Register.  */
   2870 		ax_reg (expr, regnum);
   2871 		if (off != 0)
   2872 		  {
   2873 		    ax_const_l (expr, off);
   2874 		    ax_simple (expr, aop_add);
   2875 		  }
   2876 	      }
   2877 	    else
   2878 	      {
   2879 		/* Another expression.  */
   2880 		ax_const_l (expr, text_offset);
   2881 		dwarf2_compile_expr_to_ax (expr, loc, addr_size, cfa_start,
   2882 					   cfa_end, per_cu, per_objfile);
   2883 	      }
   2884 
   2885 	    loc->kind = axs_lvalue_memory;
   2886 	  }
   2887 	  break;
   2888 
   2889 	case DW_OP_GNU_push_tls_address:
   2890 	case DW_OP_form_tls_address:
   2891 	  unimplemented (op);
   2892 	  break;
   2893 
   2894 	case DW_OP_push_object_address:
   2895 	  unimplemented (op);
   2896 	  break;
   2897 
   2898 	case DW_OP_skip:
   2899 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
   2900 	  op_ptr += 2;
   2901 	  i = ax_goto (expr, aop_goto);
   2902 	  dw_labels.push_back (op_ptr + offset - base);
   2903 	  patches.push_back (i);
   2904 	  break;
   2905 
   2906 	case DW_OP_bra:
   2907 	  offset = extract_signed_integer (op_ptr, 2, byte_order);
   2908 	  op_ptr += 2;
   2909 	  /* Zero extend the operand.  */
   2910 	  ax_zero_ext (expr, addr_size_bits);
   2911 	  i = ax_goto (expr, aop_if_goto);
   2912 	  dw_labels.push_back (op_ptr + offset - base);
   2913 	  patches.push_back (i);
   2914 	  break;
   2915 
   2916 	case DW_OP_nop:
   2917 	  break;
   2918 
   2919 	case DW_OP_piece:
   2920 	case DW_OP_bit_piece:
   2921 	  {
   2922 	    uint64_t size;
   2923 
   2924 	    if (op_ptr - 1 == previous_piece)
   2925 	      error (_("Cannot translate empty pieces to agent expressions"));
   2926 	    previous_piece = op_ptr - 1;
   2927 
   2928 	    op_ptr = safe_read_uleb128 (op_ptr, op_end, &size);
   2929 	    if (op == DW_OP_piece)
   2930 	      {
   2931 		size *= 8;
   2932 		uoffset = 0;
   2933 	      }
   2934 	    else
   2935 	      op_ptr = safe_read_uleb128 (op_ptr, op_end, &uoffset);
   2936 
   2937 	    if (bits_collected + size > 8 * sizeof (LONGEST))
   2938 	      error (_("Expression pieces exceed word size"));
   2939 
   2940 	    /* Access the bits.  */
   2941 	    switch (loc->kind)
   2942 	      {
   2943 	      case axs_lvalue_register:
   2944 		ax_reg (expr, loc->u.reg);
   2945 		break;
   2946 
   2947 	      case axs_lvalue_memory:
   2948 		/* Offset the pointer, if needed.  */
   2949 		if (uoffset > 8)
   2950 		  {
   2951 		    ax_const_l (expr, uoffset / 8);
   2952 		    ax_simple (expr, aop_add);
   2953 		    uoffset %= 8;
   2954 		  }
   2955 		access_memory (arch, expr, size);
   2956 		break;
   2957 	      }
   2958 
   2959 	    /* For a bits-big-endian target, shift up what we already
   2960 	       have.  For a bits-little-endian target, shift up the
   2961 	       new data.  Note that there is a potential bug here if
   2962 	       the DWARF expression leaves multiple values on the
   2963 	       stack.  */
   2964 	    if (bits_collected > 0)
   2965 	      {
   2966 		if (bits_big_endian)
   2967 		  {
   2968 		    ax_simple (expr, aop_swap);
   2969 		    ax_const_l (expr, size);
   2970 		    ax_simple (expr, aop_lsh);
   2971 		    /* We don't need a second swap here, because
   2972 		       aop_bit_or is symmetric.  */
   2973 		  }
   2974 		else
   2975 		  {
   2976 		    ax_const_l (expr, size);
   2977 		    ax_simple (expr, aop_lsh);
   2978 		  }
   2979 		ax_simple (expr, aop_bit_or);
   2980 	      }
   2981 
   2982 	    bits_collected += size;
   2983 	    loc->kind = axs_rvalue;
   2984 	  }
   2985 	  break;
   2986 
   2987 	case DW_OP_GNU_uninit:
   2988 	  unimplemented (op);
   2989 
   2990 	case DW_OP_call2:
   2991 	case DW_OP_call4:
   2992 	  {
   2993 	    struct dwarf2_locexpr_baton block;
   2994 	    int size = (op == DW_OP_call2 ? 2 : 4);
   2995 
   2996 	    uoffset = extract_unsigned_integer (op_ptr, size, byte_order);
   2997 	    op_ptr += size;
   2998 
   2999 	    auto get_frame_pc_from_expr = [expr] ()
   3000 	      {
   3001 		return expr->scope;
   3002 	      };
   3003 	    cu_offset cuoffset = (cu_offset) uoffset;
   3004 	    block = dwarf2_fetch_die_loc_cu_off (cuoffset, per_cu, per_objfile,
   3005 						 get_frame_pc_from_expr);
   3006 
   3007 	    /* DW_OP_call_ref is currently not supported.  */
   3008 	    gdb_assert (block.per_cu == per_cu);
   3009 
   3010 	    dwarf2_compile_expr_to_ax (expr, loc, addr_size, block.data,
   3011 				       block.data + block.size, per_cu,
   3012 				       per_objfile);
   3013 	  }
   3014 	  break;
   3015 
   3016 	case DW_OP_call_ref:
   3017 	  unimplemented (op);
   3018 
   3019 	case DW_OP_GNU_variable_value:
   3020 	  unimplemented (op);
   3021 
   3022 	default:
   3023 	  unimplemented (op);
   3024 	}
   3025     }
   3026 
   3027   /* Patch all the branches we emitted.  */
   3028   for (int i = 0; i < patches.size (); ++i)
   3029     {
   3030       int targ = offsets[dw_labels[i]];
   3031       if (targ == -1)
   3032 	internal_error (_("invalid label"));
   3033       ax_label (expr, patches[i], targ);
   3034     }
   3035 }
   3036 
   3037 
   3038 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
   3040    evaluator to calculate the location.  */
   3041 static struct value *
   3042 locexpr_read_variable (struct symbol *symbol, frame_info_ptr frame)
   3043 {
   3044   struct dwarf2_locexpr_baton *dlbaton
   3045     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
   3046   struct value *val;
   3047 
   3048   val = dwarf2_evaluate_loc_desc (symbol->type (), frame, dlbaton->data,
   3049 				  dlbaton->size, dlbaton->per_cu,
   3050 				  dlbaton->per_objfile);
   3051 
   3052   return val;
   3053 }
   3054 
   3055 /* Return the value of SYMBOL in FRAME at (callee) FRAME's function
   3056    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
   3057    will be thrown.  */
   3058 
   3059 static struct value *
   3060 locexpr_read_variable_at_entry (struct symbol *symbol, frame_info_ptr frame)
   3061 {
   3062   struct dwarf2_locexpr_baton *dlbaton
   3063     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
   3064 
   3065   return value_of_dwarf_block_entry (symbol->type (), frame, dlbaton->data,
   3066 				     dlbaton->size);
   3067 }
   3068 
   3069 /* Implementation of get_symbol_read_needs from
   3070    symbol_computed_ops.  */
   3071 
   3072 static enum symbol_needs_kind
   3073 locexpr_get_symbol_read_needs (struct symbol *symbol)
   3074 {
   3075   struct dwarf2_locexpr_baton *dlbaton
   3076     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
   3077 
   3078   gdbarch *arch = dlbaton->per_objfile->objfile->arch ();
   3079   gdb::array_view<const gdb_byte> expr (dlbaton->data, dlbaton->size);
   3080 
   3081   return dwarf2_get_symbol_read_needs (expr,
   3082 				       dlbaton->per_cu,
   3083 				       dlbaton->per_objfile,
   3084 				       gdbarch_byte_order (arch),
   3085 				       dlbaton->per_cu->addr_size (),
   3086 				       dlbaton->per_cu->ref_addr_size ());
   3087 }
   3088 
   3089 /* Return true if DATA points to the end of a piece.  END is one past
   3090    the last byte in the expression.  */
   3091 
   3092 static int
   3093 piece_end_p (const gdb_byte *data, const gdb_byte *end)
   3094 {
   3095   return data == end || data[0] == DW_OP_piece || data[0] == DW_OP_bit_piece;
   3096 }
   3097 
   3098 /* Helper for locexpr_describe_location_piece that finds the name of a
   3099    DWARF register.  */
   3100 
   3101 static const char *
   3102 locexpr_regname (struct gdbarch *gdbarch, int dwarf_regnum)
   3103 {
   3104   int regnum;
   3105 
   3106   /* This doesn't use dwarf_reg_to_regnum_or_error on purpose.
   3107      We'd rather print *something* here than throw an error.  */
   3108   regnum = dwarf_reg_to_regnum (gdbarch, dwarf_regnum);
   3109   /* gdbarch_register_name may just return "", return something more
   3110      descriptive for bad register numbers.  */
   3111   if (regnum == -1)
   3112     {
   3113       /* The text is output as "$bad_register_number".
   3114 	 That is why we use the underscores.  */
   3115       return _("bad_register_number");
   3116     }
   3117   return gdbarch_register_name (gdbarch, regnum);
   3118 }
   3119 
   3120 /* Nicely describe a single piece of a location, returning an updated
   3121    position in the bytecode sequence.  This function cannot recognize
   3122    all locations; if a location is not recognized, it simply returns
   3123    DATA.  If there is an error during reading, e.g. we run off the end
   3124    of the buffer, an error is thrown.  */
   3125 
   3126 static const gdb_byte *
   3127 locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
   3128 				 CORE_ADDR addr, dwarf2_per_cu_data *per_cu,
   3129 				 dwarf2_per_objfile *per_objfile,
   3130 				 const gdb_byte *data, const gdb_byte *end,
   3131 				 unsigned int addr_size)
   3132 {
   3133   objfile *objfile = per_objfile->objfile;
   3134   struct gdbarch *gdbarch = objfile->arch ();
   3135   size_t leb128_size;
   3136 
   3137   if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
   3138     {
   3139       gdb_printf (stream, _("a variable in $%s"),
   3140 		  locexpr_regname (gdbarch, data[0] - DW_OP_reg0));
   3141       data += 1;
   3142     }
   3143   else if (data[0] == DW_OP_regx)
   3144     {
   3145       uint64_t reg;
   3146 
   3147       data = safe_read_uleb128 (data + 1, end, &reg);
   3148       gdb_printf (stream, _("a variable in $%s"),
   3149 		  locexpr_regname (gdbarch, reg));
   3150     }
   3151   else if (data[0] == DW_OP_fbreg)
   3152     {
   3153       const struct block *b;
   3154       struct symbol *framefunc;
   3155       int frame_reg = 0;
   3156       int64_t frame_offset;
   3157       const gdb_byte *base_data, *new_data, *save_data = data;
   3158       size_t base_size;
   3159       int64_t base_offset = 0;
   3160 
   3161       new_data = safe_read_sleb128 (data + 1, end, &frame_offset);
   3162       if (!piece_end_p (new_data, end))
   3163 	return data;
   3164       data = new_data;
   3165 
   3166       b = block_for_pc (addr);
   3167 
   3168       if (!b)
   3169 	error (_("No block found for address for symbol \"%s\"."),
   3170 	       symbol->print_name ());
   3171 
   3172       framefunc = block_linkage_function (b);
   3173 
   3174       if (!framefunc)
   3175 	error (_("No function found for block for symbol \"%s\"."),
   3176 	       symbol->print_name ());
   3177 
   3178       func_get_frame_base_dwarf_block (framefunc, addr, &base_data, &base_size);
   3179 
   3180       if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
   3181 	{
   3182 	  const gdb_byte *buf_end;
   3183 
   3184 	  frame_reg = base_data[0] - DW_OP_breg0;
   3185 	  buf_end = safe_read_sleb128 (base_data + 1, base_data + base_size,
   3186 				       &base_offset);
   3187 	  if (buf_end != base_data + base_size)
   3188 	    error (_("Unexpected opcode after "
   3189 		     "DW_OP_breg%u for symbol \"%s\"."),
   3190 		   frame_reg, symbol->print_name ());
   3191 	}
   3192       else if (base_data[0] >= DW_OP_reg0 && base_data[0] <= DW_OP_reg31)
   3193 	{
   3194 	  /* The frame base is just the register, with no offset.  */
   3195 	  frame_reg = base_data[0] - DW_OP_reg0;
   3196 	  base_offset = 0;
   3197 	}
   3198       else
   3199 	{
   3200 	  /* We don't know what to do with the frame base expression,
   3201 	     so we can't trace this variable; give up.  */
   3202 	  return save_data;
   3203 	}
   3204 
   3205       gdb_printf (stream,
   3206 		  _("a variable at frame base reg $%s offset %s+%s"),
   3207 		  locexpr_regname (gdbarch, frame_reg),
   3208 		  plongest (base_offset), plongest (frame_offset));
   3209     }
   3210   else if (data[0] >= DW_OP_breg0 && data[0] <= DW_OP_breg31
   3211 	   && piece_end_p (data, end))
   3212     {
   3213       int64_t offset;
   3214 
   3215       data = safe_read_sleb128 (data + 1, end, &offset);
   3216 
   3217       gdb_printf (stream,
   3218 		  _("a variable at offset %s from base reg $%s"),
   3219 		  plongest (offset),
   3220 		  locexpr_regname (gdbarch, data[0] - DW_OP_breg0));
   3221     }
   3222 
   3223   /* The location expression for a TLS variable looks like this (on a
   3224      64-bit LE machine):
   3225 
   3226      DW_AT_location    : 10 byte block: 3 4 0 0 0 0 0 0 0 e0
   3227 			(DW_OP_addr: 4; DW_OP_GNU_push_tls_address)
   3228 
   3229      0x3 is the encoding for DW_OP_addr, which has an operand as long
   3230      as the size of an address on the target machine (here is 8
   3231      bytes).  Note that more recent version of GCC emit DW_OP_const4u
   3232      or DW_OP_const8u, depending on address size, rather than
   3233      DW_OP_addr.  0xe0 is the encoding for DW_OP_GNU_push_tls_address.
   3234      The operand represents the offset at which the variable is within
   3235      the thread local storage.  */
   3236 
   3237   else if (data + 1 + addr_size < end
   3238 	   && (data[0] == DW_OP_addr
   3239 	       || (addr_size == 4 && data[0] == DW_OP_const4u)
   3240 	       || (addr_size == 8 && data[0] == DW_OP_const8u))
   3241 	   && (data[1 + addr_size] == DW_OP_GNU_push_tls_address
   3242 	       || data[1 + addr_size] == DW_OP_form_tls_address)
   3243 	   && piece_end_p (data + 2 + addr_size, end))
   3244     {
   3245       ULONGEST offset;
   3246       offset = extract_unsigned_integer (data + 1, addr_size,
   3247 					 gdbarch_byte_order (gdbarch));
   3248 
   3249       gdb_printf (stream,
   3250 		  _("a thread-local variable at offset 0x%s "
   3251 		    "in the thread-local storage for `%s'"),
   3252 		  phex_nz (offset, addr_size), objfile_name (objfile));
   3253 
   3254       data += 1 + addr_size + 1;
   3255     }
   3256 
   3257   /* With -gsplit-dwarf a TLS variable can also look like this:
   3258      DW_AT_location    : 3 byte block: fc 4 e0
   3259 			(DW_OP_GNU_const_index: 4;
   3260 			 DW_OP_GNU_push_tls_address)  */
   3261   else if (data + 3 <= end
   3262 	   && data + 1 + (leb128_size = skip_leb128 (data + 1, end)) < end
   3263 	   && data[0] == DW_OP_GNU_const_index
   3264 	   && leb128_size > 0
   3265 	   && (data[1 + leb128_size] == DW_OP_GNU_push_tls_address
   3266 	       || data[1 + leb128_size] == DW_OP_form_tls_address)
   3267 	   && piece_end_p (data + 2 + leb128_size, end))
   3268     {
   3269       uint64_t offset;
   3270 
   3271       data = safe_read_uleb128 (data + 1, end, &offset);
   3272       offset = dwarf2_read_addr_index (per_cu, per_objfile, offset);
   3273       gdb_printf (stream,
   3274 		  _("a thread-local variable at offset 0x%s "
   3275 		    "in the thread-local storage for `%s'"),
   3276 		  phex_nz (offset, addr_size), objfile_name (objfile));
   3277       ++data;
   3278     }
   3279 
   3280   else if (data[0] >= DW_OP_lit0
   3281 	   && data[0] <= DW_OP_lit31
   3282 	   && data + 1 < end
   3283 	   && data[1] == DW_OP_stack_value)
   3284     {
   3285       gdb_printf (stream, _("the constant %d"), data[0] - DW_OP_lit0);
   3286       data += 2;
   3287     }
   3288 
   3289   return data;
   3290 }
   3291 
   3292 /* Disassemble an expression, stopping at the end of a piece or at the
   3293    end of the expression.  Returns a pointer to the next unread byte
   3294    in the input expression.  If ALL is nonzero, then this function
   3295    will keep going until it reaches the end of the expression.
   3296    If there is an error during reading, e.g. we run off the end
   3297    of the buffer, an error is thrown.  */
   3298 
   3299 static const gdb_byte *
   3300 disassemble_dwarf_expression (struct ui_file *stream,
   3301 			      struct gdbarch *arch, unsigned int addr_size,
   3302 			      int offset_size, const gdb_byte *start,
   3303 			      const gdb_byte *data, const gdb_byte *end,
   3304 			      int indent, int all,
   3305 			      dwarf2_per_cu_data *per_cu,
   3306 			      dwarf2_per_objfile *per_objfile)
   3307 {
   3308   while (data < end
   3309 	 && (all
   3310 	     || (data[0] != DW_OP_piece && data[0] != DW_OP_bit_piece)))
   3311     {
   3312       enum dwarf_location_atom op = (enum dwarf_location_atom) *data++;
   3313       uint64_t ul;
   3314       int64_t l;
   3315       const char *name;
   3316 
   3317       name = get_DW_OP_name (op);
   3318 
   3319       if (!name)
   3320 	error (_("Unrecognized DWARF opcode 0x%02x at %ld"),
   3321 	       op, (long) (data - 1 - start));
   3322       gdb_printf (stream, "  %*ld: %s", indent + 4,
   3323 		  (long) (data - 1 - start), name);
   3324 
   3325       switch (op)
   3326 	{
   3327 	case DW_OP_addr:
   3328 	  ul = extract_unsigned_integer (data, addr_size,
   3329 					 gdbarch_byte_order (arch));
   3330 	  data += addr_size;
   3331 	  gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size));
   3332 	  break;
   3333 
   3334 	case DW_OP_const1u:
   3335 	  ul = extract_unsigned_integer (data, 1, gdbarch_byte_order (arch));
   3336 	  data += 1;
   3337 	  gdb_printf (stream, " %s", pulongest (ul));
   3338 	  break;
   3339 
   3340 	case DW_OP_const1s:
   3341 	  l = extract_signed_integer (data, 1, gdbarch_byte_order (arch));
   3342 	  data += 1;
   3343 	  gdb_printf (stream, " %s", plongest (l));
   3344 	  break;
   3345 
   3346 	case DW_OP_const2u:
   3347 	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
   3348 	  data += 2;
   3349 	  gdb_printf (stream, " %s", pulongest (ul));
   3350 	  break;
   3351 
   3352 	case DW_OP_const2s:
   3353 	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
   3354 	  data += 2;
   3355 	  gdb_printf (stream, " %s", plongest (l));
   3356 	  break;
   3357 
   3358 	case DW_OP_const4u:
   3359 	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
   3360 	  data += 4;
   3361 	  gdb_printf (stream, " %s", pulongest (ul));
   3362 	  break;
   3363 
   3364 	case DW_OP_const4s:
   3365 	  l = extract_signed_integer (data, 4, gdbarch_byte_order (arch));
   3366 	  data += 4;
   3367 	  gdb_printf (stream, " %s", plongest (l));
   3368 	  break;
   3369 
   3370 	case DW_OP_const8u:
   3371 	  ul = extract_unsigned_integer (data, 8, gdbarch_byte_order (arch));
   3372 	  data += 8;
   3373 	  gdb_printf (stream, " %s", pulongest (ul));
   3374 	  break;
   3375 
   3376 	case DW_OP_const8s:
   3377 	  l = extract_signed_integer (data, 8, gdbarch_byte_order (arch));
   3378 	  data += 8;
   3379 	  gdb_printf (stream, " %s", plongest (l));
   3380 	  break;
   3381 
   3382 	case DW_OP_constu:
   3383 	  data = safe_read_uleb128 (data, end, &ul);
   3384 	  gdb_printf (stream, " %s", pulongest (ul));
   3385 	  break;
   3386 
   3387 	case DW_OP_consts:
   3388 	  data = safe_read_sleb128 (data, end, &l);
   3389 	  gdb_printf (stream, " %s", plongest (l));
   3390 	  break;
   3391 
   3392 	case DW_OP_reg0:
   3393 	case DW_OP_reg1:
   3394 	case DW_OP_reg2:
   3395 	case DW_OP_reg3:
   3396 	case DW_OP_reg4:
   3397 	case DW_OP_reg5:
   3398 	case DW_OP_reg6:
   3399 	case DW_OP_reg7:
   3400 	case DW_OP_reg8:
   3401 	case DW_OP_reg9:
   3402 	case DW_OP_reg10:
   3403 	case DW_OP_reg11:
   3404 	case DW_OP_reg12:
   3405 	case DW_OP_reg13:
   3406 	case DW_OP_reg14:
   3407 	case DW_OP_reg15:
   3408 	case DW_OP_reg16:
   3409 	case DW_OP_reg17:
   3410 	case DW_OP_reg18:
   3411 	case DW_OP_reg19:
   3412 	case DW_OP_reg20:
   3413 	case DW_OP_reg21:
   3414 	case DW_OP_reg22:
   3415 	case DW_OP_reg23:
   3416 	case DW_OP_reg24:
   3417 	case DW_OP_reg25:
   3418 	case DW_OP_reg26:
   3419 	case DW_OP_reg27:
   3420 	case DW_OP_reg28:
   3421 	case DW_OP_reg29:
   3422 	case DW_OP_reg30:
   3423 	case DW_OP_reg31:
   3424 	  gdb_printf (stream, " [$%s]",
   3425 		      locexpr_regname (arch, op - DW_OP_reg0));
   3426 	  break;
   3427 
   3428 	case DW_OP_regx:
   3429 	  data = safe_read_uleb128 (data, end, &ul);
   3430 	  gdb_printf (stream, " %s [$%s]", pulongest (ul),
   3431 		      locexpr_regname (arch, (int) ul));
   3432 	  break;
   3433 
   3434 	case DW_OP_implicit_value:
   3435 	  data = safe_read_uleb128 (data, end, &ul);
   3436 	  data += ul;
   3437 	  gdb_printf (stream, " %s", pulongest (ul));
   3438 	  break;
   3439 
   3440 	case DW_OP_breg0:
   3441 	case DW_OP_breg1:
   3442 	case DW_OP_breg2:
   3443 	case DW_OP_breg3:
   3444 	case DW_OP_breg4:
   3445 	case DW_OP_breg5:
   3446 	case DW_OP_breg6:
   3447 	case DW_OP_breg7:
   3448 	case DW_OP_breg8:
   3449 	case DW_OP_breg9:
   3450 	case DW_OP_breg10:
   3451 	case DW_OP_breg11:
   3452 	case DW_OP_breg12:
   3453 	case DW_OP_breg13:
   3454 	case DW_OP_breg14:
   3455 	case DW_OP_breg15:
   3456 	case DW_OP_breg16:
   3457 	case DW_OP_breg17:
   3458 	case DW_OP_breg18:
   3459 	case DW_OP_breg19:
   3460 	case DW_OP_breg20:
   3461 	case DW_OP_breg21:
   3462 	case DW_OP_breg22:
   3463 	case DW_OP_breg23:
   3464 	case DW_OP_breg24:
   3465 	case DW_OP_breg25:
   3466 	case DW_OP_breg26:
   3467 	case DW_OP_breg27:
   3468 	case DW_OP_breg28:
   3469 	case DW_OP_breg29:
   3470 	case DW_OP_breg30:
   3471 	case DW_OP_breg31:
   3472 	  data = safe_read_sleb128 (data, end, &l);
   3473 	  gdb_printf (stream, " %s [$%s]", plongest (l),
   3474 		      locexpr_regname (arch, op - DW_OP_breg0));
   3475 	  break;
   3476 
   3477 	case DW_OP_bregx:
   3478 	  data = safe_read_uleb128 (data, end, &ul);
   3479 	  data = safe_read_sleb128 (data, end, &l);
   3480 	  gdb_printf (stream, " register %s [$%s] offset %s",
   3481 		      pulongest (ul),
   3482 		      locexpr_regname (arch, (int) ul),
   3483 		      plongest (l));
   3484 	  break;
   3485 
   3486 	case DW_OP_fbreg:
   3487 	  data = safe_read_sleb128 (data, end, &l);
   3488 	  gdb_printf (stream, " %s", plongest (l));
   3489 	  break;
   3490 
   3491 	case DW_OP_xderef_size:
   3492 	case DW_OP_deref_size:
   3493 	case DW_OP_pick:
   3494 	  gdb_printf (stream, " %d", *data);
   3495 	  ++data;
   3496 	  break;
   3497 
   3498 	case DW_OP_plus_uconst:
   3499 	  data = safe_read_uleb128 (data, end, &ul);
   3500 	  gdb_printf (stream, " %s", pulongest (ul));
   3501 	  break;
   3502 
   3503 	case DW_OP_skip:
   3504 	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
   3505 	  data += 2;
   3506 	  gdb_printf (stream, " to %ld",
   3507 		      (long) (data + l - start));
   3508 	  break;
   3509 
   3510 	case DW_OP_bra:
   3511 	  l = extract_signed_integer (data, 2, gdbarch_byte_order (arch));
   3512 	  data += 2;
   3513 	  gdb_printf (stream, " %ld",
   3514 		      (long) (data + l - start));
   3515 	  break;
   3516 
   3517 	case DW_OP_call2:
   3518 	  ul = extract_unsigned_integer (data, 2, gdbarch_byte_order (arch));
   3519 	  data += 2;
   3520 	  gdb_printf (stream, " offset %s", phex_nz (ul, 2));
   3521 	  break;
   3522 
   3523 	case DW_OP_call4:
   3524 	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
   3525 	  data += 4;
   3526 	  gdb_printf (stream, " offset %s", phex_nz (ul, 4));
   3527 	  break;
   3528 
   3529 	case DW_OP_call_ref:
   3530 	  ul = extract_unsigned_integer (data, offset_size,
   3531 					 gdbarch_byte_order (arch));
   3532 	  data += offset_size;
   3533 	  gdb_printf (stream, " offset %s", phex_nz (ul, offset_size));
   3534 	  break;
   3535 
   3536 	case DW_OP_piece:
   3537 	  data = safe_read_uleb128 (data, end, &ul);
   3538 	  gdb_printf (stream, " %s (bytes)", pulongest (ul));
   3539 	  break;
   3540 
   3541 	case DW_OP_bit_piece:
   3542 	  {
   3543 	    uint64_t offset;
   3544 
   3545 	    data = safe_read_uleb128 (data, end, &ul);
   3546 	    data = safe_read_uleb128 (data, end, &offset);
   3547 	    gdb_printf (stream, " size %s offset %s (bits)",
   3548 			pulongest (ul), pulongest (offset));
   3549 	  }
   3550 	  break;
   3551 
   3552 	case DW_OP_implicit_pointer:
   3553 	case DW_OP_GNU_implicit_pointer:
   3554 	  {
   3555 	    ul = extract_unsigned_integer (data, offset_size,
   3556 					   gdbarch_byte_order (arch));
   3557 	    data += offset_size;
   3558 
   3559 	    data = safe_read_sleb128 (data, end, &l);
   3560 
   3561 	    gdb_printf (stream, " DIE %s offset %s",
   3562 			phex_nz (ul, offset_size),
   3563 			plongest (l));
   3564 	  }
   3565 	  break;
   3566 
   3567 	case DW_OP_deref_type:
   3568 	case DW_OP_GNU_deref_type:
   3569 	  {
   3570 	    int deref_addr_size = *data++;
   3571 	    struct type *type;
   3572 
   3573 	    data = safe_read_uleb128 (data, end, &ul);
   3574 	    cu_offset offset = (cu_offset) ul;
   3575 	    type = dwarf2_get_die_type (offset, per_cu, per_objfile);
   3576 	    gdb_printf (stream, "<");
   3577 	    type_print (type, "", stream, -1);
   3578 	    gdb_printf (stream, " [0x%s]> %d",
   3579 			phex_nz (to_underlying (offset), 0),
   3580 			deref_addr_size);
   3581 	  }
   3582 	  break;
   3583 
   3584 	case DW_OP_const_type:
   3585 	case DW_OP_GNU_const_type:
   3586 	  {
   3587 	    struct type *type;
   3588 
   3589 	    data = safe_read_uleb128 (data, end, &ul);
   3590 	    cu_offset type_die = (cu_offset) ul;
   3591 	    type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
   3592 	    gdb_printf (stream, "<");
   3593 	    type_print (type, "", stream, -1);
   3594 	    gdb_printf (stream, " [0x%s]>",
   3595 			phex_nz (to_underlying (type_die), 0));
   3596 
   3597 	    int n = *data++;
   3598 	    gdb_printf (stream, " %d byte block:", n);
   3599 	    for (int i = 0; i < n; ++i)
   3600 	      gdb_printf (stream, " %02x", data[i]);
   3601 	    data += n;
   3602 	  }
   3603 	  break;
   3604 
   3605 	case DW_OP_regval_type:
   3606 	case DW_OP_GNU_regval_type:
   3607 	  {
   3608 	    uint64_t reg;
   3609 	    struct type *type;
   3610 
   3611 	    data = safe_read_uleb128 (data, end, &reg);
   3612 	    data = safe_read_uleb128 (data, end, &ul);
   3613 	    cu_offset type_die = (cu_offset) ul;
   3614 
   3615 	    type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
   3616 	    gdb_printf (stream, "<");
   3617 	    type_print (type, "", stream, -1);
   3618 	    gdb_printf (stream, " [0x%s]> [$%s]",
   3619 			phex_nz (to_underlying (type_die), 0),
   3620 			locexpr_regname (arch, reg));
   3621 	  }
   3622 	  break;
   3623 
   3624 	case DW_OP_convert:
   3625 	case DW_OP_GNU_convert:
   3626 	case DW_OP_reinterpret:
   3627 	case DW_OP_GNU_reinterpret:
   3628 	  {
   3629 	    data = safe_read_uleb128 (data, end, &ul);
   3630 	    cu_offset type_die = (cu_offset) ul;
   3631 
   3632 	    if (to_underlying (type_die) == 0)
   3633 	      gdb_printf (stream, "<0>");
   3634 	    else
   3635 	      {
   3636 		struct type *type;
   3637 
   3638 		type = dwarf2_get_die_type (type_die, per_cu, per_objfile);
   3639 		gdb_printf (stream, "<");
   3640 		type_print (type, "", stream, -1);
   3641 		gdb_printf (stream, " [0x%s]>",
   3642 			    phex_nz (to_underlying (type_die), 0));
   3643 	      }
   3644 	  }
   3645 	  break;
   3646 
   3647 	case DW_OP_entry_value:
   3648 	case DW_OP_GNU_entry_value:
   3649 	  data = safe_read_uleb128 (data, end, &ul);
   3650 	  gdb_putc ('\n', stream);
   3651 	  disassemble_dwarf_expression (stream, arch, addr_size, offset_size,
   3652 					start, data, data + ul, indent + 2,
   3653 					all, per_cu, per_objfile);
   3654 	  data += ul;
   3655 	  continue;
   3656 
   3657 	case DW_OP_GNU_parameter_ref:
   3658 	  ul = extract_unsigned_integer (data, 4, gdbarch_byte_order (arch));
   3659 	  data += 4;
   3660 	  gdb_printf (stream, " offset %s", phex_nz (ul, 4));
   3661 	  break;
   3662 
   3663 	case DW_OP_addrx:
   3664 	case DW_OP_GNU_addr_index:
   3665 	  data = safe_read_uleb128 (data, end, &ul);
   3666 	  ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
   3667 	  gdb_printf (stream, " 0x%s", phex_nz (ul, addr_size));
   3668 	  break;
   3669 
   3670 	case DW_OP_GNU_const_index:
   3671 	  data = safe_read_uleb128 (data, end, &ul);
   3672 	  ul = dwarf2_read_addr_index (per_cu, per_objfile, ul);
   3673 	  gdb_printf (stream, " %s", pulongest (ul));
   3674 	  break;
   3675 
   3676 	case DW_OP_GNU_variable_value:
   3677 	  ul = extract_unsigned_integer (data, offset_size,
   3678 					 gdbarch_byte_order (arch));
   3679 	  data += offset_size;
   3680 	  gdb_printf (stream, " offset %s", phex_nz (ul, offset_size));
   3681 	  break;
   3682 	}
   3683 
   3684       gdb_printf (stream, "\n");
   3685     }
   3686 
   3687   return data;
   3688 }
   3689 
   3690 static bool dwarf_always_disassemble;
   3691 
   3692 static void
   3693 show_dwarf_always_disassemble (struct ui_file *file, int from_tty,
   3694 			       struct cmd_list_element *c, const char *value)
   3695 {
   3696   gdb_printf (file,
   3697 	      _("Whether to always disassemble "
   3698 		"DWARF expressions is %s.\n"),
   3699 	      value);
   3700 }
   3701 
   3702 /* Describe a single location, which may in turn consist of multiple
   3703    pieces.  */
   3704 
   3705 static void
   3706 locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
   3707 			     struct ui_file *stream,
   3708 			     const gdb_byte *data, size_t size,
   3709 			     unsigned int addr_size,
   3710 			     int offset_size, dwarf2_per_cu_data *per_cu,
   3711 			     dwarf2_per_objfile *per_objfile)
   3712 {
   3713   const gdb_byte *end = data + size;
   3714   int first_piece = 1, bad = 0;
   3715   objfile *objfile = per_objfile->objfile;
   3716 
   3717   while (data < end)
   3718     {
   3719       const gdb_byte *here = data;
   3720       int disassemble = 1;
   3721 
   3722       if (first_piece)
   3723 	first_piece = 0;
   3724       else
   3725 	gdb_printf (stream, _(", and "));
   3726 
   3727       if (!dwarf_always_disassemble)
   3728 	{
   3729 	  data = locexpr_describe_location_piece (symbol, stream,
   3730 						  addr, per_cu, per_objfile,
   3731 						  data, end, addr_size);
   3732 	  /* If we printed anything, or if we have an empty piece,
   3733 	     then don't disassemble.  */
   3734 	  if (data != here
   3735 	      || data[0] == DW_OP_piece
   3736 	      || data[0] == DW_OP_bit_piece)
   3737 	    disassemble = 0;
   3738 	}
   3739       if (disassemble)
   3740 	{
   3741 	  gdb_printf (stream, _("a complex DWARF expression:\n"));
   3742 	  data = disassemble_dwarf_expression (stream,
   3743 					       objfile->arch (),
   3744 					       addr_size, offset_size, data,
   3745 					       data, end, 0,
   3746 					       dwarf_always_disassemble,
   3747 					       per_cu, per_objfile);
   3748 	}
   3749 
   3750       if (data < end)
   3751 	{
   3752 	  int empty = data == here;
   3753 
   3754 	  if (disassemble)
   3755 	    gdb_printf (stream, "   ");
   3756 	  if (data[0] == DW_OP_piece)
   3757 	    {
   3758 	      uint64_t bytes;
   3759 
   3760 	      data = safe_read_uleb128 (data + 1, end, &bytes);
   3761 
   3762 	      if (empty)
   3763 		gdb_printf (stream, _("an empty %s-byte piece"),
   3764 			    pulongest (bytes));
   3765 	      else
   3766 		gdb_printf (stream, _(" [%s-byte piece]"),
   3767 			    pulongest (bytes));
   3768 	    }
   3769 	  else if (data[0] == DW_OP_bit_piece)
   3770 	    {
   3771 	      uint64_t bits, offset;
   3772 
   3773 	      data = safe_read_uleb128 (data + 1, end, &bits);
   3774 	      data = safe_read_uleb128 (data, end, &offset);
   3775 
   3776 	      if (empty)
   3777 		gdb_printf (stream,
   3778 			    _("an empty %s-bit piece"),
   3779 			    pulongest (bits));
   3780 	      else
   3781 		gdb_printf (stream,
   3782 			    _(" [%s-bit piece, offset %s bits]"),
   3783 			    pulongest (bits), pulongest (offset));
   3784 	    }
   3785 	  else
   3786 	    {
   3787 	      bad = 1;
   3788 	      break;
   3789 	    }
   3790 	}
   3791     }
   3792 
   3793   if (bad || data > end)
   3794     error (_("Corrupted DWARF2 expression for \"%s\"."),
   3795 	   symbol->print_name ());
   3796 }
   3797 
   3798 /* Print a natural-language description of SYMBOL to STREAM.  This
   3799    version is for a symbol with a single location.  */
   3800 
   3801 static void
   3802 locexpr_describe_location (struct symbol *symbol, CORE_ADDR addr,
   3803 			   struct ui_file *stream)
   3804 {
   3805   struct dwarf2_locexpr_baton *dlbaton
   3806     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
   3807   unsigned int addr_size = dlbaton->per_cu->addr_size ();
   3808   int offset_size = dlbaton->per_cu->offset_size ();
   3809 
   3810   locexpr_describe_location_1 (symbol, addr, stream,
   3811 			       dlbaton->data, dlbaton->size,
   3812 			       addr_size, offset_size,
   3813 			       dlbaton->per_cu, dlbaton->per_objfile);
   3814 }
   3815 
   3816 /* Describe the location of SYMBOL as an agent value in VALUE, generating
   3817    any necessary bytecode in AX.  */
   3818 
   3819 static void
   3820 locexpr_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
   3821 			    struct axs_value *value)
   3822 {
   3823   struct dwarf2_locexpr_baton *dlbaton
   3824     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (symbol);
   3825   unsigned int addr_size = dlbaton->per_cu->addr_size ();
   3826 
   3827   if (dlbaton->size == 0)
   3828     value->optimized_out = 1;
   3829   else
   3830     dwarf2_compile_expr_to_ax (ax, value, addr_size, dlbaton->data,
   3831 			       dlbaton->data + dlbaton->size, dlbaton->per_cu,
   3832 			       dlbaton->per_objfile);
   3833 }
   3834 
   3835 /* symbol_computed_ops 'generate_c_location' method.  */
   3836 
   3837 static void
   3838 locexpr_generate_c_location (struct symbol *sym, string_file *stream,
   3839 			     struct gdbarch *gdbarch,
   3840 			     std::vector<bool> &registers_used,
   3841 			     CORE_ADDR pc, const char *result_name)
   3842 {
   3843   struct dwarf2_locexpr_baton *dlbaton
   3844     = (struct dwarf2_locexpr_baton *) SYMBOL_LOCATION_BATON (sym);
   3845   unsigned int addr_size = dlbaton->per_cu->addr_size ();
   3846 
   3847   if (dlbaton->size == 0)
   3848     error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
   3849 
   3850   compile_dwarf_expr_to_c (stream, result_name,
   3851 			   sym, pc, gdbarch, registers_used, addr_size,
   3852 			   dlbaton->data, dlbaton->data + dlbaton->size,
   3853 			   dlbaton->per_cu, dlbaton->per_objfile);
   3854 }
   3855 
   3856 /* The set of location functions used with the DWARF-2 expression
   3857    evaluator.  */
   3858 const struct symbol_computed_ops dwarf2_locexpr_funcs = {
   3859   locexpr_read_variable,
   3860   locexpr_read_variable_at_entry,
   3861   locexpr_get_symbol_read_needs,
   3862   locexpr_describe_location,
   3863   0,	/* location_has_loclist */
   3864   locexpr_tracepoint_var_ref,
   3865   locexpr_generate_c_location
   3866 };
   3867 
   3868 
   3869 /* Wrapper functions for location lists.  These generally find
   3870    the appropriate location expression and call something above.  */
   3871 
   3872 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression
   3873    evaluator to calculate the location.  */
   3874 static struct value *
   3875 loclist_read_variable (struct symbol *symbol, frame_info_ptr frame)
   3876 {
   3877   struct dwarf2_loclist_baton *dlbaton
   3878     = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
   3879   struct value *val;
   3880   const gdb_byte *data;
   3881   size_t size;
   3882   CORE_ADDR pc = frame ? get_frame_address_in_block (frame) : 0;
   3883 
   3884   data = dwarf2_find_location_expression (dlbaton, &size, pc);
   3885   val = dwarf2_evaluate_loc_desc (symbol->type (), frame, data, size,
   3886 				  dlbaton->per_cu, dlbaton->per_objfile);
   3887 
   3888   return val;
   3889 }
   3890 
   3891 /* Read variable SYMBOL like loclist_read_variable at (callee) FRAME's function
   3892    entry.  SYMBOL should be a function parameter, otherwise NO_ENTRY_VALUE_ERROR
   3893    will be thrown.
   3894 
   3895    Function always returns non-NULL value, it may be marked optimized out if
   3896    inferior frame information is not available.  It throws NO_ENTRY_VALUE_ERROR
   3897    if it cannot resolve the parameter for any reason.  */
   3898 
   3899 static struct value *
   3900 loclist_read_variable_at_entry (struct symbol *symbol, frame_info_ptr frame)
   3901 {
   3902   struct dwarf2_loclist_baton *dlbaton
   3903     = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
   3904   const gdb_byte *data;
   3905   size_t size;
   3906   CORE_ADDR pc;
   3907 
   3908   if (frame == NULL || !get_frame_func_if_available (frame, &pc))
   3909     return allocate_optimized_out_value (symbol->type ());
   3910 
   3911   data = dwarf2_find_location_expression (dlbaton, &size, pc);
   3912   if (data == NULL)
   3913     return allocate_optimized_out_value (symbol->type ());
   3914 
   3915   return value_of_dwarf_block_entry (symbol->type (), frame, data, size);
   3916 }
   3917 
   3918 /* Implementation of get_symbol_read_needs from
   3919    symbol_computed_ops.  */
   3920 
   3921 static enum symbol_needs_kind
   3922 loclist_symbol_needs (struct symbol *symbol)
   3923 {
   3924   /* If there's a location list, then assume we need to have a frame
   3925      to choose the appropriate location expression.  With tracking of
   3926      global variables this is not necessarily true, but such tracking
   3927      is disabled in GCC at the moment until we figure out how to
   3928      represent it.  */
   3929 
   3930   return SYMBOL_NEEDS_FRAME;
   3931 }
   3932 
   3933 /* Print a natural-language description of SYMBOL to STREAM.  This
   3934    version applies when there is a list of different locations, each
   3935    with a specified address range.  */
   3936 
   3937 static void
   3938 loclist_describe_location (struct symbol *symbol, CORE_ADDR addr,
   3939 			   struct ui_file *stream)
   3940 {
   3941   struct dwarf2_loclist_baton *dlbaton
   3942     = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
   3943   const gdb_byte *loc_ptr, *buf_end;
   3944   dwarf2_per_objfile *per_objfile = dlbaton->per_objfile;
   3945   struct objfile *objfile = per_objfile->objfile;
   3946   struct gdbarch *gdbarch = objfile->arch ();
   3947   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   3948   unsigned int addr_size = dlbaton->per_cu->addr_size ();
   3949   int offset_size = dlbaton->per_cu->offset_size ();
   3950   int signed_addr_p = bfd_get_sign_extend_vma (objfile->obfd.get ());
   3951   /* Adjustment for relocatable objects.  */
   3952   CORE_ADDR text_offset = objfile->text_section_offset ();
   3953   CORE_ADDR base_address = dlbaton->base_address;
   3954   int done = 0;
   3955 
   3956   loc_ptr = dlbaton->data;
   3957   buf_end = dlbaton->data + dlbaton->size;
   3958 
   3959   gdb_printf (stream, _("multi-location:\n"));
   3960 
   3961   /* Iterate through locations until we run out.  */
   3962   while (!done)
   3963     {
   3964       CORE_ADDR low = 0, high = 0; /* init for gcc -Wall */
   3965       int length;
   3966       enum debug_loc_kind kind;
   3967       const gdb_byte *new_ptr = NULL; /* init for gcc -Wall */
   3968 
   3969       if (dlbaton->per_cu->version () < 5 && dlbaton->from_dwo)
   3970 	kind = decode_debug_loc_dwo_addresses (dlbaton->per_cu,
   3971 					       dlbaton->per_objfile,
   3972 					       loc_ptr, buf_end, &new_ptr,
   3973 					       &low, &high, byte_order);
   3974       else if (dlbaton->per_cu->version () < 5)
   3975 	kind = decode_debug_loc_addresses (loc_ptr, buf_end, &new_ptr,
   3976 					   &low, &high,
   3977 					   byte_order, addr_size,
   3978 					   signed_addr_p);
   3979       else
   3980 	kind = decode_debug_loclists_addresses (dlbaton->per_cu,
   3981 						dlbaton->per_objfile,
   3982 						loc_ptr, buf_end, &new_ptr,
   3983 						&low, &high, byte_order,
   3984 						addr_size, signed_addr_p);
   3985       loc_ptr = new_ptr;
   3986       switch (kind)
   3987 	{
   3988 	case DEBUG_LOC_END_OF_LIST:
   3989 	  done = 1;
   3990 	  continue;
   3991 
   3992 	case DEBUG_LOC_BASE_ADDRESS:
   3993 	  base_address = high;
   3994 	  gdb_printf (stream, _("  Base address %s"),
   3995 		      paddress (gdbarch, base_address));
   3996 	  continue;
   3997 
   3998 	case DEBUG_LOC_START_END:
   3999 	case DEBUG_LOC_START_LENGTH:
   4000 	case DEBUG_LOC_OFFSET_PAIR:
   4001 	  break;
   4002 
   4003 	case DEBUG_LOC_BUFFER_OVERFLOW:
   4004 	case DEBUG_LOC_INVALID_ENTRY:
   4005 	  error (_("Corrupted DWARF expression for symbol \"%s\"."),
   4006 		 symbol->print_name ());
   4007 
   4008 	default:
   4009 	  gdb_assert_not_reached ("bad debug_loc_kind");
   4010 	}
   4011 
   4012       /* Otherwise, a location expression entry.  */
   4013       low += text_offset;
   4014       high += text_offset;
   4015       if (!dlbaton->from_dwo && kind == DEBUG_LOC_OFFSET_PAIR)
   4016 	{
   4017 	  low += base_address;
   4018 	  high += base_address;
   4019 	}
   4020 
   4021       low = gdbarch_adjust_dwarf2_addr (gdbarch, low);
   4022       high = gdbarch_adjust_dwarf2_addr (gdbarch, high);
   4023 
   4024       if (dlbaton->per_cu->version () < 5)
   4025 	 {
   4026 	   length = extract_unsigned_integer (loc_ptr, 2, byte_order);
   4027 	   loc_ptr += 2;
   4028 	 }
   4029       else
   4030 	 {
   4031 	   unsigned int bytes_read;
   4032 	   length = read_unsigned_leb128 (NULL, loc_ptr, &bytes_read);
   4033 	   loc_ptr += bytes_read;
   4034 	 }
   4035 
   4036       /* (It would improve readability to print only the minimum
   4037 	 necessary digits of the second number of the range.)  */
   4038       gdb_printf (stream, _("  Range %s-%s: "),
   4039 		  paddress (gdbarch, low), paddress (gdbarch, high));
   4040 
   4041       /* Now describe this particular location.  */
   4042       locexpr_describe_location_1 (symbol, low, stream, loc_ptr, length,
   4043 				   addr_size, offset_size,
   4044 				   dlbaton->per_cu, dlbaton->per_objfile);
   4045 
   4046       gdb_printf (stream, "\n");
   4047 
   4048       loc_ptr += length;
   4049     }
   4050 }
   4051 
   4052 /* Describe the location of SYMBOL as an agent value in VALUE, generating
   4053    any necessary bytecode in AX.  */
   4054 static void
   4055 loclist_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
   4056 			    struct axs_value *value)
   4057 {
   4058   struct dwarf2_loclist_baton *dlbaton
   4059     = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (symbol);
   4060   const gdb_byte *data;
   4061   size_t size;
   4062   unsigned int addr_size = dlbaton->per_cu->addr_size ();
   4063 
   4064   data = dwarf2_find_location_expression (dlbaton, &size, ax->scope);
   4065   if (size == 0)
   4066     value->optimized_out = 1;
   4067   else
   4068     dwarf2_compile_expr_to_ax (ax, value, addr_size, data, data + size,
   4069 			       dlbaton->per_cu, dlbaton->per_objfile);
   4070 }
   4071 
   4072 /* symbol_computed_ops 'generate_c_location' method.  */
   4073 
   4074 static void
   4075 loclist_generate_c_location (struct symbol *sym, string_file *stream,
   4076 			     struct gdbarch *gdbarch,
   4077 			     std::vector<bool> &registers_used,
   4078 			     CORE_ADDR pc, const char *result_name)
   4079 {
   4080   struct dwarf2_loclist_baton *dlbaton
   4081     = (struct dwarf2_loclist_baton *) SYMBOL_LOCATION_BATON (sym);
   4082   unsigned int addr_size = dlbaton->per_cu->addr_size ();
   4083   const gdb_byte *data;
   4084   size_t size;
   4085 
   4086   data = dwarf2_find_location_expression (dlbaton, &size, pc);
   4087   if (size == 0)
   4088     error (_("symbol \"%s\" is optimized out"), sym->natural_name ());
   4089 
   4090   compile_dwarf_expr_to_c (stream, result_name,
   4091 			   sym, pc, gdbarch, registers_used, addr_size,
   4092 			   data, data + size,
   4093 			   dlbaton->per_cu,
   4094 			   dlbaton->per_objfile);
   4095 }
   4096 
   4097 /* The set of location functions used with the DWARF-2 expression
   4098    evaluator and location lists.  */
   4099 const struct symbol_computed_ops dwarf2_loclist_funcs = {
   4100   loclist_read_variable,
   4101   loclist_read_variable_at_entry,
   4102   loclist_symbol_needs,
   4103   loclist_describe_location,
   4104   1,	/* location_has_loclist */
   4105   loclist_tracepoint_var_ref,
   4106   loclist_generate_c_location
   4107 };
   4108 
   4109 void _initialize_dwarf2loc ();
   4110 void
   4111 _initialize_dwarf2loc ()
   4112 {
   4113   add_setshow_zuinteger_cmd ("entry-values", class_maintenance,
   4114 			     &entry_values_debug,
   4115 			     _("Set entry values and tail call frames "
   4116 			       "debugging."),
   4117 			     _("Show entry values and tail call frames "
   4118 			       "debugging."),
   4119 			     _("When non-zero, the process of determining "
   4120 			       "parameter values from function entry point "
   4121 			       "and tail call frames will be printed."),
   4122 			     NULL,
   4123 			     show_entry_values_debug,
   4124 			     &setdebuglist, &showdebuglist);
   4125 
   4126   add_setshow_boolean_cmd ("always-disassemble", class_obscure,
   4127 			   &dwarf_always_disassemble, _("\
   4128 Set whether `info address' always disassembles DWARF expressions."), _("\
   4129 Show whether `info address' always disassembles DWARF expressions."), _("\
   4130 When enabled, DWARF expressions are always printed in an assembly-like\n\
   4131 syntax.  When disabled, expressions will be printed in a more\n\
   4132 conversational style, when possible."),
   4133 			   NULL,
   4134 			   show_dwarf_always_disassemble,
   4135 			   &set_dwarf_cmdlist,
   4136 			   &show_dwarf_cmdlist);
   4137 }
   4138