1 /* Target-dependent code for the HP PA architecture, for GDB. 2 3 Copyright 1986, 1987, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 4 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software 5 Foundation, Inc. 6 7 Contributed by the Center for Software Science at the 8 University of Utah (pa-gdb-bugs@cs.utah.edu). 9 10 This file is part of GDB. 11 12 This program is free software; you can redistribute it and/or modify 13 it under the terms of the GNU General Public License as published by 14 the Free Software Foundation; either version 2 of the License, or 15 (at your option) any later version. 16 17 This program is distributed in the hope that it will be useful, 18 but WITHOUT ANY WARRANTY; without even the implied warranty of 19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 GNU General Public License for more details. 21 22 You should have received a copy of the GNU General Public License 23 along with this program; if not, write to the Free Software 24 Foundation, Inc., 59 Temple Place - Suite 330, 25 Boston, MA 02111-1307, USA. */ 26 27 #include "defs.h" 28 #include "bfd.h" 29 #include "inferior.h" 30 #include "regcache.h" 31 #include "completer.h" 32 #include "osabi.h" 33 #include "gdb_assert.h" 34 #include "arch-utils.h" 35 /* For argument passing to the inferior */ 36 #include "symtab.h" 37 #include "dis-asm.h" 38 #include "trad-frame.h" 39 #include "frame-unwind.h" 40 #include "frame-base.h" 41 42 #include "gdbcore.h" 43 #include "gdbcmd.h" 44 #include "objfiles.h" 45 #include "hppa-tdep.h" 46 47 static int hppa_debug = 0; 48 49 /* Some local constants. */ 50 static const int hppa32_num_regs = 128; 51 static const int hppa64_num_regs = 96; 52 53 /* hppa-specific object data -- unwind and solib info. 54 TODO/maybe: think about splitting this into two parts; the unwind data is 55 common to all hppa targets, but is only used in this file; we can register 56 that separately and make this static. The solib data is probably hpux- 57 specific, so we can create a separate extern objfile_data that is registered 58 by hppa-hpux-tdep.c and shared with pa64solib.c and somsolib.c. */ 59 const struct objfile_data *hppa_objfile_priv_data = NULL; 60 61 /* Get at various relevent fields of an instruction word. */ 62 #define MASK_5 0x1f 63 #define MASK_11 0x7ff 64 #define MASK_14 0x3fff 65 #define MASK_21 0x1fffff 66 67 /* Sizes (in bytes) of the native unwind entries. */ 68 #define UNWIND_ENTRY_SIZE 16 69 #define STUB_UNWIND_ENTRY_SIZE 8 70 71 /* FIXME: brobecker 2002-11-07: We will likely be able to make the 72 following functions static, once we hppa is partially multiarched. */ 73 int hppa_pc_requires_run_before_use (CORE_ADDR pc); 74 int hppa_instruction_nullified (void); 75 76 /* Handle 32/64-bit struct return conventions. */ 77 78 static enum return_value_convention 79 hppa32_return_value (struct gdbarch *gdbarch, 80 struct type *type, struct regcache *regcache, 81 void *readbuf, const void *writebuf) 82 { 83 if (TYPE_LENGTH (type) <= 2 * 4) 84 { 85 /* The value always lives in the right hand end of the register 86 (or register pair)? */ 87 int b; 88 int reg = TYPE_CODE (type) == TYPE_CODE_FLT ? HPPA_FP4_REGNUM : 28; 89 int part = TYPE_LENGTH (type) % 4; 90 /* The left hand register contains only part of the value, 91 transfer that first so that the rest can be xfered as entire 92 4-byte registers. */ 93 if (part > 0) 94 { 95 if (readbuf != NULL) 96 regcache_cooked_read_part (regcache, reg, 4 - part, 97 part, readbuf); 98 if (writebuf != NULL) 99 regcache_cooked_write_part (regcache, reg, 4 - part, 100 part, writebuf); 101 reg++; 102 } 103 /* Now transfer the remaining register values. */ 104 for (b = part; b < TYPE_LENGTH (type); b += 4) 105 { 106 if (readbuf != NULL) 107 regcache_cooked_read (regcache, reg, (char *) readbuf + b); 108 if (writebuf != NULL) 109 regcache_cooked_write (regcache, reg, (const char *) writebuf + b); 110 reg++; 111 } 112 return RETURN_VALUE_REGISTER_CONVENTION; 113 } 114 else 115 return RETURN_VALUE_STRUCT_CONVENTION; 116 } 117 118 static enum return_value_convention 119 hppa64_return_value (struct gdbarch *gdbarch, 120 struct type *type, struct regcache *regcache, 121 void *readbuf, const void *writebuf) 122 { 123 /* RM: Floats are returned in FR4R, doubles in FR4. Integral values 124 are in r28, padded on the left. Aggregates less that 65 bits are 125 in r28, right padded. Aggregates upto 128 bits are in r28 and 126 r29, right padded. */ 127 if (TYPE_CODE (type) == TYPE_CODE_FLT 128 && TYPE_LENGTH (type) <= 8) 129 { 130 /* Floats are right aligned? */ 131 int offset = register_size (gdbarch, HPPA_FP4_REGNUM) - TYPE_LENGTH (type); 132 if (readbuf != NULL) 133 regcache_cooked_read_part (regcache, HPPA_FP4_REGNUM, offset, 134 TYPE_LENGTH (type), readbuf); 135 if (writebuf != NULL) 136 regcache_cooked_write_part (regcache, HPPA_FP4_REGNUM, offset, 137 TYPE_LENGTH (type), writebuf); 138 return RETURN_VALUE_REGISTER_CONVENTION; 139 } 140 else if (TYPE_LENGTH (type) <= 8 && is_integral_type (type)) 141 { 142 /* Integrals are right aligned. */ 143 int offset = register_size (gdbarch, HPPA_FP4_REGNUM) - TYPE_LENGTH (type); 144 if (readbuf != NULL) 145 regcache_cooked_read_part (regcache, 28, offset, 146 TYPE_LENGTH (type), readbuf); 147 if (writebuf != NULL) 148 regcache_cooked_write_part (regcache, 28, offset, 149 TYPE_LENGTH (type), writebuf); 150 return RETURN_VALUE_REGISTER_CONVENTION; 151 } 152 else if (TYPE_LENGTH (type) <= 2 * 8) 153 { 154 /* Composite values are left aligned. */ 155 int b; 156 for (b = 0; b < TYPE_LENGTH (type); b += 8) 157 { 158 int part = min (8, TYPE_LENGTH (type) - b); 159 if (readbuf != NULL) 160 regcache_cooked_read_part (regcache, 28 + b / 8, 0, part, 161 (char *) readbuf + b); 162 if (writebuf != NULL) 163 regcache_cooked_write_part (regcache, 28 + b / 8, 0, part, 164 (const char *) writebuf + b); 165 } 166 return RETURN_VALUE_REGISTER_CONVENTION; 167 } 168 else 169 return RETURN_VALUE_STRUCT_CONVENTION; 170 } 171 172 /* Routines to extract various sized constants out of hppa 173 instructions. */ 174 175 /* This assumes that no garbage lies outside of the lower bits of 176 value. */ 177 178 int 179 hppa_sign_extend (unsigned val, unsigned bits) 180 { 181 return (int) (val >> (bits - 1) ? (-1 << bits) | val : val); 182 } 183 184 /* For many immediate values the sign bit is the low bit! */ 185 186 int 187 hppa_low_hppa_sign_extend (unsigned val, unsigned bits) 188 { 189 return (int) ((val & 0x1 ? (-1 << (bits - 1)) : 0) | val >> 1); 190 } 191 192 /* Extract the bits at positions between FROM and TO, using HP's numbering 193 (MSB = 0). */ 194 195 int 196 hppa_get_field (unsigned word, int from, int to) 197 { 198 return ((word) >> (31 - (to)) & ((1 << ((to) - (from) + 1)) - 1)); 199 } 200 201 /* extract the immediate field from a ld{bhw}s instruction */ 202 203 int 204 hppa_extract_5_load (unsigned word) 205 { 206 return hppa_low_hppa_sign_extend (word >> 16 & MASK_5, 5); 207 } 208 209 /* extract the immediate field from a break instruction */ 210 211 unsigned 212 hppa_extract_5r_store (unsigned word) 213 { 214 return (word & MASK_5); 215 } 216 217 /* extract the immediate field from a {sr}sm instruction */ 218 219 unsigned 220 hppa_extract_5R_store (unsigned word) 221 { 222 return (word >> 16 & MASK_5); 223 } 224 225 /* extract a 14 bit immediate field */ 226 227 int 228 hppa_extract_14 (unsigned word) 229 { 230 return hppa_low_hppa_sign_extend (word & MASK_14, 14); 231 } 232 233 /* extract a 21 bit constant */ 234 235 int 236 hppa_extract_21 (unsigned word) 237 { 238 int val; 239 240 word &= MASK_21; 241 word <<= 11; 242 val = hppa_get_field (word, 20, 20); 243 val <<= 11; 244 val |= hppa_get_field (word, 9, 19); 245 val <<= 2; 246 val |= hppa_get_field (word, 5, 6); 247 val <<= 5; 248 val |= hppa_get_field (word, 0, 4); 249 val <<= 2; 250 val |= hppa_get_field (word, 7, 8); 251 return hppa_sign_extend (val, 21) << 11; 252 } 253 254 /* extract a 17 bit constant from branch instructions, returning the 255 19 bit signed value. */ 256 257 int 258 hppa_extract_17 (unsigned word) 259 { 260 return hppa_sign_extend (hppa_get_field (word, 19, 28) | 261 hppa_get_field (word, 29, 29) << 10 | 262 hppa_get_field (word, 11, 15) << 11 | 263 (word & 0x1) << 16, 17) << 2; 264 } 265 266 CORE_ADDR 267 hppa_symbol_address(const char *sym) 268 { 269 struct minimal_symbol *minsym; 270 271 minsym = lookup_minimal_symbol (sym, NULL, NULL); 272 if (minsym) 273 return SYMBOL_VALUE_ADDRESS (minsym); 274 else 275 return (CORE_ADDR)-1; 276 } 277 278 279 /* Compare the start address for two unwind entries returning 1 if 280 the first address is larger than the second, -1 if the second is 281 larger than the first, and zero if they are equal. */ 282 283 static int 284 compare_unwind_entries (const void *arg1, const void *arg2) 285 { 286 const struct unwind_table_entry *a = arg1; 287 const struct unwind_table_entry *b = arg2; 288 289 if (a->region_start > b->region_start) 290 return 1; 291 else if (a->region_start < b->region_start) 292 return -1; 293 else 294 return 0; 295 } 296 297 static void 298 record_text_segment_lowaddr (bfd *abfd, asection *section, void *data) 299 { 300 if ((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) 301 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) 302 { 303 bfd_vma value = section->vma - section->filepos; 304 CORE_ADDR *low_text_segment_address = (CORE_ADDR *)data; 305 306 if (value < *low_text_segment_address) 307 *low_text_segment_address = value; 308 } 309 } 310 311 static void 312 internalize_unwinds (struct objfile *objfile, struct unwind_table_entry *table, 313 asection *section, unsigned int entries, unsigned int size, 314 CORE_ADDR text_offset) 315 { 316 /* We will read the unwind entries into temporary memory, then 317 fill in the actual unwind table. */ 318 319 if (size > 0) 320 { 321 unsigned long tmp; 322 unsigned i; 323 char *buf = alloca (size); 324 CORE_ADDR low_text_segment_address; 325 326 /* For ELF targets, then unwinds are supposed to 327 be segment relative offsets instead of absolute addresses. 328 329 Note that when loading a shared library (text_offset != 0) the 330 unwinds are already relative to the text_offset that will be 331 passed in. */ 332 if (gdbarch_tdep (current_gdbarch)->is_elf && text_offset == 0) 333 { 334 low_text_segment_address = -1; 335 336 bfd_map_over_sections (objfile->obfd, 337 record_text_segment_lowaddr, 338 &low_text_segment_address); 339 340 text_offset = low_text_segment_address; 341 } 342 343 bfd_get_section_contents (objfile->obfd, section, buf, 0, size); 344 345 /* Now internalize the information being careful to handle host/target 346 endian issues. */ 347 for (i = 0; i < entries; i++) 348 { 349 table[i].region_start = bfd_get_32 (objfile->obfd, 350 (bfd_byte *) buf); 351 table[i].region_start += text_offset; 352 buf += 4; 353 table[i].region_end = bfd_get_32 (objfile->obfd, (bfd_byte *) buf); 354 table[i].region_end += text_offset; 355 buf += 4; 356 tmp = bfd_get_32 (objfile->obfd, (bfd_byte *) buf); 357 buf += 4; 358 table[i].Cannot_unwind = (tmp >> 31) & 0x1; 359 table[i].Millicode = (tmp >> 30) & 0x1; 360 table[i].Millicode_save_sr0 = (tmp >> 29) & 0x1; 361 table[i].Region_description = (tmp >> 27) & 0x3; 362 table[i].reserved1 = (tmp >> 26) & 0x1; 363 table[i].Entry_SR = (tmp >> 25) & 0x1; 364 table[i].Entry_FR = (tmp >> 21) & 0xf; 365 table[i].Entry_GR = (tmp >> 16) & 0x1f; 366 table[i].Args_stored = (tmp >> 15) & 0x1; 367 table[i].Variable_Frame = (tmp >> 14) & 0x1; 368 table[i].Separate_Package_Body = (tmp >> 13) & 0x1; 369 table[i].Frame_Extension_Millicode = (tmp >> 12) & 0x1; 370 table[i].Stack_Overflow_Check = (tmp >> 11) & 0x1; 371 table[i].Two_Instruction_SP_Increment = (tmp >> 10) & 0x1; 372 table[i].Ada_Region = (tmp >> 9) & 0x1; 373 table[i].cxx_info = (tmp >> 8) & 0x1; 374 table[i].cxx_try_catch = (tmp >> 7) & 0x1; 375 table[i].sched_entry_seq = (tmp >> 6) & 0x1; 376 table[i].reserved2 = (tmp >> 5) & 0x1; 377 table[i].Save_SP = (tmp >> 4) & 0x1; 378 table[i].Save_RP = (tmp >> 3) & 0x1; 379 table[i].Save_MRP_in_frame = (tmp >> 2) & 0x1; 380 table[i].extn_ptr_defined = (tmp >> 1) & 0x1; 381 table[i].Cleanup_defined = tmp & 0x1; 382 tmp = bfd_get_32 (objfile->obfd, (bfd_byte *) buf); 383 buf += 4; 384 table[i].MPE_XL_interrupt_marker = (tmp >> 31) & 0x1; 385 table[i].HP_UX_interrupt_marker = (tmp >> 30) & 0x1; 386 table[i].Large_frame = (tmp >> 29) & 0x1; 387 table[i].Pseudo_SP_Set = (tmp >> 28) & 0x1; 388 table[i].reserved4 = (tmp >> 27) & 0x1; 389 table[i].Total_frame_size = tmp & 0x7ffffff; 390 391 /* Stub unwinds are handled elsewhere. */ 392 table[i].stub_unwind.stub_type = 0; 393 table[i].stub_unwind.padding = 0; 394 } 395 } 396 } 397 398 /* Read in the backtrace information stored in the `$UNWIND_START$' section of 399 the object file. This info is used mainly by find_unwind_entry() to find 400 out the stack frame size and frame pointer used by procedures. We put 401 everything on the psymbol obstack in the objfile so that it automatically 402 gets freed when the objfile is destroyed. */ 403 404 static void 405 read_unwind_info (struct objfile *objfile) 406 { 407 asection *unwind_sec, *stub_unwind_sec; 408 unsigned unwind_size, stub_unwind_size, total_size; 409 unsigned index, unwind_entries; 410 unsigned stub_entries, total_entries; 411 CORE_ADDR text_offset; 412 struct hppa_unwind_info *ui; 413 struct hppa_objfile_private *obj_private; 414 415 text_offset = ANOFFSET (objfile->section_offsets, 0); 416 ui = (struct hppa_unwind_info *) obstack_alloc (&objfile->objfile_obstack, 417 sizeof (struct hppa_unwind_info)); 418 419 ui->table = NULL; 420 ui->cache = NULL; 421 ui->last = -1; 422 423 /* For reasons unknown the HP PA64 tools generate multiple unwinder 424 sections in a single executable. So we just iterate over every 425 section in the BFD looking for unwinder sections intead of trying 426 to do a lookup with bfd_get_section_by_name. 427 428 First determine the total size of the unwind tables so that we 429 can allocate memory in a nice big hunk. */ 430 total_entries = 0; 431 for (unwind_sec = objfile->obfd->sections; 432 unwind_sec; 433 unwind_sec = unwind_sec->next) 434 { 435 if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0 436 || strcmp (unwind_sec->name, ".PARISC.unwind") == 0) 437 { 438 unwind_size = bfd_section_size (objfile->obfd, unwind_sec); 439 unwind_entries = unwind_size / UNWIND_ENTRY_SIZE; 440 441 total_entries += unwind_entries; 442 } 443 } 444 445 /* Now compute the size of the stub unwinds. Note the ELF tools do not 446 use stub unwinds at the curren time. */ 447 stub_unwind_sec = bfd_get_section_by_name (objfile->obfd, "$UNWIND_END$"); 448 449 if (stub_unwind_sec) 450 { 451 stub_unwind_size = bfd_section_size (objfile->obfd, stub_unwind_sec); 452 stub_entries = stub_unwind_size / STUB_UNWIND_ENTRY_SIZE; 453 } 454 else 455 { 456 stub_unwind_size = 0; 457 stub_entries = 0; 458 } 459 460 /* Compute total number of unwind entries and their total size. */ 461 total_entries += stub_entries; 462 total_size = total_entries * sizeof (struct unwind_table_entry); 463 464 /* Allocate memory for the unwind table. */ 465 ui->table = (struct unwind_table_entry *) 466 obstack_alloc (&objfile->objfile_obstack, total_size); 467 ui->last = total_entries - 1; 468 469 /* Now read in each unwind section and internalize the standard unwind 470 entries. */ 471 index = 0; 472 for (unwind_sec = objfile->obfd->sections; 473 unwind_sec; 474 unwind_sec = unwind_sec->next) 475 { 476 if (strcmp (unwind_sec->name, "$UNWIND_START$") == 0 477 || strcmp (unwind_sec->name, ".PARISC.unwind") == 0) 478 { 479 unwind_size = bfd_section_size (objfile->obfd, unwind_sec); 480 unwind_entries = unwind_size / UNWIND_ENTRY_SIZE; 481 482 internalize_unwinds (objfile, &ui->table[index], unwind_sec, 483 unwind_entries, unwind_size, text_offset); 484 index += unwind_entries; 485 } 486 } 487 488 /* Now read in and internalize the stub unwind entries. */ 489 if (stub_unwind_size > 0) 490 { 491 unsigned int i; 492 char *buf = alloca (stub_unwind_size); 493 494 /* Read in the stub unwind entries. */ 495 bfd_get_section_contents (objfile->obfd, stub_unwind_sec, buf, 496 0, stub_unwind_size); 497 498 /* Now convert them into regular unwind entries. */ 499 for (i = 0; i < stub_entries; i++, index++) 500 { 501 /* Clear out the next unwind entry. */ 502 memset (&ui->table[index], 0, sizeof (struct unwind_table_entry)); 503 504 /* Convert offset & size into region_start and region_end. 505 Stuff away the stub type into "reserved" fields. */ 506 ui->table[index].region_start = bfd_get_32 (objfile->obfd, 507 (bfd_byte *) buf); 508 ui->table[index].region_start += text_offset; 509 buf += 4; 510 ui->table[index].stub_unwind.stub_type = bfd_get_8 (objfile->obfd, 511 (bfd_byte *) buf); 512 buf += 2; 513 ui->table[index].region_end 514 = ui->table[index].region_start + 4 * 515 (bfd_get_16 (objfile->obfd, (bfd_byte *) buf) - 1); 516 buf += 2; 517 } 518 519 } 520 521 /* Unwind table needs to be kept sorted. */ 522 qsort (ui->table, total_entries, sizeof (struct unwind_table_entry), 523 compare_unwind_entries); 524 525 /* Keep a pointer to the unwind information. */ 526 obj_private = (struct hppa_objfile_private *) 527 objfile_data (objfile, hppa_objfile_priv_data); 528 if (obj_private == NULL) 529 { 530 obj_private = (struct hppa_objfile_private *) 531 obstack_alloc (&objfile->objfile_obstack, 532 sizeof (struct hppa_objfile_private)); 533 set_objfile_data (objfile, hppa_objfile_priv_data, obj_private); 534 obj_private->unwind_info = NULL; 535 obj_private->so_info = NULL; 536 obj_private->dp = 0; 537 } 538 obj_private->unwind_info = ui; 539 } 540 541 /* Lookup the unwind (stack backtrace) info for the given PC. We search all 542 of the objfiles seeking the unwind table entry for this PC. Each objfile 543 contains a sorted list of struct unwind_table_entry. Since we do a binary 544 search of the unwind tables, we depend upon them to be sorted. */ 545 546 struct unwind_table_entry * 547 find_unwind_entry (CORE_ADDR pc) 548 { 549 int first, middle, last; 550 struct objfile *objfile; 551 struct hppa_objfile_private *priv; 552 553 if (hppa_debug) 554 fprintf_unfiltered (gdb_stdlog, "{ find_unwind_entry 0x%s -> ", 555 paddr_nz (pc)); 556 557 /* A function at address 0? Not in HP-UX! */ 558 if (pc == (CORE_ADDR) 0) 559 { 560 if (hppa_debug) 561 fprintf_unfiltered (gdb_stdlog, "NULL }\n"); 562 return NULL; 563 } 564 565 ALL_OBJFILES (objfile) 566 { 567 struct hppa_unwind_info *ui; 568 ui = NULL; 569 priv = objfile_data (objfile, hppa_objfile_priv_data); 570 if (priv) 571 ui = ((struct hppa_objfile_private *) priv)->unwind_info; 572 573 if (!ui) 574 { 575 read_unwind_info (objfile); 576 priv = objfile_data (objfile, hppa_objfile_priv_data); 577 if (priv == NULL) 578 error ("Internal error reading unwind information."); 579 ui = ((struct hppa_objfile_private *) priv)->unwind_info; 580 } 581 582 /* First, check the cache */ 583 584 if (ui->cache 585 && pc >= ui->cache->region_start 586 && pc <= ui->cache->region_end) 587 { 588 if (hppa_debug) 589 fprintf_unfiltered (gdb_stdlog, "0x%s (cached) }\n", 590 paddr_nz ((CORE_ADDR) ui->cache)); 591 return ui->cache; 592 } 593 594 /* Not in the cache, do a binary search */ 595 596 first = 0; 597 last = ui->last; 598 599 while (first <= last) 600 { 601 middle = (first + last) / 2; 602 if (pc >= ui->table[middle].region_start 603 && pc <= ui->table[middle].region_end) 604 { 605 ui->cache = &ui->table[middle]; 606 if (hppa_debug) 607 fprintf_unfiltered (gdb_stdlog, "0x%s }\n", 608 paddr_nz ((CORE_ADDR) ui->cache)); 609 return &ui->table[middle]; 610 } 611 612 if (pc < ui->table[middle].region_start) 613 last = middle - 1; 614 else 615 first = middle + 1; 616 } 617 } /* ALL_OBJFILES() */ 618 619 if (hppa_debug) 620 fprintf_unfiltered (gdb_stdlog, "NULL (not found) }\n"); 621 622 return NULL; 623 } 624 625 static const unsigned char * 626 hppa_breakpoint_from_pc (CORE_ADDR *pc, int *len) 627 { 628 static const unsigned char breakpoint[] = {0x00, 0x01, 0x00, 0x04}; 629 (*len) = sizeof (breakpoint); 630 return breakpoint; 631 } 632 633 /* Return the name of a register. */ 634 635 const char * 636 hppa32_register_name (int i) 637 { 638 static char *names[] = { 639 "flags", "r1", "rp", "r3", 640 "r4", "r5", "r6", "r7", 641 "r8", "r9", "r10", "r11", 642 "r12", "r13", "r14", "r15", 643 "r16", "r17", "r18", "r19", 644 "r20", "r21", "r22", "r23", 645 "r24", "r25", "r26", "dp", 646 "ret0", "ret1", "sp", "r31", 647 "sar", "pcoqh", "pcsqh", "pcoqt", 648 "pcsqt", "eiem", "iir", "isr", 649 "ior", "ipsw", "goto", "sr4", 650 "sr0", "sr1", "sr2", "sr3", 651 "sr5", "sr6", "sr7", "cr0", 652 "cr8", "cr9", "ccr", "cr12", 653 "cr13", "cr24", "cr25", "cr26", 654 "mpsfu_high","mpsfu_low","mpsfu_ovflo","pad", 655 "fpsr", "fpe1", "fpe2", "fpe3", 656 "fpe4", "fpe5", "fpe6", "fpe7", 657 "fr4", "fr4R", "fr5", "fr5R", 658 "fr6", "fr6R", "fr7", "fr7R", 659 "fr8", "fr8R", "fr9", "fr9R", 660 "fr10", "fr10R", "fr11", "fr11R", 661 "fr12", "fr12R", "fr13", "fr13R", 662 "fr14", "fr14R", "fr15", "fr15R", 663 "fr16", "fr16R", "fr17", "fr17R", 664 "fr18", "fr18R", "fr19", "fr19R", 665 "fr20", "fr20R", "fr21", "fr21R", 666 "fr22", "fr22R", "fr23", "fr23R", 667 "fr24", "fr24R", "fr25", "fr25R", 668 "fr26", "fr26R", "fr27", "fr27R", 669 "fr28", "fr28R", "fr29", "fr29R", 670 "fr30", "fr30R", "fr31", "fr31R" 671 }; 672 if (i < 0 || i >= (sizeof (names) / sizeof (*names))) 673 return NULL; 674 else 675 return names[i]; 676 } 677 678 const char * 679 hppa64_register_name (int i) 680 { 681 static char *names[] = { 682 "flags", "r1", "rp", "r3", 683 "r4", "r5", "r6", "r7", 684 "r8", "r9", "r10", "r11", 685 "r12", "r13", "r14", "r15", 686 "r16", "r17", "r18", "r19", 687 "r20", "r21", "r22", "r23", 688 "r24", "r25", "r26", "dp", 689 "ret0", "ret1", "sp", "r31", 690 "sar", "pcoqh", "pcsqh", "pcoqt", 691 "pcsqt", "eiem", "iir", "isr", 692 "ior", "ipsw", "goto", "sr4", 693 "sr0", "sr1", "sr2", "sr3", 694 "sr5", "sr6", "sr7", "cr0", 695 "cr8", "cr9", "ccr", "cr12", 696 "cr13", "cr24", "cr25", "cr26", 697 "mpsfu_high","mpsfu_low","mpsfu_ovflo","pad", 698 "fpsr", "fpe1", "fpe2", "fpe3", 699 "fr4", "fr5", "fr6", "fr7", 700 "fr8", "fr9", "fr10", "fr11", 701 "fr12", "fr13", "fr14", "fr15", 702 "fr16", "fr17", "fr18", "fr19", 703 "fr20", "fr21", "fr22", "fr23", 704 "fr24", "fr25", "fr26", "fr27", 705 "fr28", "fr29", "fr30", "fr31" 706 }; 707 if (i < 0 || i >= (sizeof (names) / sizeof (*names))) 708 return NULL; 709 else 710 return names[i]; 711 } 712 713 /* This function pushes a stack frame with arguments as part of the 714 inferior function calling mechanism. 715 716 This is the version of the function for the 32-bit PA machines, in 717 which later arguments appear at lower addresses. (The stack always 718 grows towards higher addresses.) 719 720 We simply allocate the appropriate amount of stack space and put 721 arguments into their proper slots. */ 722 723 CORE_ADDR 724 hppa32_push_dummy_call (struct gdbarch *gdbarch, struct value *function, 725 struct regcache *regcache, CORE_ADDR bp_addr, 726 int nargs, struct value **args, CORE_ADDR sp, 727 int struct_return, CORE_ADDR struct_addr) 728 { 729 /* Stack base address at which any pass-by-reference parameters are 730 stored. */ 731 CORE_ADDR struct_end = 0; 732 /* Stack base address at which the first parameter is stored. */ 733 CORE_ADDR param_end = 0; 734 735 /* The inner most end of the stack after all the parameters have 736 been pushed. */ 737 CORE_ADDR new_sp = 0; 738 739 /* Two passes. First pass computes the location of everything, 740 second pass writes the bytes out. */ 741 int write_pass; 742 743 /* Global pointer (r19) of the function we are trying to call. */ 744 CORE_ADDR gp; 745 746 struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); 747 748 for (write_pass = 0; write_pass < 2; write_pass++) 749 { 750 CORE_ADDR struct_ptr = 0; 751 /* The first parameter goes into sp-36, each stack slot is 4-bytes. 752 struct_ptr is adjusted for each argument below, so the first 753 argument will end up at sp-36. */ 754 CORE_ADDR param_ptr = 32; 755 int i; 756 int small_struct = 0; 757 758 for (i = 0; i < nargs; i++) 759 { 760 struct value *arg = args[i]; 761 struct type *type = check_typedef (VALUE_TYPE (arg)); 762 /* The corresponding parameter that is pushed onto the 763 stack, and [possibly] passed in a register. */ 764 char param_val[8]; 765 int param_len; 766 memset (param_val, 0, sizeof param_val); 767 if (TYPE_LENGTH (type) > 8) 768 { 769 /* Large parameter, pass by reference. Store the value 770 in "struct" area and then pass its address. */ 771 param_len = 4; 772 struct_ptr += align_up (TYPE_LENGTH (type), 8); 773 if (write_pass) 774 write_memory (struct_end - struct_ptr, VALUE_CONTENTS (arg), 775 TYPE_LENGTH (type)); 776 store_unsigned_integer (param_val, 4, struct_end - struct_ptr); 777 } 778 else if (TYPE_CODE (type) == TYPE_CODE_INT 779 || TYPE_CODE (type) == TYPE_CODE_ENUM) 780 { 781 /* Integer value store, right aligned. "unpack_long" 782 takes care of any sign-extension problems. */ 783 param_len = align_up (TYPE_LENGTH (type), 4); 784 store_unsigned_integer (param_val, param_len, 785 unpack_long (type, 786 VALUE_CONTENTS (arg))); 787 } 788 else if (TYPE_CODE (type) == TYPE_CODE_FLT) 789 { 790 /* Floating point value store, right aligned. */ 791 param_len = align_up (TYPE_LENGTH (type), 4); 792 memcpy (param_val, VALUE_CONTENTS (arg), param_len); 793 } 794 else 795 { 796 param_len = align_up (TYPE_LENGTH (type), 4); 797 798 /* Small struct value are stored right-aligned. */ 799 memcpy (param_val + param_len - TYPE_LENGTH (type), 800 VALUE_CONTENTS (arg), TYPE_LENGTH (type)); 801 802 /* Structures of size 5, 6 and 7 bytes are special in that 803 the higher-ordered word is stored in the lower-ordered 804 argument, and even though it is a 8-byte quantity the 805 registers need not be 8-byte aligned. */ 806 if (param_len > 4 && param_len < 8) 807 small_struct = 1; 808 } 809 810 param_ptr += param_len; 811 if (param_len == 8 && !small_struct) 812 param_ptr = align_up (param_ptr, 8); 813 814 /* First 4 non-FP arguments are passed in gr26-gr23. 815 First 4 32-bit FP arguments are passed in fr4L-fr7L. 816 First 2 64-bit FP arguments are passed in fr5 and fr7. 817 818 The rest go on the stack, starting at sp-36, towards lower 819 addresses. 8-byte arguments must be aligned to a 8-byte 820 stack boundary. */ 821 if (write_pass) 822 { 823 write_memory (param_end - param_ptr, param_val, param_len); 824 825 /* There are some cases when we don't know the type 826 expected by the callee (e.g. for variadic functions), so 827 pass the parameters in both general and fp regs. */ 828 if (param_ptr <= 48) 829 { 830 int grreg = 26 - (param_ptr - 36) / 4; 831 int fpLreg = 72 + (param_ptr - 36) / 4 * 2; 832 int fpreg = 74 + (param_ptr - 32) / 8 * 4; 833 834 regcache_cooked_write (regcache, grreg, param_val); 835 regcache_cooked_write (regcache, fpLreg, param_val); 836 837 if (param_len > 4) 838 { 839 regcache_cooked_write (regcache, grreg + 1, 840 param_val + 4); 841 842 regcache_cooked_write (regcache, fpreg, param_val); 843 regcache_cooked_write (regcache, fpreg + 1, 844 param_val + 4); 845 } 846 } 847 } 848 } 849 850 /* Update the various stack pointers. */ 851 if (!write_pass) 852 { 853 struct_end = sp + align_up (struct_ptr, 64); 854 /* PARAM_PTR already accounts for all the arguments passed 855 by the user. However, the ABI mandates minimum stack 856 space allocations for outgoing arguments. The ABI also 857 mandates minimum stack alignments which we must 858 preserve. */ 859 param_end = struct_end + align_up (param_ptr, 64); 860 } 861 } 862 863 /* If a structure has to be returned, set up register 28 to hold its 864 address */ 865 if (struct_return) 866 write_register (28, struct_addr); 867 868 gp = tdep->find_global_pointer (function); 869 870 if (gp != 0) 871 write_register (19, gp); 872 873 /* Set the return address. */ 874 regcache_cooked_write_unsigned (regcache, HPPA_RP_REGNUM, bp_addr); 875 876 /* Update the Stack Pointer. */ 877 regcache_cooked_write_unsigned (regcache, HPPA_SP_REGNUM, param_end); 878 879 return param_end; 880 } 881 882 /* This function pushes a stack frame with arguments as part of the 883 inferior function calling mechanism. 884 885 This is the version for the PA64, in which later arguments appear 886 at higher addresses. (The stack always grows towards higher 887 addresses.) 888 889 We simply allocate the appropriate amount of stack space and put 890 arguments into their proper slots. 891 892 This ABI also requires that the caller provide an argument pointer 893 to the callee, so we do that too. */ 894 895 CORE_ADDR 896 hppa64_push_dummy_call (struct gdbarch *gdbarch, struct value *function, 897 struct regcache *regcache, CORE_ADDR bp_addr, 898 int nargs, struct value **args, CORE_ADDR sp, 899 int struct_return, CORE_ADDR struct_addr) 900 { 901 /* NOTE: cagney/2004-02-27: This is a guess - its implemented by 902 reverse engineering testsuite failures. */ 903 904 /* Stack base address at which any pass-by-reference parameters are 905 stored. */ 906 CORE_ADDR struct_end = 0; 907 /* Stack base address at which the first parameter is stored. */ 908 CORE_ADDR param_end = 0; 909 910 /* The inner most end of the stack after all the parameters have 911 been pushed. */ 912 CORE_ADDR new_sp = 0; 913 914 /* Two passes. First pass computes the location of everything, 915 second pass writes the bytes out. */ 916 int write_pass; 917 for (write_pass = 0; write_pass < 2; write_pass++) 918 { 919 CORE_ADDR struct_ptr = 0; 920 CORE_ADDR param_ptr = 0; 921 int i; 922 for (i = 0; i < nargs; i++) 923 { 924 struct value *arg = args[i]; 925 struct type *type = check_typedef (VALUE_TYPE (arg)); 926 if ((TYPE_CODE (type) == TYPE_CODE_INT 927 || TYPE_CODE (type) == TYPE_CODE_ENUM) 928 && TYPE_LENGTH (type) <= 8) 929 { 930 /* Integer value store, right aligned. "unpack_long" 931 takes care of any sign-extension problems. */ 932 param_ptr += 8; 933 if (write_pass) 934 { 935 ULONGEST val = unpack_long (type, VALUE_CONTENTS (arg)); 936 int reg = 27 - param_ptr / 8; 937 write_memory_unsigned_integer (param_end - param_ptr, 938 val, 8); 939 if (reg >= 19) 940 regcache_cooked_write_unsigned (regcache, reg, val); 941 } 942 } 943 else 944 { 945 /* Small struct value, store left aligned? */ 946 int reg; 947 if (TYPE_LENGTH (type) > 8) 948 { 949 param_ptr = align_up (param_ptr, 16); 950 reg = 26 - param_ptr / 8; 951 param_ptr += align_up (TYPE_LENGTH (type), 16); 952 } 953 else 954 { 955 param_ptr = align_up (param_ptr, 8); 956 reg = 26 - param_ptr / 8; 957 param_ptr += align_up (TYPE_LENGTH (type), 8); 958 } 959 if (write_pass) 960 { 961 int byte; 962 write_memory (param_end - param_ptr, VALUE_CONTENTS (arg), 963 TYPE_LENGTH (type)); 964 for (byte = 0; byte < TYPE_LENGTH (type); byte += 8) 965 { 966 if (reg >= 19) 967 { 968 int len = min (8, TYPE_LENGTH (type) - byte); 969 regcache_cooked_write_part (regcache, reg, 0, len, 970 VALUE_CONTENTS (arg) + byte); 971 } 972 reg--; 973 } 974 } 975 } 976 } 977 /* Update the various stack pointers. */ 978 if (!write_pass) 979 { 980 struct_end = sp + struct_ptr; 981 /* PARAM_PTR already accounts for all the arguments passed 982 by the user. However, the ABI mandates minimum stack 983 space allocations for outgoing arguments. The ABI also 984 mandates minimum stack alignments which we must 985 preserve. */ 986 param_end = struct_end + max (align_up (param_ptr, 16), 64); 987 } 988 } 989 990 /* If a structure has to be returned, set up register 28 to hold its 991 address */ 992 if (struct_return) 993 write_register (28, struct_addr); 994 995 /* Set the return address. */ 996 regcache_cooked_write_unsigned (regcache, HPPA_RP_REGNUM, bp_addr); 997 998 /* Update the Stack Pointer. */ 999 regcache_cooked_write_unsigned (regcache, HPPA_SP_REGNUM, param_end + 64); 1000 1001 /* The stack will have 32 bytes of additional space for a frame marker. */ 1002 return param_end + 64; 1003 } 1004 1005 static CORE_ADDR 1006 hppa32_convert_from_func_ptr_addr (struct gdbarch *gdbarch, 1007 CORE_ADDR addr, 1008 struct target_ops *targ) 1009 { 1010 if (addr & 2) 1011 { 1012 CORE_ADDR plabel; 1013 1014 plabel = addr & ~3; 1015 target_read_memory(plabel, (char *)&addr, 4); 1016 } 1017 1018 return addr; 1019 } 1020 1021 static CORE_ADDR 1022 hppa32_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr) 1023 { 1024 /* HP frames are 64-byte (or cache line) aligned (yes that's _byte_ 1025 and not _bit_)! */ 1026 return align_up (addr, 64); 1027 } 1028 1029 /* Force all frames to 16-byte alignment. Better safe than sorry. */ 1030 1031 static CORE_ADDR 1032 hppa64_frame_align (struct gdbarch *gdbarch, CORE_ADDR addr) 1033 { 1034 /* Just always 16-byte align. */ 1035 return align_up (addr, 16); 1036 } 1037 1038 1039 /* Get the PC from %r31 if currently in a syscall. Also mask out privilege 1040 bits. */ 1041 1042 static CORE_ADDR 1043 hppa_target_read_pc (ptid_t ptid) 1044 { 1045 int flags = read_register_pid (HPPA_FLAGS_REGNUM, ptid); 1046 1047 /* The following test does not belong here. It is OS-specific, and belongs 1048 in native code. */ 1049 /* Test SS_INSYSCALL */ 1050 if (flags & 2) 1051 return read_register_pid (31, ptid) & ~0x3; 1052 1053 return read_register_pid (HPPA_PCOQ_HEAD_REGNUM, ptid) & ~0x3; 1054 } 1055 1056 /* Write out the PC. If currently in a syscall, then also write the new 1057 PC value into %r31. */ 1058 1059 static void 1060 hppa_target_write_pc (CORE_ADDR v, ptid_t ptid) 1061 { 1062 int flags = read_register_pid (HPPA_FLAGS_REGNUM, ptid); 1063 1064 /* The following test does not belong here. It is OS-specific, and belongs 1065 in native code. */ 1066 /* If in a syscall, then set %r31. Also make sure to get the 1067 privilege bits set correctly. */ 1068 /* Test SS_INSYSCALL */ 1069 if (flags & 2) 1070 write_register_pid (31, v | 0x3, ptid); 1071 1072 write_register_pid (HPPA_PCOQ_HEAD_REGNUM, v, ptid); 1073 write_register_pid (HPPA_PCOQ_TAIL_REGNUM, v + 4, ptid); 1074 } 1075 1076 /* return the alignment of a type in bytes. Structures have the maximum 1077 alignment required by their fields. */ 1078 1079 static int 1080 hppa_alignof (struct type *type) 1081 { 1082 int max_align, align, i; 1083 CHECK_TYPEDEF (type); 1084 switch (TYPE_CODE (type)) 1085 { 1086 case TYPE_CODE_PTR: 1087 case TYPE_CODE_INT: 1088 case TYPE_CODE_FLT: 1089 return TYPE_LENGTH (type); 1090 case TYPE_CODE_ARRAY: 1091 return hppa_alignof (TYPE_FIELD_TYPE (type, 0)); 1092 case TYPE_CODE_STRUCT: 1093 case TYPE_CODE_UNION: 1094 max_align = 1; 1095 for (i = 0; i < TYPE_NFIELDS (type); i++) 1096 { 1097 /* Bit fields have no real alignment. */ 1098 /* if (!TYPE_FIELD_BITPOS (type, i)) */ 1099 if (!TYPE_FIELD_BITSIZE (type, i)) /* elz: this should be bitsize */ 1100 { 1101 align = hppa_alignof (TYPE_FIELD_TYPE (type, i)); 1102 max_align = max (max_align, align); 1103 } 1104 } 1105 return max_align; 1106 default: 1107 return 4; 1108 } 1109 } 1110 1111 /* For the given instruction (INST), return any adjustment it makes 1112 to the stack pointer or zero for no adjustment. 1113 1114 This only handles instructions commonly found in prologues. */ 1115 1116 static int 1117 prologue_inst_adjust_sp (unsigned long inst) 1118 { 1119 /* This must persist across calls. */ 1120 static int save_high21; 1121 1122 /* The most common way to perform a stack adjustment ldo X(sp),sp */ 1123 if ((inst & 0xffffc000) == 0x37de0000) 1124 return hppa_extract_14 (inst); 1125 1126 /* stwm X,D(sp) */ 1127 if ((inst & 0xffe00000) == 0x6fc00000) 1128 return hppa_extract_14 (inst); 1129 1130 /* std,ma X,D(sp) */ 1131 if ((inst & 0xffe00008) == 0x73c00008) 1132 return (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3); 1133 1134 /* addil high21,%r1; ldo low11,(%r1),%r30) 1135 save high bits in save_high21 for later use. */ 1136 if ((inst & 0xffe00000) == 0x28200000) 1137 { 1138 save_high21 = hppa_extract_21 (inst); 1139 return 0; 1140 } 1141 1142 if ((inst & 0xffff0000) == 0x343e0000) 1143 return save_high21 + hppa_extract_14 (inst); 1144 1145 /* fstws as used by the HP compilers. */ 1146 if ((inst & 0xffffffe0) == 0x2fd01220) 1147 return hppa_extract_5_load (inst); 1148 1149 /* No adjustment. */ 1150 return 0; 1151 } 1152 1153 /* Return nonzero if INST is a branch of some kind, else return zero. */ 1154 1155 static int 1156 is_branch (unsigned long inst) 1157 { 1158 switch (inst >> 26) 1159 { 1160 case 0x20: 1161 case 0x21: 1162 case 0x22: 1163 case 0x23: 1164 case 0x27: 1165 case 0x28: 1166 case 0x29: 1167 case 0x2a: 1168 case 0x2b: 1169 case 0x2f: 1170 case 0x30: 1171 case 0x31: 1172 case 0x32: 1173 case 0x33: 1174 case 0x38: 1175 case 0x39: 1176 case 0x3a: 1177 case 0x3b: 1178 return 1; 1179 1180 default: 1181 return 0; 1182 } 1183 } 1184 1185 /* Return the register number for a GR which is saved by INST or 1186 zero it INST does not save a GR. */ 1187 1188 static int 1189 inst_saves_gr (unsigned long inst) 1190 { 1191 /* Does it look like a stw? */ 1192 if ((inst >> 26) == 0x1a || (inst >> 26) == 0x1b 1193 || (inst >> 26) == 0x1f 1194 || ((inst >> 26) == 0x1f 1195 && ((inst >> 6) == 0xa))) 1196 return hppa_extract_5R_store (inst); 1197 1198 /* Does it look like a std? */ 1199 if ((inst >> 26) == 0x1c 1200 || ((inst >> 26) == 0x03 1201 && ((inst >> 6) & 0xf) == 0xb)) 1202 return hppa_extract_5R_store (inst); 1203 1204 /* Does it look like a stwm? GCC & HPC may use this in prologues. */ 1205 if ((inst >> 26) == 0x1b) 1206 return hppa_extract_5R_store (inst); 1207 1208 /* Does it look like sth or stb? HPC versions 9.0 and later use these 1209 too. */ 1210 if ((inst >> 26) == 0x19 || (inst >> 26) == 0x18 1211 || ((inst >> 26) == 0x3 1212 && (((inst >> 6) & 0xf) == 0x8 1213 || (inst >> 6) & 0xf) == 0x9)) 1214 return hppa_extract_5R_store (inst); 1215 1216 return 0; 1217 } 1218 1219 /* Return the register number for a FR which is saved by INST or 1220 zero it INST does not save a FR. 1221 1222 Note we only care about full 64bit register stores (that's the only 1223 kind of stores the prologue will use). 1224 1225 FIXME: What about argument stores with the HP compiler in ANSI mode? */ 1226 1227 static int 1228 inst_saves_fr (unsigned long inst) 1229 { 1230 /* is this an FSTD ? */ 1231 if ((inst & 0xfc00dfc0) == 0x2c001200) 1232 return hppa_extract_5r_store (inst); 1233 if ((inst & 0xfc000002) == 0x70000002) 1234 return hppa_extract_5R_store (inst); 1235 /* is this an FSTW ? */ 1236 if ((inst & 0xfc00df80) == 0x24001200) 1237 return hppa_extract_5r_store (inst); 1238 if ((inst & 0xfc000002) == 0x7c000000) 1239 return hppa_extract_5R_store (inst); 1240 return 0; 1241 } 1242 1243 /* Advance PC across any function entry prologue instructions 1244 to reach some "real" code. 1245 1246 Use information in the unwind table to determine what exactly should 1247 be in the prologue. */ 1248 1249 1250 CORE_ADDR 1251 skip_prologue_hard_way (CORE_ADDR pc) 1252 { 1253 char buf[4]; 1254 CORE_ADDR orig_pc = pc; 1255 unsigned long inst, stack_remaining, save_gr, save_fr, save_rp, save_sp; 1256 unsigned long args_stored, status, i, restart_gr, restart_fr; 1257 struct unwind_table_entry *u; 1258 1259 restart_gr = 0; 1260 restart_fr = 0; 1261 1262 restart: 1263 u = find_unwind_entry (pc); 1264 if (!u) 1265 return pc; 1266 1267 /* If we are not at the beginning of a function, then return now. */ 1268 if ((pc & ~0x3) != u->region_start) 1269 return pc; 1270 1271 /* This is how much of a frame adjustment we need to account for. */ 1272 stack_remaining = u->Total_frame_size << 3; 1273 1274 /* Magic register saves we want to know about. */ 1275 save_rp = u->Save_RP; 1276 save_sp = u->Save_SP; 1277 1278 /* An indication that args may be stored into the stack. Unfortunately 1279 the HPUX compilers tend to set this in cases where no args were 1280 stored too!. */ 1281 args_stored = 1; 1282 1283 /* Turn the Entry_GR field into a bitmask. */ 1284 save_gr = 0; 1285 for (i = 3; i < u->Entry_GR + 3; i++) 1286 { 1287 /* Frame pointer gets saved into a special location. */ 1288 if (u->Save_SP && i == HPPA_FP_REGNUM) 1289 continue; 1290 1291 save_gr |= (1 << i); 1292 } 1293 save_gr &= ~restart_gr; 1294 1295 /* Turn the Entry_FR field into a bitmask too. */ 1296 save_fr = 0; 1297 for (i = 12; i < u->Entry_FR + 12; i++) 1298 save_fr |= (1 << i); 1299 save_fr &= ~restart_fr; 1300 1301 /* Loop until we find everything of interest or hit a branch. 1302 1303 For unoptimized GCC code and for any HP CC code this will never ever 1304 examine any user instructions. 1305 1306 For optimzied GCC code we're faced with problems. GCC will schedule 1307 its prologue and make prologue instructions available for delay slot 1308 filling. The end result is user code gets mixed in with the prologue 1309 and a prologue instruction may be in the delay slot of the first branch 1310 or call. 1311 1312 Some unexpected things are expected with debugging optimized code, so 1313 we allow this routine to walk past user instructions in optimized 1314 GCC code. */ 1315 while (save_gr || save_fr || save_rp || save_sp || stack_remaining > 0 1316 || args_stored) 1317 { 1318 unsigned int reg_num; 1319 unsigned long old_stack_remaining, old_save_gr, old_save_fr; 1320 unsigned long old_save_rp, old_save_sp, next_inst; 1321 1322 /* Save copies of all the triggers so we can compare them later 1323 (only for HPC). */ 1324 old_save_gr = save_gr; 1325 old_save_fr = save_fr; 1326 old_save_rp = save_rp; 1327 old_save_sp = save_sp; 1328 old_stack_remaining = stack_remaining; 1329 1330 status = deprecated_read_memory_nobpt (pc, buf, 4); 1331 inst = extract_unsigned_integer (buf, 4); 1332 1333 /* Yow! */ 1334 if (status != 0) 1335 return pc; 1336 1337 /* Note the interesting effects of this instruction. */ 1338 stack_remaining -= prologue_inst_adjust_sp (inst); 1339 1340 /* There are limited ways to store the return pointer into the 1341 stack. */ 1342 if (inst == 0x6bc23fd9 || inst == 0x0fc212c1) 1343 save_rp = 0; 1344 1345 /* These are the only ways we save SP into the stack. At this time 1346 the HP compilers never bother to save SP into the stack. */ 1347 if ((inst & 0xffffc000) == 0x6fc10000 1348 || (inst & 0xffffc00c) == 0x73c10008) 1349 save_sp = 0; 1350 1351 /* Are we loading some register with an offset from the argument 1352 pointer? */ 1353 if ((inst & 0xffe00000) == 0x37a00000 1354 || (inst & 0xffffffe0) == 0x081d0240) 1355 { 1356 pc += 4; 1357 continue; 1358 } 1359 1360 /* Account for general and floating-point register saves. */ 1361 reg_num = inst_saves_gr (inst); 1362 save_gr &= ~(1 << reg_num); 1363 1364 /* Ugh. Also account for argument stores into the stack. 1365 Unfortunately args_stored only tells us that some arguments 1366 where stored into the stack. Not how many or what kind! 1367 1368 This is a kludge as on the HP compiler sets this bit and it 1369 never does prologue scheduling. So once we see one, skip past 1370 all of them. We have similar code for the fp arg stores below. 1371 1372 FIXME. Can still die if we have a mix of GR and FR argument 1373 stores! */ 1374 if (reg_num >= (TARGET_PTR_BIT == 64 ? 19 : 23) && reg_num <= 26) 1375 { 1376 while (reg_num >= (TARGET_PTR_BIT == 64 ? 19 : 23) && reg_num <= 26) 1377 { 1378 pc += 4; 1379 status = deprecated_read_memory_nobpt (pc, buf, 4); 1380 inst = extract_unsigned_integer (buf, 4); 1381 if (status != 0) 1382 return pc; 1383 reg_num = inst_saves_gr (inst); 1384 } 1385 args_stored = 0; 1386 continue; 1387 } 1388 1389 reg_num = inst_saves_fr (inst); 1390 save_fr &= ~(1 << reg_num); 1391 1392 status = deprecated_read_memory_nobpt (pc + 4, buf, 4); 1393 next_inst = extract_unsigned_integer (buf, 4); 1394 1395 /* Yow! */ 1396 if (status != 0) 1397 return pc; 1398 1399 /* We've got to be read to handle the ldo before the fp register 1400 save. */ 1401 if ((inst & 0xfc000000) == 0x34000000 1402 && inst_saves_fr (next_inst) >= 4 1403 && inst_saves_fr (next_inst) <= (TARGET_PTR_BIT == 64 ? 11 : 7)) 1404 { 1405 /* So we drop into the code below in a reasonable state. */ 1406 reg_num = inst_saves_fr (next_inst); 1407 pc -= 4; 1408 } 1409 1410 /* Ugh. Also account for argument stores into the stack. 1411 This is a kludge as on the HP compiler sets this bit and it 1412 never does prologue scheduling. So once we see one, skip past 1413 all of them. */ 1414 if (reg_num >= 4 && reg_num <= (TARGET_PTR_BIT == 64 ? 11 : 7)) 1415 { 1416 while (reg_num >= 4 && reg_num <= (TARGET_PTR_BIT == 64 ? 11 : 7)) 1417 { 1418 pc += 8; 1419 status = deprecated_read_memory_nobpt (pc, buf, 4); 1420 inst = extract_unsigned_integer (buf, 4); 1421 if (status != 0) 1422 return pc; 1423 if ((inst & 0xfc000000) != 0x34000000) 1424 break; 1425 status = deprecated_read_memory_nobpt (pc + 4, buf, 4); 1426 next_inst = extract_unsigned_integer (buf, 4); 1427 if (status != 0) 1428 return pc; 1429 reg_num = inst_saves_fr (next_inst); 1430 } 1431 args_stored = 0; 1432 continue; 1433 } 1434 1435 /* Quit if we hit any kind of branch. This can happen if a prologue 1436 instruction is in the delay slot of the first call/branch. */ 1437 if (is_branch (inst)) 1438 break; 1439 1440 /* What a crock. The HP compilers set args_stored even if no 1441 arguments were stored into the stack (boo hiss). This could 1442 cause this code to then skip a bunch of user insns (up to the 1443 first branch). 1444 1445 To combat this we try to identify when args_stored was bogusly 1446 set and clear it. We only do this when args_stored is nonzero, 1447 all other resources are accounted for, and nothing changed on 1448 this pass. */ 1449 if (args_stored 1450 && !(save_gr || save_fr || save_rp || save_sp || stack_remaining > 0) 1451 && old_save_gr == save_gr && old_save_fr == save_fr 1452 && old_save_rp == save_rp && old_save_sp == save_sp 1453 && old_stack_remaining == stack_remaining) 1454 break; 1455 1456 /* Bump the PC. */ 1457 pc += 4; 1458 } 1459 1460 /* We've got a tenative location for the end of the prologue. However 1461 because of limitations in the unwind descriptor mechanism we may 1462 have went too far into user code looking for the save of a register 1463 that does not exist. So, if there registers we expected to be saved 1464 but never were, mask them out and restart. 1465 1466 This should only happen in optimized code, and should be very rare. */ 1467 if (save_gr || (save_fr && !(restart_fr || restart_gr))) 1468 { 1469 pc = orig_pc; 1470 restart_gr = save_gr; 1471 restart_fr = save_fr; 1472 goto restart; 1473 } 1474 1475 return pc; 1476 } 1477 1478 1479 /* Return the address of the PC after the last prologue instruction if 1480 we can determine it from the debug symbols. Else return zero. */ 1481 1482 static CORE_ADDR 1483 after_prologue (CORE_ADDR pc) 1484 { 1485 struct symtab_and_line sal; 1486 CORE_ADDR func_addr, func_end; 1487 struct symbol *f; 1488 1489 /* If we can not find the symbol in the partial symbol table, then 1490 there is no hope we can determine the function's start address 1491 with this code. */ 1492 if (!find_pc_partial_function (pc, NULL, &func_addr, &func_end)) 1493 return 0; 1494 1495 /* Get the line associated with FUNC_ADDR. */ 1496 sal = find_pc_line (func_addr, 0); 1497 1498 /* There are only two cases to consider. First, the end of the source line 1499 is within the function bounds. In that case we return the end of the 1500 source line. Second is the end of the source line extends beyond the 1501 bounds of the current function. We need to use the slow code to 1502 examine instructions in that case. 1503 1504 Anything else is simply a bug elsewhere. Fixing it here is absolutely 1505 the wrong thing to do. In fact, it should be entirely possible for this 1506 function to always return zero since the slow instruction scanning code 1507 is supposed to *always* work. If it does not, then it is a bug. */ 1508 if (sal.end < func_end) 1509 return sal.end; 1510 else 1511 return 0; 1512 } 1513 1514 /* To skip prologues, I use this predicate. Returns either PC itself 1515 if the code at PC does not look like a function prologue; otherwise 1516 returns an address that (if we're lucky) follows the prologue. If 1517 LENIENT, then we must skip everything which is involved in setting 1518 up the frame (it's OK to skip more, just so long as we don't skip 1519 anything which might clobber the registers which are being saved. 1520 Currently we must not skip more on the alpha, but we might the lenient 1521 stuff some day. */ 1522 1523 static CORE_ADDR 1524 hppa_skip_prologue (CORE_ADDR pc) 1525 { 1526 unsigned long inst; 1527 int offset; 1528 CORE_ADDR post_prologue_pc; 1529 char buf[4]; 1530 1531 /* See if we can determine the end of the prologue via the symbol table. 1532 If so, then return either PC, or the PC after the prologue, whichever 1533 is greater. */ 1534 1535 post_prologue_pc = after_prologue (pc); 1536 1537 /* If after_prologue returned a useful address, then use it. Else 1538 fall back on the instruction skipping code. 1539 1540 Some folks have claimed this causes problems because the breakpoint 1541 may be the first instruction of the prologue. If that happens, then 1542 the instruction skipping code has a bug that needs to be fixed. */ 1543 if (post_prologue_pc != 0) 1544 return max (pc, post_prologue_pc); 1545 else 1546 return (skip_prologue_hard_way (pc)); 1547 } 1548 1549 struct hppa_frame_cache 1550 { 1551 CORE_ADDR base; 1552 struct trad_frame_saved_reg *saved_regs; 1553 }; 1554 1555 static struct hppa_frame_cache * 1556 hppa_frame_cache (struct frame_info *next_frame, void **this_cache) 1557 { 1558 struct hppa_frame_cache *cache; 1559 long saved_gr_mask; 1560 long saved_fr_mask; 1561 CORE_ADDR this_sp; 1562 long frame_size; 1563 struct unwind_table_entry *u; 1564 CORE_ADDR prologue_end; 1565 int i; 1566 1567 if (hppa_debug) 1568 fprintf_unfiltered (gdb_stdlog, "{ hppa_frame_cache (frame=%d) -> ", 1569 frame_relative_level(next_frame)); 1570 1571 if ((*this_cache) != NULL) 1572 { 1573 if (hppa_debug) 1574 fprintf_unfiltered (gdb_stdlog, "base=0x%s (cached) }", 1575 paddr_nz (((struct hppa_frame_cache *)*this_cache)->base)); 1576 return (*this_cache); 1577 } 1578 cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache); 1579 (*this_cache) = cache; 1580 cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); 1581 1582 /* Yow! */ 1583 u = find_unwind_entry (frame_pc_unwind (next_frame)); 1584 if (!u) 1585 { 1586 if (hppa_debug) 1587 fprintf_unfiltered (gdb_stdlog, "base=NULL (no unwind entry) }"); 1588 return (*this_cache); 1589 } 1590 1591 /* Turn the Entry_GR field into a bitmask. */ 1592 saved_gr_mask = 0; 1593 for (i = 3; i < u->Entry_GR + 3; i++) 1594 { 1595 /* Frame pointer gets saved into a special location. */ 1596 if (u->Save_SP && i == HPPA_FP_REGNUM) 1597 continue; 1598 1599 saved_gr_mask |= (1 << i); 1600 } 1601 1602 /* Turn the Entry_FR field into a bitmask too. */ 1603 saved_fr_mask = 0; 1604 for (i = 12; i < u->Entry_FR + 12; i++) 1605 saved_fr_mask |= (1 << i); 1606 1607 /* Loop until we find everything of interest or hit a branch. 1608 1609 For unoptimized GCC code and for any HP CC code this will never ever 1610 examine any user instructions. 1611 1612 For optimized GCC code we're faced with problems. GCC will schedule 1613 its prologue and make prologue instructions available for delay slot 1614 filling. The end result is user code gets mixed in with the prologue 1615 and a prologue instruction may be in the delay slot of the first branch 1616 or call. 1617 1618 Some unexpected things are expected with debugging optimized code, so 1619 we allow this routine to walk past user instructions in optimized 1620 GCC code. */ 1621 { 1622 int final_iteration = 0; 1623 CORE_ADDR pc, end_pc; 1624 int looking_for_sp = u->Save_SP; 1625 int looking_for_rp = u->Save_RP; 1626 int fp_loc = -1; 1627 1628 /* We have to use hppa_skip_prologue instead of just 1629 skip_prologue_using_sal, in case we stepped into a function without 1630 symbol information. hppa_skip_prologue also bounds the returned 1631 pc by the passed in pc, so it will not return a pc in the next 1632 function. */ 1633 1634 /* We used to use frame_func_unwind () to locate the beginning of the 1635 function to pass to skip_prologue (). However, when objects are 1636 compiled without debug symbols, frame_func_unwind can return the wrong 1637 function (or 0). We can do better than that by using unwind records. */ 1638 1639 prologue_end = hppa_skip_prologue (u->region_start); 1640 end_pc = frame_pc_unwind (next_frame); 1641 1642 if (prologue_end != 0 && end_pc > prologue_end) 1643 end_pc = prologue_end; 1644 1645 frame_size = 0; 1646 1647 for (pc = u->region_start; 1648 ((saved_gr_mask || saved_fr_mask 1649 || looking_for_sp || looking_for_rp 1650 || frame_size < (u->Total_frame_size << 3)) 1651 && pc < end_pc); 1652 pc += 4) 1653 { 1654 int reg; 1655 char buf4[4]; 1656 long status = deprecated_read_memory_nobpt (pc, buf4, sizeof buf4); 1657 long inst = extract_unsigned_integer (buf4, sizeof buf4); 1658 1659 /* Note the interesting effects of this instruction. */ 1660 frame_size += prologue_inst_adjust_sp (inst); 1661 1662 /* There are limited ways to store the return pointer into the 1663 stack. */ 1664 if (inst == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */ 1665 { 1666 looking_for_rp = 0; 1667 cache->saved_regs[HPPA_RP_REGNUM].addr = -20; 1668 } 1669 else if (inst == 0x6bc23fd1) /* stw rp,-0x18(sr0,sp) */ 1670 { 1671 looking_for_rp = 0; 1672 cache->saved_regs[HPPA_RP_REGNUM].addr = -24; 1673 } 1674 else if (inst == 0x0fc212c1) /* std rp,-0x10(sr0,sp) */ 1675 { 1676 looking_for_rp = 0; 1677 cache->saved_regs[HPPA_RP_REGNUM].addr = -16; 1678 } 1679 1680 /* Check to see if we saved SP into the stack. This also 1681 happens to indicate the location of the saved frame 1682 pointer. */ 1683 if ((inst & 0xffffc000) == 0x6fc10000 /* stw,ma r1,N(sr0,sp) */ 1684 || (inst & 0xffffc00c) == 0x73c10008) /* std,ma r1,N(sr0,sp) */ 1685 { 1686 looking_for_sp = 0; 1687 cache->saved_regs[HPPA_FP_REGNUM].addr = 0; 1688 } 1689 1690 /* Account for general and floating-point register saves. */ 1691 reg = inst_saves_gr (inst); 1692 if (reg >= 3 && reg <= 18 1693 && (!u->Save_SP || reg != HPPA_FP_REGNUM)) 1694 { 1695 saved_gr_mask &= ~(1 << reg); 1696 if ((inst >> 26) == 0x1b && hppa_extract_14 (inst) >= 0) 1697 /* stwm with a positive displacement is a _post_ 1698 _modify_. */ 1699 cache->saved_regs[reg].addr = 0; 1700 else if ((inst & 0xfc00000c) == 0x70000008) 1701 /* A std has explicit post_modify forms. */ 1702 cache->saved_regs[reg].addr = 0; 1703 else 1704 { 1705 CORE_ADDR offset; 1706 1707 if ((inst >> 26) == 0x1c) 1708 offset = (inst & 0x1 ? -1 << 13 : 0) | (((inst >> 4) & 0x3ff) << 3); 1709 else if ((inst >> 26) == 0x03) 1710 offset = hppa_low_hppa_sign_extend (inst & 0x1f, 5); 1711 else 1712 offset = hppa_extract_14 (inst); 1713 1714 /* Handle code with and without frame pointers. */ 1715 if (u->Save_SP) 1716 cache->saved_regs[reg].addr = offset; 1717 else 1718 cache->saved_regs[reg].addr = (u->Total_frame_size << 3) + offset; 1719 } 1720 } 1721 1722 /* GCC handles callee saved FP regs a little differently. 1723 1724 It emits an instruction to put the value of the start of 1725 the FP store area into %r1. It then uses fstds,ma with a 1726 basereg of %r1 for the stores. 1727 1728 HP CC emits them at the current stack pointer modifying the 1729 stack pointer as it stores each register. */ 1730 1731 /* ldo X(%r3),%r1 or ldo X(%r30),%r1. */ 1732 if ((inst & 0xffffc000) == 0x34610000 1733 || (inst & 0xffffc000) == 0x37c10000) 1734 fp_loc = hppa_extract_14 (inst); 1735 1736 reg = inst_saves_fr (inst); 1737 if (reg >= 12 && reg <= 21) 1738 { 1739 /* Note +4 braindamage below is necessary because the FP 1740 status registers are internally 8 registers rather than 1741 the expected 4 registers. */ 1742 saved_fr_mask &= ~(1 << reg); 1743 if (fp_loc == -1) 1744 { 1745 /* 1st HP CC FP register store. After this 1746 instruction we've set enough state that the GCC and 1747 HPCC code are both handled in the same manner. */ 1748 cache->saved_regs[reg + HPPA_FP4_REGNUM + 4].addr = 0; 1749 fp_loc = 8; 1750 } 1751 else 1752 { 1753 cache->saved_regs[reg + HPPA_FP0_REGNUM + 4].addr = fp_loc; 1754 fp_loc += 8; 1755 } 1756 } 1757 1758 /* Quit if we hit any kind of branch the previous iteration. */ 1759 if (final_iteration) 1760 break; 1761 /* We want to look precisely one instruction beyond the branch 1762 if we have not found everything yet. */ 1763 if (is_branch (inst)) 1764 final_iteration = 1; 1765 } 1766 } 1767 1768 { 1769 /* The frame base always represents the value of %sp at entry to 1770 the current function (and is thus equivalent to the "saved" 1771 stack pointer. */ 1772 CORE_ADDR this_sp = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM); 1773 CORE_ADDR fp; 1774 1775 if (hppa_debug) 1776 fprintf_unfiltered (gdb_stdlog, " (this_sp=0x%s, pc=0x%s, " 1777 "prologue_end=0x%s) ", 1778 paddr_nz (this_sp), 1779 paddr_nz (frame_pc_unwind (next_frame)), 1780 paddr_nz (prologue_end)); 1781 1782 /* Check to see if a frame pointer is available, and use it for 1783 frame unwinding if it is. 1784 1785 There are some situations where we need to rely on the frame 1786 pointer to do stack unwinding. For example, if a function calls 1787 alloca (), the stack pointer can get adjusted inside the body of 1788 the function. In this case, the ABI requires that the compiler 1789 maintain a frame pointer for the function. 1790 1791 The unwind record has a flag (alloca_frame) that indicates that 1792 a function has a variable frame; unfortunately, gcc/binutils 1793 does not set this flag. Instead, whenever a frame pointer is used 1794 and saved on the stack, the Save_SP flag is set. We use this to 1795 decide whether to use the frame pointer for unwinding. 1796 1797 fp may be zero if it is not available in an inner frame because 1798 it has been modified by not yet saved. 1799 1800 TODO: For the HP compiler, maybe we should use the alloca_frame flag 1801 instead of Save_SP. */ 1802 1803 fp = frame_unwind_register_unsigned (next_frame, HPPA_FP_REGNUM); 1804 1805 if (frame_pc_unwind (next_frame) >= prologue_end 1806 && u->Save_SP && fp != 0) 1807 { 1808 cache->base = fp; 1809 1810 if (hppa_debug) 1811 fprintf_unfiltered (gdb_stdlog, " (base=0x%s) [frame pointer] }", 1812 paddr_nz (cache->base)); 1813 } 1814 else if (u->Save_SP 1815 && trad_frame_addr_p (cache->saved_regs, HPPA_SP_REGNUM)) 1816 { 1817 /* Both we're expecting the SP to be saved and the SP has been 1818 saved. The entry SP value is saved at this frame's SP 1819 address. */ 1820 cache->base = read_memory_integer (this_sp, TARGET_PTR_BIT / 8); 1821 1822 if (hppa_debug) 1823 fprintf_unfiltered (gdb_stdlog, " (base=0x%s) [saved] }", 1824 paddr_nz (cache->base)); 1825 } 1826 else 1827 { 1828 /* The prologue has been slowly allocating stack space. Adjust 1829 the SP back. */ 1830 cache->base = this_sp - frame_size; 1831 if (hppa_debug) 1832 fprintf_unfiltered (gdb_stdlog, " (base=0x%s) [unwind adjust] } ", 1833 paddr_nz (cache->base)); 1834 1835 } 1836 trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base); 1837 } 1838 1839 /* The PC is found in the "return register", "Millicode" uses "r31" 1840 as the return register while normal code uses "rp". */ 1841 if (u->Millicode) 1842 { 1843 if (trad_frame_addr_p (cache->saved_regs, 31)) 1844 cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[31]; 1845 else 1846 { 1847 ULONGEST r31 = frame_unwind_register_unsigned (next_frame, 31); 1848 trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, r31); 1849 } 1850 } 1851 else 1852 { 1853 if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM)) 1854 cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[HPPA_RP_REGNUM]; 1855 else 1856 { 1857 ULONGEST rp = frame_unwind_register_unsigned (next_frame, HPPA_RP_REGNUM); 1858 trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp); 1859 } 1860 } 1861 1862 /* If the frame pointer was not saved in this frame, but we should be saving 1863 it, set it to an invalid value so that another frame will not pick up the 1864 wrong frame pointer. This can happen if we start unwinding after the 1865 frame pointer has been modified, but before we've saved it to the 1866 stack. */ 1867 if (u->Save_SP && !trad_frame_addr_p (cache->saved_regs, HPPA_FP_REGNUM)) 1868 trad_frame_set_value (cache->saved_regs, HPPA_FP_REGNUM, 0); 1869 1870 { 1871 /* Convert all the offsets into addresses. */ 1872 int reg; 1873 for (reg = 0; reg < NUM_REGS; reg++) 1874 { 1875 if (trad_frame_addr_p (cache->saved_regs, reg)) 1876 cache->saved_regs[reg].addr += cache->base; 1877 } 1878 } 1879 1880 if (hppa_debug) 1881 fprintf_unfiltered (gdb_stdlog, "base=0x%s }", 1882 paddr_nz (((struct hppa_frame_cache *)*this_cache)->base)); 1883 return (*this_cache); 1884 } 1885 1886 static void 1887 hppa_frame_this_id (struct frame_info *next_frame, void **this_cache, 1888 struct frame_id *this_id) 1889 { 1890 struct hppa_frame_cache *info; 1891 CORE_ADDR pc = frame_pc_unwind (next_frame); 1892 struct unwind_table_entry *u; 1893 1894 info = hppa_frame_cache (next_frame, this_cache); 1895 u = find_unwind_entry (pc); 1896 1897 (*this_id) = frame_id_build (info->base, u->region_start); 1898 } 1899 1900 static void 1901 hppa_frame_prev_register (struct frame_info *next_frame, 1902 void **this_cache, 1903 int regnum, int *optimizedp, 1904 enum lval_type *lvalp, CORE_ADDR *addrp, 1905 int *realnump, void *valuep) 1906 { 1907 struct hppa_frame_cache *info = hppa_frame_cache (next_frame, this_cache); 1908 hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum, 1909 optimizedp, lvalp, addrp, realnump, valuep); 1910 } 1911 1912 static const struct frame_unwind hppa_frame_unwind = 1913 { 1914 NORMAL_FRAME, 1915 hppa_frame_this_id, 1916 hppa_frame_prev_register 1917 }; 1918 1919 static const struct frame_unwind * 1920 hppa_frame_unwind_sniffer (struct frame_info *next_frame) 1921 { 1922 CORE_ADDR pc = frame_pc_unwind (next_frame); 1923 1924 if (find_unwind_entry (pc)) 1925 return &hppa_frame_unwind; 1926 1927 return NULL; 1928 } 1929 1930 /* This is a generic fallback frame unwinder that kicks in if we fail all 1931 the other ones. Normally we would expect the stub and regular unwinder 1932 to work, but in some cases we might hit a function that just doesn't 1933 have any unwind information available. In this case we try to do 1934 unwinding solely based on code reading. This is obviously going to be 1935 slow, so only use this as a last resort. Currently this will only 1936 identify the stack and pc for the frame. */ 1937 1938 static struct hppa_frame_cache * 1939 hppa_fallback_frame_cache (struct frame_info *next_frame, void **this_cache) 1940 { 1941 struct hppa_frame_cache *cache; 1942 unsigned int frame_size; 1943 int found_rp; 1944 CORE_ADDR pc, start_pc, end_pc, cur_pc; 1945 1946 if (hppa_debug) 1947 fprintf_unfiltered (gdb_stdlog, "{ hppa_fallback_frame_cache (frame=%d)-> ", 1948 frame_relative_level(next_frame)); 1949 1950 cache = FRAME_OBSTACK_ZALLOC (struct hppa_frame_cache); 1951 (*this_cache) = cache; 1952 cache->saved_regs = trad_frame_alloc_saved_regs (next_frame); 1953 1954 pc = frame_func_unwind (next_frame); 1955 cur_pc = frame_pc_unwind (next_frame); 1956 frame_size = 0; 1957 found_rp = 0; 1958 1959 find_pc_partial_function (pc, NULL, &start_pc, &end_pc); 1960 1961 if (start_pc == 0 || end_pc == 0) 1962 { 1963 error ("Cannot find bounds of current function (@0x%s), unwinding will " 1964 "fail.", paddr_nz (pc)); 1965 return cache; 1966 } 1967 1968 if (end_pc > cur_pc) 1969 end_pc = cur_pc; 1970 1971 for (pc = start_pc; pc < end_pc; pc += 4) 1972 { 1973 unsigned int insn; 1974 1975 insn = read_memory_unsigned_integer (pc, 4); 1976 1977 frame_size += prologue_inst_adjust_sp (insn); 1978 1979 /* There are limited ways to store the return pointer into the 1980 stack. */ 1981 if (insn == 0x6bc23fd9) /* stw rp,-0x14(sr0,sp) */ 1982 { 1983 cache->saved_regs[HPPA_RP_REGNUM].addr = -20; 1984 found_rp = 1; 1985 } 1986 else if (insn == 0x0fc212c1) /* std rp,-0x10(sr0,sp) */ 1987 { 1988 cache->saved_regs[HPPA_RP_REGNUM].addr = -16; 1989 found_rp = 1; 1990 } 1991 } 1992 1993 if (hppa_debug) 1994 fprintf_unfiltered (gdb_stdlog, " frame_size = %d, found_rp = %d }\n", 1995 frame_size, found_rp); 1996 1997 cache->base = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM) - frame_size; 1998 trad_frame_set_value (cache->saved_regs, HPPA_SP_REGNUM, cache->base); 1999 2000 if (trad_frame_addr_p (cache->saved_regs, HPPA_RP_REGNUM)) 2001 { 2002 cache->saved_regs[HPPA_RP_REGNUM].addr += cache->base; 2003 cache->saved_regs[HPPA_PCOQ_HEAD_REGNUM] = cache->saved_regs[HPPA_RP_REGNUM]; 2004 } 2005 else 2006 { 2007 ULONGEST rp = frame_unwind_register_unsigned (next_frame, HPPA_RP_REGNUM); 2008 trad_frame_set_value (cache->saved_regs, HPPA_PCOQ_HEAD_REGNUM, rp); 2009 } 2010 2011 return cache; 2012 } 2013 2014 static void 2015 hppa_fallback_frame_this_id (struct frame_info *next_frame, void **this_cache, 2016 struct frame_id *this_id) 2017 { 2018 struct hppa_frame_cache *info = 2019 hppa_fallback_frame_cache (next_frame, this_cache); 2020 (*this_id) = frame_id_build (info->base, frame_func_unwind (next_frame)); 2021 } 2022 2023 static void 2024 hppa_fallback_frame_prev_register (struct frame_info *next_frame, 2025 void **this_cache, 2026 int regnum, int *optimizedp, 2027 enum lval_type *lvalp, CORE_ADDR *addrp, 2028 int *realnump, void *valuep) 2029 { 2030 struct hppa_frame_cache *info = 2031 hppa_fallback_frame_cache (next_frame, this_cache); 2032 hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum, 2033 optimizedp, lvalp, addrp, realnump, valuep); 2034 } 2035 2036 static const struct frame_unwind hppa_fallback_frame_unwind = 2037 { 2038 NORMAL_FRAME, 2039 hppa_fallback_frame_this_id, 2040 hppa_fallback_frame_prev_register 2041 }; 2042 2043 static const struct frame_unwind * 2044 hppa_fallback_unwind_sniffer (struct frame_info *next_frame) 2045 { 2046 return &hppa_fallback_frame_unwind; 2047 } 2048 2049 /* Stub frames, used for all kinds of call stubs. */ 2050 struct hppa_stub_unwind_cache 2051 { 2052 CORE_ADDR base; 2053 struct trad_frame_saved_reg *saved_regs; 2054 }; 2055 2056 static struct hppa_stub_unwind_cache * 2057 hppa_stub_frame_unwind_cache (struct frame_info *next_frame, 2058 void **this_cache) 2059 { 2060 struct gdbarch *gdbarch = get_frame_arch (next_frame); 2061 struct hppa_stub_unwind_cache *info; 2062 struct unwind_table_entry *u; 2063 2064 if (*this_cache) 2065 return *this_cache; 2066 2067 info = FRAME_OBSTACK_ZALLOC (struct hppa_stub_unwind_cache); 2068 *this_cache = info; 2069 info->saved_regs = trad_frame_alloc_saved_regs (next_frame); 2070 2071 info->base = frame_unwind_register_unsigned (next_frame, HPPA_SP_REGNUM); 2072 2073 if (gdbarch_osabi (gdbarch) == GDB_OSABI_HPUX_SOM) 2074 { 2075 /* HPUX uses export stubs in function calls; the export stub clobbers 2076 the return value of the caller, and, later restores it from the 2077 stack. */ 2078 u = find_unwind_entry (frame_pc_unwind (next_frame)); 2079 2080 if (u && u->stub_unwind.stub_type == EXPORT) 2081 { 2082 info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].addr = info->base - 24; 2083 2084 return info; 2085 } 2086 } 2087 2088 /* By default we assume that stubs do not change the rp. */ 2089 info->saved_regs[HPPA_PCOQ_HEAD_REGNUM].realreg = HPPA_RP_REGNUM; 2090 2091 return info; 2092 } 2093 2094 static void 2095 hppa_stub_frame_this_id (struct frame_info *next_frame, 2096 void **this_prologue_cache, 2097 struct frame_id *this_id) 2098 { 2099 struct hppa_stub_unwind_cache *info 2100 = hppa_stub_frame_unwind_cache (next_frame, this_prologue_cache); 2101 *this_id = frame_id_build (info->base, frame_pc_unwind (next_frame)); 2102 } 2103 2104 static void 2105 hppa_stub_frame_prev_register (struct frame_info *next_frame, 2106 void **this_prologue_cache, 2107 int regnum, int *optimizedp, 2108 enum lval_type *lvalp, CORE_ADDR *addrp, 2109 int *realnump, void *valuep) 2110 { 2111 struct hppa_stub_unwind_cache *info 2112 = hppa_stub_frame_unwind_cache (next_frame, this_prologue_cache); 2113 hppa_frame_prev_register_helper (next_frame, info->saved_regs, regnum, 2114 optimizedp, lvalp, addrp, realnump, valuep); 2115 } 2116 2117 static const struct frame_unwind hppa_stub_frame_unwind = { 2118 NORMAL_FRAME, 2119 hppa_stub_frame_this_id, 2120 hppa_stub_frame_prev_register 2121 }; 2122 2123 static const struct frame_unwind * 2124 hppa_stub_unwind_sniffer (struct frame_info *next_frame) 2125 { 2126 CORE_ADDR pc = frame_pc_unwind (next_frame); 2127 2128 if (pc == 0 2129 || IN_SOLIB_CALL_TRAMPOLINE (pc, NULL) 2130 || IN_SOLIB_RETURN_TRAMPOLINE (pc, NULL)) 2131 return &hppa_stub_frame_unwind; 2132 return NULL; 2133 } 2134 2135 static struct frame_id 2136 hppa_unwind_dummy_id (struct gdbarch *gdbarch, struct frame_info *next_frame) 2137 { 2138 return frame_id_build (frame_unwind_register_unsigned (next_frame, 2139 HPPA_SP_REGNUM), 2140 frame_pc_unwind (next_frame)); 2141 } 2142 2143 static CORE_ADDR 2144 hppa_unwind_pc (struct gdbarch *gdbarch, struct frame_info *next_frame) 2145 { 2146 return frame_unwind_register_signed (next_frame, HPPA_PCOQ_HEAD_REGNUM) & ~3; 2147 } 2148 2149 /* Instead of this nasty cast, add a method pvoid() that prints out a 2150 host VOID data type (remember %p isn't portable). */ 2151 2152 static CORE_ADDR 2153 hppa_pointer_to_address_hack (void *ptr) 2154 { 2155 gdb_assert (sizeof (ptr) == TYPE_LENGTH (builtin_type_void_data_ptr)); 2156 return POINTER_TO_ADDRESS (builtin_type_void_data_ptr, &ptr); 2157 } 2158 2159 static void 2160 unwind_command (char *exp, int from_tty) 2161 { 2162 CORE_ADDR address; 2163 struct unwind_table_entry *u; 2164 2165 /* If we have an expression, evaluate it and use it as the address. */ 2166 2167 if (exp != 0 && *exp != 0) 2168 address = parse_and_eval_address (exp); 2169 else 2170 return; 2171 2172 u = find_unwind_entry (address); 2173 2174 if (!u) 2175 { 2176 printf_unfiltered ("Can't find unwind table entry for %s\n", exp); 2177 return; 2178 } 2179 2180 printf_unfiltered ("unwind_table_entry (0x%s):\n", 2181 paddr_nz (hppa_pointer_to_address_hack (u))); 2182 2183 printf_unfiltered ("\tregion_start = "); 2184 print_address (u->region_start, gdb_stdout); 2185 gdb_flush (gdb_stdout); 2186 2187 printf_unfiltered ("\n\tregion_end = "); 2188 print_address (u->region_end, gdb_stdout); 2189 gdb_flush (gdb_stdout); 2190 2191 #define pif(FLD) if (u->FLD) printf_unfiltered (" "#FLD); 2192 2193 printf_unfiltered ("\n\tflags ="); 2194 pif (Cannot_unwind); 2195 pif (Millicode); 2196 pif (Millicode_save_sr0); 2197 pif (Entry_SR); 2198 pif (Args_stored); 2199 pif (Variable_Frame); 2200 pif (Separate_Package_Body); 2201 pif (Frame_Extension_Millicode); 2202 pif (Stack_Overflow_Check); 2203 pif (Two_Instruction_SP_Increment); 2204 pif (Ada_Region); 2205 pif (Save_SP); 2206 pif (Save_RP); 2207 pif (Save_MRP_in_frame); 2208 pif (extn_ptr_defined); 2209 pif (Cleanup_defined); 2210 pif (MPE_XL_interrupt_marker); 2211 pif (HP_UX_interrupt_marker); 2212 pif (Large_frame); 2213 2214 putchar_unfiltered ('\n'); 2215 2216 #define pin(FLD) printf_unfiltered ("\t"#FLD" = 0x%x\n", u->FLD); 2217 2218 pin (Region_description); 2219 pin (Entry_FR); 2220 pin (Entry_GR); 2221 pin (Total_frame_size); 2222 } 2223 2224 void 2225 hppa_skip_permanent_breakpoint (void) 2226 { 2227 /* To step over a breakpoint instruction on the PA takes some 2228 fiddling with the instruction address queue. 2229 2230 When we stop at a breakpoint, the IA queue front (the instruction 2231 we're executing now) points at the breakpoint instruction, and 2232 the IA queue back (the next instruction to execute) points to 2233 whatever instruction we would execute after the breakpoint, if it 2234 were an ordinary instruction. This is the case even if the 2235 breakpoint is in the delay slot of a branch instruction. 2236 2237 Clearly, to step past the breakpoint, we need to set the queue 2238 front to the back. But what do we put in the back? What 2239 instruction comes after that one? Because of the branch delay 2240 slot, the next insn is always at the back + 4. */ 2241 write_register (HPPA_PCOQ_HEAD_REGNUM, read_register (HPPA_PCOQ_TAIL_REGNUM)); 2242 write_register (HPPA_PCSQ_HEAD_REGNUM, read_register (HPPA_PCSQ_TAIL_REGNUM)); 2243 2244 write_register (HPPA_PCOQ_TAIL_REGNUM, read_register (HPPA_PCOQ_TAIL_REGNUM) + 4); 2245 /* We can leave the tail's space the same, since there's no jump. */ 2246 } 2247 2248 int 2249 hppa_pc_requires_run_before_use (CORE_ADDR pc) 2250 { 2251 /* Sometimes we may pluck out a minimal symbol that has a negative address. 2252 2253 An example of this occurs when an a.out is linked against a foo.sl. 2254 The foo.sl defines a global bar(), and the a.out declares a signature 2255 for bar(). However, the a.out doesn't directly call bar(), but passes 2256 its address in another call. 2257 2258 If you have this scenario and attempt to "break bar" before running, 2259 gdb will find a minimal symbol for bar() in the a.out. But that 2260 symbol's address will be negative. What this appears to denote is 2261 an index backwards from the base of the procedure linkage table (PLT) 2262 into the data linkage table (DLT), the end of which is contiguous 2263 with the start of the PLT. This is clearly not a valid address for 2264 us to set a breakpoint on. 2265 2266 Note that one must be careful in how one checks for a negative address. 2267 0xc0000000 is a legitimate address of something in a shared text 2268 segment, for example. Since I don't know what the possible range 2269 is of these "really, truly negative" addresses that come from the 2270 minimal symbols, I'm resorting to the gross hack of checking the 2271 top byte of the address for all 1's. Sigh. */ 2272 2273 return (!target_has_stack && (pc & 0xFF000000)); 2274 } 2275 2276 int 2277 hppa_instruction_nullified (void) 2278 { 2279 /* brobecker 2002/11/07: Couldn't we use a ULONGEST here? It would 2280 avoid the type cast. I'm leaving it as is for now as I'm doing 2281 semi-mechanical multiarching-related changes. */ 2282 const int ipsw = (int) read_register (HPPA_IPSW_REGNUM); 2283 const int flags = (int) read_register (HPPA_FLAGS_REGNUM); 2284 2285 return ((ipsw & 0x00200000) && !(flags & 0x2)); 2286 } 2287 2288 /* Return the GDB type object for the "standard" data type of data 2289 in register N. */ 2290 2291 static struct type * 2292 hppa32_register_type (struct gdbarch *gdbarch, int reg_nr) 2293 { 2294 if (reg_nr < HPPA_FP4_REGNUM) 2295 return builtin_type_uint32; 2296 else 2297 return builtin_type_ieee_single_big; 2298 } 2299 2300 /* Return the GDB type object for the "standard" data type of data 2301 in register N. hppa64 version. */ 2302 2303 static struct type * 2304 hppa64_register_type (struct gdbarch *gdbarch, int reg_nr) 2305 { 2306 if (reg_nr < HPPA_FP4_REGNUM) 2307 return builtin_type_uint64; 2308 else 2309 return builtin_type_ieee_double_big; 2310 } 2311 2312 /* Return True if REGNUM is not a register available to the user 2313 through ptrace(). */ 2314 2315 static int 2316 hppa_cannot_store_register (int regnum) 2317 { 2318 return (regnum == 0 2319 || regnum == HPPA_PCSQ_HEAD_REGNUM 2320 || (regnum >= HPPA_PCSQ_TAIL_REGNUM && regnum < HPPA_IPSW_REGNUM) 2321 || (regnum > HPPA_IPSW_REGNUM && regnum < HPPA_FP4_REGNUM)); 2322 2323 } 2324 2325 static CORE_ADDR 2326 hppa_smash_text_address (CORE_ADDR addr) 2327 { 2328 /* The low two bits of the PC on the PA contain the privilege level. 2329 Some genius implementing a (non-GCC) compiler apparently decided 2330 this means that "addresses" in a text section therefore include a 2331 privilege level, and thus symbol tables should contain these bits. 2332 This seems like a bonehead thing to do--anyway, it seems to work 2333 for our purposes to just ignore those bits. */ 2334 2335 return (addr &= ~0x3); 2336 } 2337 2338 /* Get the ith function argument for the current function. */ 2339 CORE_ADDR 2340 hppa_fetch_pointer_argument (struct frame_info *frame, int argi, 2341 struct type *type) 2342 { 2343 CORE_ADDR addr; 2344 get_frame_register (frame, HPPA_R0_REGNUM + 26 - argi, &addr); 2345 return addr; 2346 } 2347 2348 static void 2349 hppa_pseudo_register_read (struct gdbarch *gdbarch, struct regcache *regcache, 2350 int regnum, void *buf) 2351 { 2352 ULONGEST tmp; 2353 2354 regcache_raw_read_unsigned (regcache, regnum, &tmp); 2355 if (regnum == HPPA_PCOQ_HEAD_REGNUM || regnum == HPPA_PCOQ_TAIL_REGNUM) 2356 tmp &= ~0x3; 2357 store_unsigned_integer (buf, sizeof(tmp), tmp); 2358 } 2359 2360 static CORE_ADDR 2361 hppa_find_global_pointer (struct value *function) 2362 { 2363 return 0; 2364 } 2365 2366 void 2367 hppa_frame_prev_register_helper (struct frame_info *next_frame, 2368 struct trad_frame_saved_reg saved_regs[], 2369 int regnum, int *optimizedp, 2370 enum lval_type *lvalp, CORE_ADDR *addrp, 2371 int *realnump, void *valuep) 2372 { 2373 if (regnum == HPPA_PCOQ_TAIL_REGNUM) 2374 { 2375 if (valuep) 2376 { 2377 CORE_ADDR pc; 2378 2379 trad_frame_get_prev_register (next_frame, saved_regs, 2380 HPPA_PCOQ_HEAD_REGNUM, optimizedp, 2381 lvalp, addrp, realnump, valuep); 2382 2383 pc = extract_unsigned_integer (valuep, 4); 2384 store_unsigned_integer (valuep, 4, pc + 4); 2385 } 2386 2387 /* It's a computed value. */ 2388 *optimizedp = 0; 2389 *lvalp = not_lval; 2390 *addrp = 0; 2391 *realnump = -1; 2392 return; 2393 } 2394 2395 trad_frame_get_prev_register (next_frame, saved_regs, regnum, 2396 optimizedp, lvalp, addrp, realnump, valuep); 2397 } 2398 2399 2400 /* Here is a table of C type sizes on hppa with various compiles 2401 and options. I measured this on PA 9000/800 with HP-UX 11.11 2402 and these compilers: 2403 2404 /usr/ccs/bin/cc HP92453-01 A.11.01.21 2405 /opt/ansic/bin/cc HP92453-01 B.11.11.28706.GP 2406 /opt/aCC/bin/aCC B3910B A.03.45 2407 gcc gcc 3.3.2 native hppa2.0w-hp-hpux11.11 2408 2409 cc : 1 2 4 4 8 : 4 8 -- : 4 4 2410 ansic +DA1.1 : 1 2 4 4 8 : 4 8 16 : 4 4 2411 ansic +DA2.0 : 1 2 4 4 8 : 4 8 16 : 4 4 2412 ansic +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8 2413 acc +DA1.1 : 1 2 4 4 8 : 4 8 16 : 4 4 2414 acc +DA2.0 : 1 2 4 4 8 : 4 8 16 : 4 4 2415 acc +DA2.0W : 1 2 4 8 8 : 4 8 16 : 8 8 2416 gcc : 1 2 4 4 8 : 4 8 16 : 4 4 2417 2418 Each line is: 2419 2420 compiler and options 2421 char, short, int, long, long long 2422 float, double, long double 2423 char *, void (*)() 2424 2425 So all these compilers use either ILP32 or LP64 model. 2426 TODO: gcc has more options so it needs more investigation. 2427 2428 For floating point types, see: 2429 2430 http://docs.hp.com/hpux/pdf/B3906-90006.pdf 2431 HP-UX floating-point guide, hpux 11.00 2432 2433 -- chastain 2003-12-18 */ 2434 2435 static struct gdbarch * 2436 hppa_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) 2437 { 2438 struct gdbarch_tdep *tdep; 2439 struct gdbarch *gdbarch; 2440 2441 /* Try to determine the ABI of the object we are loading. */ 2442 if (info.abfd != NULL && info.osabi == GDB_OSABI_UNKNOWN) 2443 { 2444 /* If it's a SOM file, assume it's HP/UX SOM. */ 2445 if (bfd_get_flavour (info.abfd) == bfd_target_som_flavour) 2446 info.osabi = GDB_OSABI_HPUX_SOM; 2447 } 2448 2449 /* find a candidate among the list of pre-declared architectures. */ 2450 arches = gdbarch_list_lookup_by_info (arches, &info); 2451 if (arches != NULL) 2452 return (arches->gdbarch); 2453 2454 /* If none found, then allocate and initialize one. */ 2455 tdep = XZALLOC (struct gdbarch_tdep); 2456 gdbarch = gdbarch_alloc (&info, tdep); 2457 2458 /* Determine from the bfd_arch_info structure if we are dealing with 2459 a 32 or 64 bits architecture. If the bfd_arch_info is not available, 2460 then default to a 32bit machine. */ 2461 if (info.bfd_arch_info != NULL) 2462 tdep->bytes_per_address = 2463 info.bfd_arch_info->bits_per_address / info.bfd_arch_info->bits_per_byte; 2464 else 2465 tdep->bytes_per_address = 4; 2466 2467 tdep->find_global_pointer = hppa_find_global_pointer; 2468 2469 /* Some parts of the gdbarch vector depend on whether we are running 2470 on a 32 bits or 64 bits target. */ 2471 switch (tdep->bytes_per_address) 2472 { 2473 case 4: 2474 set_gdbarch_num_regs (gdbarch, hppa32_num_regs); 2475 set_gdbarch_register_name (gdbarch, hppa32_register_name); 2476 set_gdbarch_register_type (gdbarch, hppa32_register_type); 2477 break; 2478 case 8: 2479 set_gdbarch_num_regs (gdbarch, hppa64_num_regs); 2480 set_gdbarch_register_name (gdbarch, hppa64_register_name); 2481 set_gdbarch_register_type (gdbarch, hppa64_register_type); 2482 break; 2483 default: 2484 internal_error (__FILE__, __LINE__, "Unsupported address size: %d", 2485 tdep->bytes_per_address); 2486 } 2487 2488 set_gdbarch_long_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT); 2489 set_gdbarch_ptr_bit (gdbarch, tdep->bytes_per_address * TARGET_CHAR_BIT); 2490 2491 /* The following gdbarch vector elements are the same in both ILP32 2492 and LP64, but might show differences some day. */ 2493 set_gdbarch_long_long_bit (gdbarch, 64); 2494 set_gdbarch_long_double_bit (gdbarch, 128); 2495 set_gdbarch_long_double_format (gdbarch, &floatformat_ia64_quad_big); 2496 2497 /* The following gdbarch vector elements do not depend on the address 2498 size, or in any other gdbarch element previously set. */ 2499 set_gdbarch_skip_prologue (gdbarch, hppa_skip_prologue); 2500 set_gdbarch_inner_than (gdbarch, core_addr_greaterthan); 2501 set_gdbarch_sp_regnum (gdbarch, HPPA_SP_REGNUM); 2502 set_gdbarch_fp0_regnum (gdbarch, HPPA_FP0_REGNUM); 2503 set_gdbarch_cannot_store_register (gdbarch, hppa_cannot_store_register); 2504 set_gdbarch_cannot_fetch_register (gdbarch, hppa_cannot_store_register); 2505 set_gdbarch_addr_bits_remove (gdbarch, hppa_smash_text_address); 2506 set_gdbarch_smash_text_address (gdbarch, hppa_smash_text_address); 2507 set_gdbarch_believe_pcc_promotion (gdbarch, 1); 2508 set_gdbarch_read_pc (gdbarch, hppa_target_read_pc); 2509 set_gdbarch_write_pc (gdbarch, hppa_target_write_pc); 2510 2511 /* Helper for function argument information. */ 2512 set_gdbarch_fetch_pointer_argument (gdbarch, hppa_fetch_pointer_argument); 2513 2514 set_gdbarch_print_insn (gdbarch, print_insn_hppa); 2515 2516 /* When a hardware watchpoint triggers, we'll move the inferior past 2517 it by removing all eventpoints; stepping past the instruction 2518 that caused the trigger; reinserting eventpoints; and checking 2519 whether any watched location changed. */ 2520 set_gdbarch_have_nonsteppable_watchpoint (gdbarch, 1); 2521 2522 /* Inferior function call methods. */ 2523 switch (tdep->bytes_per_address) 2524 { 2525 case 4: 2526 set_gdbarch_push_dummy_call (gdbarch, hppa32_push_dummy_call); 2527 set_gdbarch_frame_align (gdbarch, hppa32_frame_align); 2528 set_gdbarch_convert_from_func_ptr_addr 2529 (gdbarch, hppa32_convert_from_func_ptr_addr); 2530 break; 2531 case 8: 2532 set_gdbarch_push_dummy_call (gdbarch, hppa64_push_dummy_call); 2533 set_gdbarch_frame_align (gdbarch, hppa64_frame_align); 2534 break; 2535 default: 2536 internal_error (__FILE__, __LINE__, "bad switch"); 2537 } 2538 2539 /* Struct return methods. */ 2540 switch (tdep->bytes_per_address) 2541 { 2542 case 4: 2543 set_gdbarch_return_value (gdbarch, hppa32_return_value); 2544 break; 2545 case 8: 2546 set_gdbarch_return_value (gdbarch, hppa64_return_value); 2547 break; 2548 default: 2549 internal_error (__FILE__, __LINE__, "bad switch"); 2550 } 2551 2552 set_gdbarch_breakpoint_from_pc (gdbarch, hppa_breakpoint_from_pc); 2553 set_gdbarch_pseudo_register_read (gdbarch, hppa_pseudo_register_read); 2554 2555 /* Frame unwind methods. */ 2556 set_gdbarch_unwind_dummy_id (gdbarch, hppa_unwind_dummy_id); 2557 set_gdbarch_unwind_pc (gdbarch, hppa_unwind_pc); 2558 2559 /* Hook in ABI-specific overrides, if they have been registered. */ 2560 gdbarch_init_osabi (info, gdbarch); 2561 2562 /* Hook in the default unwinders. */ 2563 frame_unwind_append_sniffer (gdbarch, hppa_stub_unwind_sniffer); 2564 frame_unwind_append_sniffer (gdbarch, hppa_frame_unwind_sniffer); 2565 frame_unwind_append_sniffer (gdbarch, hppa_fallback_unwind_sniffer); 2566 2567 return gdbarch; 2568 } 2569 2570 static void 2571 hppa_dump_tdep (struct gdbarch *current_gdbarch, struct ui_file *file) 2572 { 2573 struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch); 2574 2575 fprintf_unfiltered (file, "bytes_per_address = %d\n", 2576 tdep->bytes_per_address); 2577 fprintf_unfiltered (file, "elf = %s\n", tdep->is_elf ? "yes" : "no"); 2578 } 2579 2580 void 2581 _initialize_hppa_tdep (void) 2582 { 2583 struct cmd_list_element *c; 2584 void break_at_finish_command (char *arg, int from_tty); 2585 void tbreak_at_finish_command (char *arg, int from_tty); 2586 void break_at_finish_at_depth_command (char *arg, int from_tty); 2587 2588 gdbarch_register (bfd_arch_hppa, hppa_gdbarch_init, hppa_dump_tdep); 2589 2590 hppa_objfile_priv_data = register_objfile_data (); 2591 2592 add_cmd ("unwind", class_maintenance, unwind_command, 2593 "Print unwind table entry at given address.", 2594 &maintenanceprintlist); 2595 2596 deprecate_cmd (add_com ("xbreak", class_breakpoint, 2597 break_at_finish_command, 2598 concat ("Set breakpoint at procedure exit. \n\ 2599 Argument may be function name, or \"*\" and an address.\n\ 2600 If function is specified, break at end of code for that function.\n\ 2601 If an address is specified, break at the end of the function that contains \n\ 2602 that exact address.\n", 2603 "With no arg, uses current execution address of selected stack frame.\n\ 2604 This is useful for breaking on return to a stack frame.\n\ 2605 \n\ 2606 Multiple breakpoints at one place are permitted, and useful if conditional.\n\ 2607 \n\ 2608 Do \"help breakpoints\" for info on other commands dealing with breakpoints.", NULL)), NULL); 2609 deprecate_cmd (add_com_alias ("xb", "xbreak", class_breakpoint, 1), NULL); 2610 deprecate_cmd (add_com_alias ("xbr", "xbreak", class_breakpoint, 1), NULL); 2611 deprecate_cmd (add_com_alias ("xbre", "xbreak", class_breakpoint, 1), NULL); 2612 deprecate_cmd (add_com_alias ("xbrea", "xbreak", class_breakpoint, 1), NULL); 2613 2614 deprecate_cmd (c = add_com ("txbreak", class_breakpoint, 2615 tbreak_at_finish_command, 2616 "Set temporary breakpoint at procedure exit. Either there should\n\ 2617 be no argument or the argument must be a depth.\n"), NULL); 2618 set_cmd_completer (c, location_completer); 2619 2620 if (xdb_commands) 2621 deprecate_cmd (add_com ("bx", class_breakpoint, 2622 break_at_finish_at_depth_command, 2623 "Set breakpoint at procedure exit. Either there should\n\ 2624 be no argument or the argument must be a depth.\n"), NULL); 2625 2626 /* Debug this files internals. */ 2627 deprecated_add_show_from_set 2628 (add_set_cmd ("hppa", class_maintenance, var_zinteger, 2629 &hppa_debug, "Set hppa debugging.\n\ 2630 When non-zero, hppa specific debugging is enabled.", &setdebuglist), 2631 &showdebuglist); 2632 } 2633