1#!/bin/sh -u 2 3# Architecture commands for GDB, the GNU debugger. 4# 5# Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software 6# Foundation, Inc. 7# 8# 9# This file is part of GDB. 10# 11# This program is free software; you can redistribute it and/or modify 12# it under the terms of the GNU General Public License as published by 13# the Free Software Foundation; either version 2 of the License, or 14# (at your option) any later version. 15# 16# This program is distributed in the hope that it will be useful, 17# but WITHOUT ANY WARRANTY; without even the implied warranty of 18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19# GNU General Public License for more details. 20# 21# You should have received a copy of the GNU General Public License 22# along with this program; if not, write to the Free Software 23# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 24 25# Make certain that the script is running in an internationalized 26# environment. 27LANG=c ; export LANG 28LC_ALL=c ; export LC_ALL 29 30 31compare_new () 32{ 33 file=$1 34 if test ! -r ${file} 35 then 36 echo "${file} missing? cp new-${file} ${file}" 1>&2 37 elif diff -u ${file} new-${file} 38 then 39 echo "${file} unchanged" 1>&2 40 else 41 echo "${file} has changed? cp new-${file} ${file}" 1>&2 42 fi 43} 44 45 46# Format of the input table 47read="class macro returntype function formal actual attrib staticdefault predefault postdefault invalid_p fmt print garbage_at_eol" 48 49do_read () 50{ 51 comment="" 52 class="" 53 while read line 54 do 55 if test "${line}" = "" 56 then 57 continue 58 elif test "${line}" = "#" -a "${comment}" = "" 59 then 60 continue 61 elif expr "${line}" : "#" > /dev/null 62 then 63 comment="${comment} 64${line}" 65 else 66 67 # The semantics of IFS varies between different SH's. Some 68 # treat ``::' as three fields while some treat it as just too. 69 # Work around this by eliminating ``::'' .... 70 line="`echo "${line}" | sed -e 's/::/: :/g' -e 's/::/: :/g'`" 71 72 OFS="${IFS}" ; IFS="[:]" 73 eval read ${read} <<EOF 74${line} 75EOF 76 IFS="${OFS}" 77 78 if test -n "${garbage_at_eol}" 79 then 80 echo "Garbage at end-of-line in ${line}" 1>&2 81 kill $$ 82 exit 1 83 fi 84 85 # .... and then going back through each field and strip out those 86 # that ended up with just that space character. 87 for r in ${read} 88 do 89 if eval test \"\${${r}}\" = \"\ \" 90 then 91 eval ${r}="" 92 fi 93 done 94 95 FUNCTION=`echo ${function} | tr '[a-z]' '[A-Z]'` 96 if test "x${macro}" = "x=" 97 then 98 # Provide a UCASE version of function (for when there isn't MACRO) 99 macro="${FUNCTION}" 100 elif test "${macro}" = "${FUNCTION}" 101 then 102 echo "${function}: Specify = for macro field" 1>&2 103 kill $$ 104 exit 1 105 fi 106 107 # Check that macro definition wasn't supplied for multi-arch 108 case "${class}" in 109 [mM] ) 110 if test "${macro}" != "" 111 then 112 echo "${macro}: Multi-arch yet macro" 1>&2 113 kill $$ 114 exit 1 115 fi 116 esac 117 118 case "${class}" in 119 m ) staticdefault="${predefault}" ;; 120 M ) staticdefault="0" ;; 121 * ) test "${staticdefault}" || staticdefault=0 ;; 122 esac 123 124 case "${class}" in 125 F | V | M ) 126 case "${invalid_p}" in 127 "" ) 128 if test -n "${predefault}" 129 then 130 #invalid_p="gdbarch->${function} == ${predefault}" 131 predicate="gdbarch->${function} != ${predefault}" 132 elif class_is_variable_p 133 then 134 predicate="gdbarch->${function} != 0" 135 elif class_is_function_p 136 then 137 predicate="gdbarch->${function} != NULL" 138 fi 139 ;; 140 * ) 141 echo "Predicate function ${function} with invalid_p." 1>&2 142 kill $$ 143 exit 1 144 ;; 145 esac 146 esac 147 148 # PREDEFAULT is a valid fallback definition of MEMBER when 149 # multi-arch is not enabled. This ensures that the 150 # default value, when multi-arch is the same as the 151 # default value when not multi-arch. POSTDEFAULT is 152 # always a valid definition of MEMBER as this again 153 # ensures consistency. 154 155 if [ -n "${postdefault}" ] 156 then 157 fallbackdefault="${postdefault}" 158 elif [ -n "${predefault}" ] 159 then 160 fallbackdefault="${predefault}" 161 else 162 fallbackdefault="0" 163 fi 164 165 #NOT YET: See gdbarch.log for basic verification of 166 # database 167 168 break 169 fi 170 done 171 if [ -n "${class}" ] 172 then 173 true 174 else 175 false 176 fi 177} 178 179 180fallback_default_p () 181{ 182 [ -n "${postdefault}" -a "x${invalid_p}" != "x0" ] \ 183 || [ -n "${predefault}" -a "x${invalid_p}" = "x0" ] 184} 185 186class_is_variable_p () 187{ 188 case "${class}" in 189 *v* | *V* ) true ;; 190 * ) false ;; 191 esac 192} 193 194class_is_function_p () 195{ 196 case "${class}" in 197 *f* | *F* | *m* | *M* ) true ;; 198 * ) false ;; 199 esac 200} 201 202class_is_multiarch_p () 203{ 204 case "${class}" in 205 *m* | *M* ) true ;; 206 * ) false ;; 207 esac 208} 209 210class_is_predicate_p () 211{ 212 case "${class}" in 213 *F* | *V* | *M* ) true ;; 214 * ) false ;; 215 esac 216} 217 218class_is_info_p () 219{ 220 case "${class}" in 221 *i* ) true ;; 222 * ) false ;; 223 esac 224} 225 226 227# dump out/verify the doco 228for field in ${read} 229do 230 case ${field} in 231 232 class ) : ;; 233 234 # # -> line disable 235 # f -> function 236 # hiding a function 237 # F -> function + predicate 238 # hiding a function + predicate to test function validity 239 # v -> variable 240 # hiding a variable 241 # V -> variable + predicate 242 # hiding a variable + predicate to test variables validity 243 # i -> set from info 244 # hiding something from the ``struct info'' object 245 # m -> multi-arch function 246 # hiding a multi-arch function (parameterised with the architecture) 247 # M -> multi-arch function + predicate 248 # hiding a multi-arch function + predicate to test function validity 249 250 macro ) : ;; 251 252 # The name of the legacy C macro by which this method can be 253 # accessed. If empty, no macro is defined. If "=", a macro 254 # formed from the upper-case function name is used. 255 256 returntype ) : ;; 257 258 # For functions, the return type; for variables, the data type 259 260 function ) : ;; 261 262 # For functions, the member function name; for variables, the 263 # variable name. Member function names are always prefixed with 264 # ``gdbarch_'' for name-space purity. 265 266 formal ) : ;; 267 268 # The formal argument list. It is assumed that the formal 269 # argument list includes the actual name of each list element. 270 # A function with no arguments shall have ``void'' as the 271 # formal argument list. 272 273 actual ) : ;; 274 275 # The list of actual arguments. The arguments specified shall 276 # match the FORMAL list given above. Functions with out 277 # arguments leave this blank. 278 279 attrib ) : ;; 280 281 # Any GCC attributes that should be attached to the function 282 # declaration. At present this field is unused. 283 284 staticdefault ) : ;; 285 286 # To help with the GDB startup a static gdbarch object is 287 # created. STATICDEFAULT is the value to insert into that 288 # static gdbarch object. Since this a static object only 289 # simple expressions can be used. 290 291 # If STATICDEFAULT is empty, zero is used. 292 293 predefault ) : ;; 294 295 # An initial value to assign to MEMBER of the freshly 296 # malloc()ed gdbarch object. After initialization, the 297 # freshly malloc()ed object is passed to the target 298 # architecture code for further updates. 299 300 # If PREDEFAULT is empty, zero is used. 301 302 # A non-empty PREDEFAULT, an empty POSTDEFAULT and a zero 303 # INVALID_P are specified, PREDEFAULT will be used as the 304 # default for the non- multi-arch target. 305 306 # A zero PREDEFAULT function will force the fallback to call 307 # internal_error(). 308 309 # Variable declarations can refer to ``gdbarch'' which will 310 # contain the current architecture. Care should be taken. 311 312 postdefault ) : ;; 313 314 # A value to assign to MEMBER of the new gdbarch object should 315 # the target architecture code fail to change the PREDEFAULT 316 # value. 317 318 # If POSTDEFAULT is empty, no post update is performed. 319 320 # If both INVALID_P and POSTDEFAULT are non-empty then 321 # INVALID_P will be used to determine if MEMBER should be 322 # changed to POSTDEFAULT. 323 324 # If a non-empty POSTDEFAULT and a zero INVALID_P are 325 # specified, POSTDEFAULT will be used as the default for the 326 # non- multi-arch target (regardless of the value of 327 # PREDEFAULT). 328 329 # You cannot specify both a zero INVALID_P and a POSTDEFAULT. 330 331 # Variable declarations can refer to ``current_gdbarch'' which 332 # will contain the current architecture. Care should be 333 # taken. 334 335 invalid_p ) : ;; 336 337 # A predicate equation that validates MEMBER. Non-zero is 338 # returned if the code creating the new architecture failed to 339 # initialize MEMBER or the initialized the member is invalid. 340 # If POSTDEFAULT is non-empty then MEMBER will be updated to 341 # that value. If POSTDEFAULT is empty then internal_error() 342 # is called. 343 344 # If INVALID_P is empty, a check that MEMBER is no longer 345 # equal to PREDEFAULT is used. 346 347 # The expression ``0'' disables the INVALID_P check making 348 # PREDEFAULT a legitimate value. 349 350 # See also PREDEFAULT and POSTDEFAULT. 351 352 fmt ) : ;; 353 354 # printf style format string that can be used to print out the 355 # MEMBER. Sometimes "%s" is useful. For functions, this is 356 # ignored and the function address is printed. 357 358 # If FMT is empty, ``%ld'' is used. 359 360 print ) : ;; 361 362 # An optional equation that casts MEMBER to a value suitable 363 # for formatting by FMT. 364 365 # If PRINT is empty, ``(long)'' is used. 366 367 garbage_at_eol ) : ;; 368 369 # Catches stray fields. 370 371 *) 372 echo "Bad field ${field}" 373 exit 1;; 374 esac 375done 376 377 378function_list () 379{ 380 # See below (DOCO) for description of each field 381 cat <<EOF 382i:TARGET_ARCHITECTURE:const struct bfd_arch_info *:bfd_arch_info::::&bfd_default_arch_struct::::%s:TARGET_ARCHITECTURE->printable_name 383# 384i:TARGET_BYTE_ORDER:int:byte_order::::BFD_ENDIAN_BIG 385# 386i:TARGET_OSABI:enum gdb_osabi:osabi::::GDB_OSABI_UNKNOWN 387# Number of bits in a char or unsigned char for the target machine. 388# Just like CHAR_BIT in <limits.h> but describes the target machine. 389# v:TARGET_CHAR_BIT:int:char_bit::::8 * sizeof (char):8::0: 390# 391# Number of bits in a short or unsigned short for the target machine. 392v:TARGET_SHORT_BIT:int:short_bit::::8 * sizeof (short):2*TARGET_CHAR_BIT::0 393# Number of bits in an int or unsigned int for the target machine. 394v:TARGET_INT_BIT:int:int_bit::::8 * sizeof (int):4*TARGET_CHAR_BIT::0 395# Number of bits in a long or unsigned long for the target machine. 396v:TARGET_LONG_BIT:int:long_bit::::8 * sizeof (long):4*TARGET_CHAR_BIT::0 397# Number of bits in a long long or unsigned long long for the target 398# machine. 399v:TARGET_LONG_LONG_BIT:int:long_long_bit::::8 * sizeof (LONGEST):2*TARGET_LONG_BIT::0 400# Number of bits in a float for the target machine. 401v:TARGET_FLOAT_BIT:int:float_bit::::8 * sizeof (float):4*TARGET_CHAR_BIT::0 402# Number of bits in a double for the target machine. 403v:TARGET_DOUBLE_BIT:int:double_bit::::8 * sizeof (double):8*TARGET_CHAR_BIT::0 404# Number of bits in a long double for the target machine. 405v:TARGET_LONG_DOUBLE_BIT:int:long_double_bit::::8 * sizeof (long double):8*TARGET_CHAR_BIT::0 406# For most targets, a pointer on the target and its representation as an 407# address in GDB have the same size and "look the same". For such a 408# target, you need only set TARGET_PTR_BIT / ptr_bit and TARGET_ADDR_BIT 409# / addr_bit will be set from it. 410# 411# If TARGET_PTR_BIT and TARGET_ADDR_BIT are different, you'll probably 412# also need to set POINTER_TO_ADDRESS and ADDRESS_TO_POINTER as well. 413# 414# ptr_bit is the size of a pointer on the target 415v:TARGET_PTR_BIT:int:ptr_bit::::8 * sizeof (void*):TARGET_INT_BIT::0 416# addr_bit is the size of a target address as represented in gdb 417v:TARGET_ADDR_BIT:int:addr_bit::::8 * sizeof (void*):0:TARGET_PTR_BIT: 418# Number of bits in a BFD_VMA for the target object file format. 419v:TARGET_BFD_VMA_BIT:int:bfd_vma_bit::::8 * sizeof (void*):TARGET_ARCHITECTURE->bits_per_address::0 420# 421# One if \`char' acts like \`signed char', zero if \`unsigned char'. 422v:TARGET_CHAR_SIGNED:int:char_signed::::1:-1:1:::: 423# 424F:TARGET_READ_PC:CORE_ADDR:read_pc:ptid_t ptid:ptid 425f:TARGET_WRITE_PC:void:write_pc:CORE_ADDR val, ptid_t ptid:val, ptid::0:generic_target_write_pc::0 426# UNWIND_SP is a direct replacement for TARGET_READ_SP. 427F:TARGET_READ_SP:CORE_ADDR:read_sp:void 428# Function for getting target's idea of a frame pointer. FIXME: GDB's 429# whole scheme for dealing with "frames" and "frame pointers" needs a 430# serious shakedown. 431f:TARGET_VIRTUAL_FRAME_POINTER:void:virtual_frame_pointer:CORE_ADDR pc, int *frame_regnum, LONGEST *frame_offset:pc, frame_regnum, frame_offset::0:legacy_virtual_frame_pointer::0 432# 433M::void:pseudo_register_read:struct regcache *regcache, int cookednum, void *buf:regcache, cookednum, buf 434M::void:pseudo_register_write:struct regcache *regcache, int cookednum, const void *buf:regcache, cookednum, buf 435# 436v:=:int:num_regs::::0:-1 437# This macro gives the number of pseudo-registers that live in the 438# register namespace but do not get fetched or stored on the target. 439# These pseudo-registers may be aliases for other registers, 440# combinations of other registers, or they may be computed by GDB. 441v:=:int:num_pseudo_regs::::0:0::0::: 442 443# GDB's standard (or well known) register numbers. These can map onto 444# a real register or a pseudo (computed) register or not be defined at 445# all (-1). 446# SP_REGNUM will hopefully be replaced by UNWIND_SP. 447v:=:int:sp_regnum::::-1:-1::0 448v:=:int:pc_regnum::::-1:-1::0 449v:=:int:ps_regnum::::-1:-1::0 450v:=:int:fp0_regnum::::0:-1::0 451# Convert stab register number (from \`r\' declaration) to a gdb REGNUM. 452f:=:int:stab_reg_to_regnum:int stab_regnr:stab_regnr:::no_op_reg_to_regnum::0 453# Provide a default mapping from a ecoff register number to a gdb REGNUM. 454f:=:int:ecoff_reg_to_regnum:int ecoff_regnr:ecoff_regnr:::no_op_reg_to_regnum::0 455# Provide a default mapping from a DWARF register number to a gdb REGNUM. 456f:=:int:dwarf_reg_to_regnum:int dwarf_regnr:dwarf_regnr:::no_op_reg_to_regnum::0 457# Convert from an sdb register number to an internal gdb register number. 458f:=:int:sdb_reg_to_regnum:int sdb_regnr:sdb_regnr:::no_op_reg_to_regnum::0 459f:=:int:dwarf2_reg_to_regnum:int dwarf2_regnr:dwarf2_regnr:::no_op_reg_to_regnum::0 460f:=:const char *:register_name:int regnr:regnr 461 462# REGISTER_TYPE is a direct replacement for DEPRECATED_REGISTER_VIRTUAL_TYPE. 463M::struct type *:register_type:int reg_nr:reg_nr 464# REGISTER_TYPE is a direct replacement for DEPRECATED_REGISTER_VIRTUAL_TYPE. 465F:=:struct type *:deprecated_register_virtual_type:int reg_nr:reg_nr 466# DEPRECATED_REGISTER_BYTES can be deleted. The value is computed 467# from REGISTER_TYPE. 468v:=:int:deprecated_register_bytes 469# If the value returned by DEPRECATED_REGISTER_BYTE agrees with the 470# register offsets computed using just REGISTER_TYPE, this can be 471# deleted. See: maint print registers. NOTE: cagney/2002-05-02: This 472# function with predicate has a valid (callable) initial value. As a 473# consequence, even when the predicate is false, the corresponding 474# function works. This simplifies the migration process - old code, 475# calling DEPRECATED_REGISTER_BYTE, doesn't need to be modified. 476F:=:int:deprecated_register_byte:int reg_nr:reg_nr::generic_register_byte:generic_register_byte 477# If all registers have identical raw and virtual sizes and those 478# sizes agree with the value computed from REGISTER_TYPE, 479# DEPRECATED_REGISTER_RAW_SIZE can be deleted. See: maint print 480# registers. 481F:=:int:deprecated_register_raw_size:int reg_nr:reg_nr::generic_register_size:generic_register_size 482# If all registers have identical raw and virtual sizes and those 483# sizes agree with the value computed from REGISTER_TYPE, 484# DEPRECATED_REGISTER_VIRTUAL_SIZE can be deleted. See: maint print 485# registers. 486F:=:int:deprecated_register_virtual_size:int reg_nr:reg_nr::generic_register_size:generic_register_size 487 488# See gdbint.texinfo, and PUSH_DUMMY_CALL. 489M::struct frame_id:unwind_dummy_id:struct frame_info *info:info 490# Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete 491# SAVE_DUMMY_FRAME_TOS. 492F:=:void:deprecated_save_dummy_frame_tos:CORE_ADDR sp:sp 493# Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete 494# DEPRECATED_FP_REGNUM. 495v:=:int:deprecated_fp_regnum::::-1:-1::0 496# Implement UNWIND_DUMMY_ID and PUSH_DUMMY_CALL, then delete 497# DEPRECATED_TARGET_READ_FP. 498F:=:CORE_ADDR:deprecated_target_read_fp:void 499 500# See gdbint.texinfo. See infcall.c. New, all singing all dancing, 501# replacement for DEPRECATED_PUSH_ARGUMENTS. 502M::CORE_ADDR:push_dummy_call:struct value *function, struct regcache *regcache, CORE_ADDR bp_addr, int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:function, regcache, bp_addr, nargs, args, sp, struct_return, struct_addr 503# PUSH_DUMMY_CALL is a direct replacement for DEPRECATED_PUSH_ARGUMENTS. 504F:=:CORE_ADDR:deprecated_push_arguments:int nargs, struct value **args, CORE_ADDR sp, int struct_return, CORE_ADDR struct_addr:nargs, args, sp, struct_return, struct_addr 505# Implement PUSH_RETURN_ADDRESS, and then merge in 506# DEPRECATED_PUSH_RETURN_ADDRESS. 507F:=:CORE_ADDR:deprecated_push_return_address:CORE_ADDR pc, CORE_ADDR sp:pc, sp 508# Implement PUSH_DUMMY_CALL, then merge in DEPRECATED_DUMMY_WRITE_SP. 509F:=:void:deprecated_dummy_write_sp:CORE_ADDR val:val 510# DEPRECATED_REGISTER_SIZE can be deleted. 511v:=:int:deprecated_register_size 512v:=:int:call_dummy_location:::::AT_ENTRY_POINT::0 513M::CORE_ADDR:push_dummy_code:CORE_ADDR sp, CORE_ADDR funaddr, int using_gcc, struct value **args, int nargs, struct type *value_type, CORE_ADDR *real_pc, CORE_ADDR *bp_addr:sp, funaddr, using_gcc, args, nargs, value_type, real_pc, bp_addr 514 515F:=:void:deprecated_do_registers_info:int reg_nr, int fpregs:reg_nr, fpregs 516m::void:print_registers_info:struct ui_file *file, struct frame_info *frame, int regnum, int all:file, frame, regnum, all:::default_print_registers_info::0 517M::void:print_float_info:struct ui_file *file, struct frame_info *frame, const char *args:file, frame, args 518M::void:print_vector_info:struct ui_file *file, struct frame_info *frame, const char *args:file, frame, args 519# MAP a GDB RAW register number onto a simulator register number. See 520# also include/...-sim.h. 521f:=:int:register_sim_regno:int reg_nr:reg_nr:::legacy_register_sim_regno::0 522F:=:int:register_bytes_ok:long nr_bytes:nr_bytes 523f:=:int:cannot_fetch_register:int regnum:regnum:::cannot_register_not::0 524f:=:int:cannot_store_register:int regnum:regnum:::cannot_register_not::0 525# setjmp/longjmp support. 526F:=:int:get_longjmp_target:CORE_ADDR *pc:pc 527F:=:CORE_ADDR:deprecated_init_frame_pc:int fromleaf, struct frame_info *prev:fromleaf, prev 528# 529v:=:int:believe_pcc_promotion::::::: 530F:=:void:deprecated_get_saved_register:char *raw_buffer, int *optimized, CORE_ADDR *addrp, struct frame_info *frame, int regnum, enum lval_type *lval:raw_buffer, optimized, addrp, frame, regnum, lval 531# 532f:=:int:convert_register_p:int regnum, struct type *type:regnum, type::0:generic_convert_register_p::0 533f:=:void:register_to_value:struct frame_info *frame, int regnum, struct type *type, void *buf:frame, regnum, type, buf::0 534f:=:void:value_to_register:struct frame_info *frame, int regnum, struct type *type, const void *buf:frame, regnum, type, buf::0 535# 536f:=:CORE_ADDR:pointer_to_address:struct type *type, const void *buf:type, buf:::unsigned_pointer_to_address::0 537f:=:void:address_to_pointer:struct type *type, void *buf, CORE_ADDR addr:type, buf, addr:::unsigned_address_to_pointer::0 538F:=:CORE_ADDR:integer_to_address:struct type *type, void *buf:type, buf 539# 540F:=:void:deprecated_pop_frame:void:- 541# NOTE: cagney/2003-03-24: Replaced by PUSH_ARGUMENTS. 542F:=:void:deprecated_store_struct_return:CORE_ADDR addr, CORE_ADDR sp:addr, sp 543 544# It has been suggested that this, well actually its predecessor, 545# should take the type/value of the function to be called and not the 546# return type. This is left as an exercise for the reader. 547 548# NOTE: cagney/2004-06-13: The function stack.c:return_command uses 549# the predicate with default hack to avoid calling STORE_RETURN_VALUE 550# (via legacy_return_value), when a small struct is involved. 551 552M::enum return_value_convention:return_value:struct type *valtype, struct regcache *regcache, void *readbuf, const void *writebuf:valtype, regcache, readbuf, writebuf:::legacy_return_value 553 554# The deprecated methods EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE, 555# DEPRECATED_EXTRACT_STRUCT_VALUE_ADDRESS and 556# DEPRECATED_USE_STRUCT_CONVENTION have all been folded into 557# RETURN_VALUE. 558 559f:=:void:extract_return_value:struct type *type, struct regcache *regcache, void *valbuf:type, regcache, valbuf:::legacy_extract_return_value::0 560f:=:void:store_return_value:struct type *type, struct regcache *regcache, const void *valbuf:type, regcache, valbuf:::legacy_store_return_value::0 561f:=:void:deprecated_extract_return_value:struct type *type, char *regbuf, char *valbuf:type, regbuf, valbuf 562f:=:void:deprecated_store_return_value:struct type *type, char *valbuf:type, valbuf 563f:=:int:deprecated_use_struct_convention:int gcc_p, struct type *value_type:gcc_p, value_type:::generic_use_struct_convention::0 564 565# As of 2004-01-17 only the 32-bit SPARC ABI has been identified as an 566# ABI suitable for the implementation of a robust extract 567# struct-convention return-value address method (the sparc saves the 568# address in the callers frame). All the other cases so far examined, 569# the DEPRECATED_EXTRACT_STRUCT_VALUE implementation has been 570# erreneous - the code was incorrectly assuming that the return-value 571# address, stored in a register, was preserved across the entire 572# function call. 573 574# For the moment retain DEPRECATED_EXTRACT_STRUCT_VALUE as a marker of 575# the ABIs that are still to be analyzed - perhaps this should simply 576# be deleted. The commented out extract_returned_value_address method 577# is provided as a starting point for the 32-bit SPARC. It, or 578# something like it, along with changes to both infcmd.c and stack.c 579# will be needed for that case to work. NB: It is passed the callers 580# frame since it is only after the callee has returned that this 581# function is used. 582 583#M::CORE_ADDR:extract_returned_value_address:struct frame_info *caller_frame:caller_frame 584F:=:CORE_ADDR:deprecated_extract_struct_value_address:struct regcache *regcache:regcache 585 586F:=:void:deprecated_frame_init_saved_regs:struct frame_info *frame:frame 587F:=:void:deprecated_init_extra_frame_info:int fromleaf, struct frame_info *frame:fromleaf, frame 588# 589f:=:CORE_ADDR:skip_prologue:CORE_ADDR ip:ip::0:0 590f:=:int:inner_than:CORE_ADDR lhs, CORE_ADDR rhs:lhs, rhs::0:0 591f:=:const unsigned char *:breakpoint_from_pc:CORE_ADDR *pcptr, int *lenptr:pcptr, lenptr:::0: 592M::CORE_ADDR:adjust_breakpoint_address:CORE_ADDR bpaddr:bpaddr 593f:=:int:memory_insert_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_insert_breakpoint::0 594f:=:int:memory_remove_breakpoint:CORE_ADDR addr, char *contents_cache:addr, contents_cache::0:default_memory_remove_breakpoint::0 595v:=:CORE_ADDR:decr_pc_after_break::::0:::0 596 597# A function can be addressed by either it's "pointer" (possibly a 598# descriptor address) or "entry point" (first executable instruction). 599# The method "convert_from_func_ptr_addr" converting the former to the 600# latter. DEPRECATED_FUNCTION_START_OFFSET is being used to implement 601# a simplified subset of that functionality - the function's address 602# corresponds to the "function pointer" and the function's start 603# corresponds to the "function entry point" - and hence is redundant. 604 605v:=:CORE_ADDR:deprecated_function_start_offset::::0:::0 606 607m::void:remote_translate_xfer_address:struct regcache *regcache, CORE_ADDR gdb_addr, int gdb_len, CORE_ADDR *rem_addr, int *rem_len:regcache, gdb_addr, gdb_len, rem_addr, rem_len:::generic_remote_translate_xfer_address::0 608# 609v:=:CORE_ADDR:frame_args_skip::::0:::0 610# DEPRECATED_FRAMELESS_FUNCTION_INVOCATION is not needed. The new 611# frame code works regardless of the type of frame - frameless, 612# stackless, or normal. 613F:=:int:deprecated_frameless_function_invocation:struct frame_info *fi:fi 614F:=:CORE_ADDR:deprecated_frame_chain:struct frame_info *frame:frame 615F:=:int:deprecated_frame_chain_valid:CORE_ADDR chain, struct frame_info *thisframe:chain, thisframe 616# DEPRECATED_FRAME_SAVED_PC has been replaced by UNWIND_PC. Please 617# note, per UNWIND_PC's doco, that while the two have similar 618# interfaces they have very different underlying implementations. 619F:=:CORE_ADDR:deprecated_frame_saved_pc:struct frame_info *fi:fi 620M::CORE_ADDR:unwind_pc:struct frame_info *next_frame:next_frame 621M::CORE_ADDR:unwind_sp:struct frame_info *next_frame:next_frame 622# DEPRECATED_FRAME_ARGS_ADDRESS as been replaced by the per-frame 623# frame-base. Enable frame-base before frame-unwind. 624F:=:CORE_ADDR:deprecated_frame_args_address:struct frame_info *fi:fi::get_frame_base:get_frame_base 625# DEPRECATED_FRAME_LOCALS_ADDRESS as been replaced by the per-frame 626# frame-base. Enable frame-base before frame-unwind. 627F:=:CORE_ADDR:deprecated_frame_locals_address:struct frame_info *fi:fi::get_frame_base:get_frame_base 628F:=:CORE_ADDR:deprecated_saved_pc_after_call:struct frame_info *frame:frame 629F:=:int:frame_num_args:struct frame_info *frame:frame 630# 631# DEPRECATED_STACK_ALIGN has been replaced by an initial aligning call 632# to frame_align and the requirement that methods such as 633# push_dummy_call and frame_red_zone_size maintain correct stack/frame 634# alignment. 635F:=:CORE_ADDR:deprecated_stack_align:CORE_ADDR sp:sp 636M::CORE_ADDR:frame_align:CORE_ADDR address:address 637# DEPRECATED_REG_STRUCT_HAS_ADDR has been replaced by 638# stabs_argument_has_addr. 639F:=:int:deprecated_reg_struct_has_addr:int gcc_p, struct type *type:gcc_p, type 640m::int:stabs_argument_has_addr:struct type *type:type:::default_stabs_argument_has_addr::0 641v:=:int:frame_red_zone_size 642# 643v:TARGET_FLOAT_FORMAT:const struct floatformat *:float_format::::::default_float_format (current_gdbarch)::%s:(TARGET_FLOAT_FORMAT)->name 644v:TARGET_DOUBLE_FORMAT:const struct floatformat *:double_format::::::default_double_format (current_gdbarch)::%s:(TARGET_DOUBLE_FORMAT)->name 645v:TARGET_LONG_DOUBLE_FORMAT:const struct floatformat *:long_double_format::::::default_double_format (current_gdbarch)::%s:(TARGET_LONG_DOUBLE_FORMAT)->name 646m::CORE_ADDR:convert_from_func_ptr_addr:CORE_ADDR addr, struct target_ops *targ:addr, targ:::convert_from_func_ptr_addr_identity::0 647# On some machines there are bits in addresses which are not really 648# part of the address, but are used by the kernel, the hardware, etc. 649# for special purposes. ADDR_BITS_REMOVE takes out any such bits so 650# we get a "real" address such as one would find in a symbol table. 651# This is used only for addresses of instructions, and even then I'm 652# not sure it's used in all contexts. It exists to deal with there 653# being a few stray bits in the PC which would mislead us, not as some 654# sort of generic thing to handle alignment or segmentation (it's 655# possible it should be in TARGET_READ_PC instead). 656f:=:CORE_ADDR:addr_bits_remove:CORE_ADDR addr:addr:::core_addr_identity::0 657# It is not at all clear why SMASH_TEXT_ADDRESS is not folded into 658# ADDR_BITS_REMOVE. 659f:=:CORE_ADDR:smash_text_address:CORE_ADDR addr:addr:::core_addr_identity::0 660# FIXME/cagney/2001-01-18: This should be split in two. A target method that indicates if 661# the target needs software single step. An ISA method to implement it. 662# 663# FIXME/cagney/2001-01-18: This should be replaced with something that inserts breakpoints 664# using the breakpoint system instead of blatting memory directly (as with rs6000). 665# 666# FIXME/cagney/2001-01-18: The logic is backwards. It should be asking if the target can 667# single step. If not, then implement single step using breakpoints. 668F:=:void:software_single_step:enum target_signal sig, int insert_breakpoints_p:sig, insert_breakpoints_p 669# FIXME: cagney/2003-08-28: Need to find a better way of selecting the 670# disassembler. Perhaphs objdump can handle it? 671f:TARGET_PRINT_INSN:int:print_insn:bfd_vma vma, struct disassemble_info *info:vma, info:::0: 672f:=:CORE_ADDR:skip_trampoline_code:CORE_ADDR pc:pc:::generic_skip_trampoline_code::0 673 674 675# If IN_SOLIB_DYNSYM_RESOLVE_CODE returns true, and SKIP_SOLIB_RESOLVER 676# evaluates non-zero, this is the address where the debugger will place 677# a step-resume breakpoint to get us past the dynamic linker. 678m::CORE_ADDR:skip_solib_resolver:CORE_ADDR pc:pc:::generic_skip_solib_resolver::0 679# For SVR4 shared libraries, each call goes through a small piece of 680# trampoline code in the ".plt" section. IN_SOLIB_CALL_TRAMPOLINE evaluates 681# to nonzero if we are currently stopped in one of these. 682f:=:int:in_solib_call_trampoline:CORE_ADDR pc, char *name:pc, name:::generic_in_solib_call_trampoline::0 683 684# Some systems also have trampoline code for returning from shared libs. 685f:=:int:in_solib_return_trampoline:CORE_ADDR pc, char *name:pc, name:::generic_in_solib_return_trampoline::0 686 687# A target might have problems with watchpoints as soon as the stack 688# frame of the current function has been destroyed. This mostly happens 689# as the first action in a funtion's epilogue. in_function_epilogue_p() 690# is defined to return a non-zero value if either the given addr is one 691# instruction after the stack destroying instruction up to the trailing 692# return instruction or if we can figure out that the stack frame has 693# already been invalidated regardless of the value of addr. Targets 694# which don't suffer from that problem could just let this functionality 695# untouched. 696m::int:in_function_epilogue_p:CORE_ADDR addr:addr::0:generic_in_function_epilogue_p::0 697# Given a vector of command-line arguments, return a newly allocated 698# string which, when passed to the create_inferior function, will be 699# parsed (on Unix systems, by the shell) to yield the same vector. 700# This function should call error() if the argument vector is not 701# representable for this target or if this target does not support 702# command-line arguments. 703# ARGC is the number of elements in the vector. 704# ARGV is an array of strings, one per argument. 705m::char *:construct_inferior_arguments:int argc, char **argv:argc, argv:::construct_inferior_arguments::0 706f:=:void:elf_make_msymbol_special:asymbol *sym, struct minimal_symbol *msym:sym, msym:::default_elf_make_msymbol_special::0 707f:=:void:coff_make_msymbol_special:int val, struct minimal_symbol *msym:val, msym:::default_coff_make_msymbol_special::0 708v:=:const char *:name_of_malloc::::"malloc":"malloc"::0:%s:NAME_OF_MALLOC 709v:=:int:cannot_step_breakpoint::::0:0::0 710v:=:int:have_nonsteppable_watchpoint::::0:0::0 711F:=:int:address_class_type_flags:int byte_size, int dwarf2_addr_class:byte_size, dwarf2_addr_class 712M::const char *:address_class_type_flags_to_name:int type_flags:type_flags 713M::int:address_class_name_to_type_flags:const char *name, int *type_flags_ptr:name, type_flags_ptr 714# Is a register in a group 715m::int:register_reggroup_p:int regnum, struct reggroup *reggroup:regnum, reggroup:::default_register_reggroup_p::0 716# Fetch the pointer to the ith function argument. 717F:=:CORE_ADDR:fetch_pointer_argument:struct frame_info *frame, int argi, struct type *type:frame, argi, type 718 719# Return the appropriate register set for a core file section with 720# name SECT_NAME and size SECT_SIZE. 721M::const struct regset *:regset_from_core_section:const char *sect_name, size_t sect_size:sect_name, sect_size 722EOF 723} 724 725# 726# The .log file 727# 728exec > new-gdbarch.log 729function_list | while do_read 730do 731 cat <<EOF 732${class} ${returntype} ${function} ($formal)${attrib} 733EOF 734 for r in ${read} 735 do 736 eval echo \"\ \ \ \ ${r}=\${${r}}\" 737 done 738 if class_is_predicate_p && fallback_default_p 739 then 740 echo "Error: predicate function ${function} can not have a non- multi-arch default" 1>&2 741 kill $$ 742 exit 1 743 fi 744 if [ "x${invalid_p}" = "x0" -a -n "${postdefault}" ] 745 then 746 echo "Error: postdefault is useless when invalid_p=0" 1>&2 747 kill $$ 748 exit 1 749 fi 750 if class_is_multiarch_p 751 then 752 if class_is_predicate_p ; then : 753 elif test "x${predefault}" = "x" 754 then 755 echo "Error: pure multi-arch function must have a predefault" 1>&2 756 kill $$ 757 exit 1 758 fi 759 fi 760 echo "" 761done 762 763exec 1>&2 764compare_new gdbarch.log 765 766 767copyright () 768{ 769cat <<EOF 770/* *INDENT-OFF* */ /* THIS FILE IS GENERATED */ 771 772/* Dynamic architecture support for GDB, the GNU debugger. 773 774 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free 775 Software Foundation, Inc. 776 777 This file is part of GDB. 778 779 This program is free software; you can redistribute it and/or modify 780 it under the terms of the GNU General Public License as published by 781 the Free Software Foundation; either version 2 of the License, or 782 (at your option) any later version. 783 784 This program is distributed in the hope that it will be useful, 785 but WITHOUT ANY WARRANTY; without even the implied warranty of 786 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 787 GNU General Public License for more details. 788 789 You should have received a copy of the GNU General Public License 790 along with this program; if not, write to the Free Software 791 Foundation, Inc., 59 Temple Place - Suite 330, 792 Boston, MA 02111-1307, USA. */ 793 794/* This file was created with the aid of \`\`gdbarch.sh''. 795 796 The Bourne shell script \`\`gdbarch.sh'' creates the files 797 \`\`new-gdbarch.c'' and \`\`new-gdbarch.h and then compares them 798 against the existing \`\`gdbarch.[hc]''. Any differences found 799 being reported. 800 801 If editing this file, please also run gdbarch.sh and merge any 802 changes into that script. Conversely, when making sweeping changes 803 to this file, modifying gdbarch.sh and using its output may prove 804 easier. */ 805 806EOF 807} 808 809# 810# The .h file 811# 812 813exec > new-gdbarch.h 814copyright 815cat <<EOF 816#ifndef GDBARCH_H 817#define GDBARCH_H 818 819struct floatformat; 820struct ui_file; 821struct frame_info; 822struct value; 823struct objfile; 824struct minimal_symbol; 825struct regcache; 826struct reggroup; 827struct regset; 828struct disassemble_info; 829struct target_ops; 830struct obstack; 831 832extern struct gdbarch *current_gdbarch; 833 834/* If any of the following are defined, the target wasn't correctly 835 converted. */ 836 837#if (GDB_MULTI_ARCH >= GDB_MULTI_ARCH_PURE) && defined (GDB_TM_FILE) 838#error "GDB_TM_FILE: Pure multi-arch targets do not have a tm.h file." 839#endif 840EOF 841 842# function typedef's 843printf "\n" 844printf "\n" 845printf "/* The following are pre-initialized by GDBARCH. */\n" 846function_list | while do_read 847do 848 if class_is_info_p 849 then 850 printf "\n" 851 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n" 852 printf "/* set_gdbarch_${function}() - not applicable - pre-initialized. */\n" 853 if test -n "${macro}" 854 then 855 printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n" 856 printf "#error \"Non multi-arch definition of ${macro}\"\n" 857 printf "#endif\n" 858 printf "#if !defined (${macro})\n" 859 printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n" 860 printf "#endif\n" 861 fi 862 fi 863done 864 865# function typedef's 866printf "\n" 867printf "\n" 868printf "/* The following are initialized by the target dependent code. */\n" 869function_list | while do_read 870do 871 if [ -n "${comment}" ] 872 then 873 echo "${comment}" | sed \ 874 -e '2 s,#,/*,' \ 875 -e '3,$ s,#, ,' \ 876 -e '$ s,$, */,' 877 fi 878 879 if class_is_predicate_p 880 then 881 if test -n "${macro}" 882 then 883 printf "\n" 884 printf "#if defined (${macro})\n" 885 printf "/* Legacy for systems yet to multi-arch ${macro} */\n" 886 printf "#if !defined (${macro}_P)\n" 887 printf "#define ${macro}_P() (1)\n" 888 printf "#endif\n" 889 printf "#endif\n" 890 fi 891 printf "\n" 892 printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n" 893 if test -n "${macro}" 894 then 895 printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (${macro}_P)\n" 896 printf "#error \"Non multi-arch definition of ${macro}\"\n" 897 printf "#endif\n" 898 printf "#if !defined (${macro}_P)\n" 899 printf "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))\n" 900 printf "#endif\n" 901 fi 902 fi 903 if class_is_variable_p 904 then 905 printf "\n" 906 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n" 907 printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, ${returntype} ${function});\n" 908 if test -n "${macro}" 909 then 910 printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n" 911 printf "#error \"Non multi-arch definition of ${macro}\"\n" 912 printf "#endif\n" 913 printf "#if !defined (${macro})\n" 914 printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n" 915 printf "#endif\n" 916 fi 917 fi 918 if class_is_function_p 919 then 920 printf "\n" 921 if [ "x${formal}" = "xvoid" ] && class_is_multiarch_p 922 then 923 printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n" 924 elif class_is_multiarch_p 925 then 926 printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n" 927 else 928 printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n" 929 fi 930 if [ "x${formal}" = "xvoid" ] 931 then 932 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n" 933 else 934 printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n" 935 fi 936 printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n" 937 if test -n "${macro}" 938 then 939 printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n" 940 printf "#error \"Non multi-arch definition of ${macro}\"\n" 941 printf "#endif\n" 942 if [ "x${actual}" = "x" ] 943 then 944 d="#define ${macro}() (gdbarch_${function} (current_gdbarch))" 945 elif [ "x${actual}" = "x-" ] 946 then 947 d="#define ${macro} (gdbarch_${function} (current_gdbarch))" 948 else 949 d="#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))" 950 fi 951 printf "#if !defined (${macro})\n" 952 if [ "x${actual}" = "x" ] 953 then 954 printf "#define ${macro}() (gdbarch_${function} (current_gdbarch))\n" 955 elif [ "x${actual}" = "x-" ] 956 then 957 printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n" 958 else 959 printf "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))\n" 960 fi 961 printf "#endif\n" 962 fi 963 fi 964done 965 966# close it off 967cat <<EOF 968 969extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch); 970 971 972/* Mechanism for co-ordinating the selection of a specific 973 architecture. 974 975 GDB targets (*-tdep.c) can register an interest in a specific 976 architecture. Other GDB components can register a need to maintain 977 per-architecture data. 978 979 The mechanisms below ensures that there is only a loose connection 980 between the set-architecture command and the various GDB 981 components. Each component can independently register their need 982 to maintain architecture specific data with gdbarch. 983 984 Pragmatics: 985 986 Previously, a single TARGET_ARCHITECTURE_HOOK was provided. It 987 didn't scale. 988 989 The more traditional mega-struct containing architecture specific 990 data for all the various GDB components was also considered. Since 991 GDB is built from a variable number of (fairly independent) 992 components it was determined that the global aproach was not 993 applicable. */ 994 995 996/* Register a new architectural family with GDB. 997 998 Register support for the specified ARCHITECTURE with GDB. When 999 gdbarch determines that the specified architecture has been 1000 selected, the corresponding INIT function is called. 1001 1002 -- 1003 1004 The INIT function takes two parameters: INFO which contains the 1005 information available to gdbarch about the (possibly new) 1006 architecture; ARCHES which is a list of the previously created 1007 \`\`struct gdbarch'' for this architecture. 1008 1009 The INFO parameter is, as far as possible, be pre-initialized with 1010 information obtained from INFO.ABFD or the previously selected 1011 architecture. 1012 1013 The ARCHES parameter is a linked list (sorted most recently used) 1014 of all the previously created architures for this architecture 1015 family. The (possibly NULL) ARCHES->gdbarch can used to access 1016 values from the previously selected architecture for this 1017 architecture family. The global \`\`current_gdbarch'' shall not be 1018 used. 1019 1020 The INIT function shall return any of: NULL - indicating that it 1021 doesn't recognize the selected architecture; an existing \`\`struct 1022 gdbarch'' from the ARCHES list - indicating that the new 1023 architecture is just a synonym for an earlier architecture (see 1024 gdbarch_list_lookup_by_info()); a newly created \`\`struct gdbarch'' 1025 - that describes the selected architecture (see gdbarch_alloc()). 1026 1027 The DUMP_TDEP function shall print out all target specific values. 1028 Care should be taken to ensure that the function works in both the 1029 multi-arch and non- multi-arch cases. */ 1030 1031struct gdbarch_list 1032{ 1033 struct gdbarch *gdbarch; 1034 struct gdbarch_list *next; 1035}; 1036 1037struct gdbarch_info 1038{ 1039 /* Use default: NULL (ZERO). */ 1040 const struct bfd_arch_info *bfd_arch_info; 1041 1042 /* Use default: BFD_ENDIAN_UNKNOWN (NB: is not ZERO). */ 1043 int byte_order; 1044 1045 /* Use default: NULL (ZERO). */ 1046 bfd *abfd; 1047 1048 /* Use default: NULL (ZERO). */ 1049 struct gdbarch_tdep_info *tdep_info; 1050 1051 /* Use default: GDB_OSABI_UNINITIALIZED (-1). */ 1052 enum gdb_osabi osabi; 1053}; 1054 1055typedef struct gdbarch *(gdbarch_init_ftype) (struct gdbarch_info info, struct gdbarch_list *arches); 1056typedef void (gdbarch_dump_tdep_ftype) (struct gdbarch *gdbarch, struct ui_file *file); 1057 1058/* DEPRECATED - use gdbarch_register() */ 1059extern void register_gdbarch_init (enum bfd_architecture architecture, gdbarch_init_ftype *); 1060 1061extern void gdbarch_register (enum bfd_architecture architecture, 1062 gdbarch_init_ftype *, 1063 gdbarch_dump_tdep_ftype *); 1064 1065 1066/* Return a freshly allocated, NULL terminated, array of the valid 1067 architecture names. Since architectures are registered during the 1068 _initialize phase this function only returns useful information 1069 once initialization has been completed. */ 1070 1071extern const char **gdbarch_printable_names (void); 1072 1073 1074/* Helper function. Search the list of ARCHES for a GDBARCH that 1075 matches the information provided by INFO. */ 1076 1077extern struct gdbarch_list *gdbarch_list_lookup_by_info (struct gdbarch_list *arches, const struct gdbarch_info *info); 1078 1079 1080/* Helper function. Create a preliminary \`\`struct gdbarch''. Perform 1081 basic initialization using values obtained from the INFO andTDEP 1082 parameters. set_gdbarch_*() functions are called to complete the 1083 initialization of the object. */ 1084 1085extern struct gdbarch *gdbarch_alloc (const struct gdbarch_info *info, struct gdbarch_tdep *tdep); 1086 1087 1088/* Helper function. Free a partially-constructed \`\`struct gdbarch''. 1089 It is assumed that the caller freeds the \`\`struct 1090 gdbarch_tdep''. */ 1091 1092extern void gdbarch_free (struct gdbarch *); 1093 1094 1095/* Helper function. Allocate memory from the \`\`struct gdbarch'' 1096 obstack. The memory is freed when the corresponding architecture 1097 is also freed. */ 1098 1099extern void *gdbarch_obstack_zalloc (struct gdbarch *gdbarch, long size); 1100#define GDBARCH_OBSTACK_CALLOC(GDBARCH, NR, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), (NR) * sizeof (TYPE))) 1101#define GDBARCH_OBSTACK_ZALLOC(GDBARCH, TYPE) ((TYPE *) gdbarch_obstack_zalloc ((GDBARCH), sizeof (TYPE))) 1102 1103 1104/* Helper function. Force an update of the current architecture. 1105 1106 The actual architecture selected is determined by INFO, \`\`(gdb) set 1107 architecture'' et.al., the existing architecture and BFD's default 1108 architecture. INFO should be initialized to zero and then selected 1109 fields should be updated. 1110 1111 Returns non-zero if the update succeeds */ 1112 1113extern int gdbarch_update_p (struct gdbarch_info info); 1114 1115 1116/* Helper function. Find an architecture matching info. 1117 1118 INFO should be initialized using gdbarch_info_init, relevant fields 1119 set, and then finished using gdbarch_info_fill. 1120 1121 Returns the corresponding architecture, or NULL if no matching 1122 architecture was found. "current_gdbarch" is not updated. */ 1123 1124extern struct gdbarch *gdbarch_find_by_info (struct gdbarch_info info); 1125 1126 1127/* Helper function. Set the global "current_gdbarch" to "gdbarch". 1128 1129 FIXME: kettenis/20031124: Of the functions that follow, only 1130 gdbarch_from_bfd is supposed to survive. The others will 1131 dissappear since in the future GDB will (hopefully) be truly 1132 multi-arch. However, for now we're still stuck with the concept of 1133 a single active architecture. */ 1134 1135extern void deprecated_current_gdbarch_select_hack (struct gdbarch *gdbarch); 1136 1137 1138/* Register per-architecture data-pointer. 1139 1140 Reserve space for a per-architecture data-pointer. An identifier 1141 for the reserved data-pointer is returned. That identifer should 1142 be saved in a local static variable. 1143 1144 Memory for the per-architecture data shall be allocated using 1145 gdbarch_obstack_zalloc. That memory will be deleted when the 1146 corresponding architecture object is deleted. 1147 1148 When a previously created architecture is re-selected, the 1149 per-architecture data-pointer for that previous architecture is 1150 restored. INIT() is not re-called. 1151 1152 Multiple registrarants for any architecture are allowed (and 1153 strongly encouraged). */ 1154 1155struct gdbarch_data; 1156 1157typedef void *(gdbarch_data_pre_init_ftype) (struct obstack *obstack); 1158extern struct gdbarch_data *gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *init); 1159typedef void *(gdbarch_data_post_init_ftype) (struct gdbarch *gdbarch); 1160extern struct gdbarch_data *gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *init); 1161extern void deprecated_set_gdbarch_data (struct gdbarch *gdbarch, 1162 struct gdbarch_data *data, 1163 void *pointer); 1164 1165extern void *gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *); 1166 1167 1168 1169/* Register per-architecture memory region. 1170 1171 Provide a memory-region swap mechanism. Per-architecture memory 1172 region are created. These memory regions are swapped whenever the 1173 architecture is changed. For a new architecture, the memory region 1174 is initialized with zero (0) and the INIT function is called. 1175 1176 Memory regions are swapped / initialized in the order that they are 1177 registered. NULL DATA and/or INIT values can be specified. 1178 1179 New code should use gdbarch_data_register_*(). */ 1180 1181typedef void (gdbarch_swap_ftype) (void); 1182extern void deprecated_register_gdbarch_swap (void *data, unsigned long size, gdbarch_swap_ftype *init); 1183#define DEPRECATED_REGISTER_GDBARCH_SWAP(VAR) deprecated_register_gdbarch_swap (&(VAR), sizeof ((VAR)), NULL) 1184 1185 1186 1187/* Set the dynamic target-system-dependent parameters (architecture, 1188 byte-order, ...) using information found in the BFD */ 1189 1190extern void set_gdbarch_from_file (bfd *); 1191 1192 1193/* Initialize the current architecture to the "first" one we find on 1194 our list. */ 1195 1196extern void initialize_current_architecture (void); 1197 1198/* gdbarch trace variable */ 1199extern int gdbarch_debug; 1200 1201extern void gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file); 1202 1203#endif 1204EOF 1205exec 1>&2 1206#../move-if-change new-gdbarch.h gdbarch.h 1207compare_new gdbarch.h 1208 1209 1210# 1211# C file 1212# 1213 1214exec > new-gdbarch.c 1215copyright 1216cat <<EOF 1217 1218#include "defs.h" 1219#include "arch-utils.h" 1220 1221#include "gdbcmd.h" 1222#include "inferior.h" /* enum CALL_DUMMY_LOCATION et.al. */ 1223#include "symcat.h" 1224 1225#include "floatformat.h" 1226 1227#include "gdb_assert.h" 1228#include "gdb_string.h" 1229#include "gdb-events.h" 1230#include "reggroups.h" 1231#include "osabi.h" 1232#include "gdb_obstack.h" 1233 1234/* Static function declarations */ 1235 1236static void alloc_gdbarch_data (struct gdbarch *); 1237 1238/* Non-zero if we want to trace architecture code. */ 1239 1240#ifndef GDBARCH_DEBUG 1241#define GDBARCH_DEBUG 0 1242#endif 1243int gdbarch_debug = GDBARCH_DEBUG; 1244 1245EOF 1246 1247# gdbarch open the gdbarch object 1248printf "\n" 1249printf "/* Maintain the struct gdbarch object */\n" 1250printf "\n" 1251printf "struct gdbarch\n" 1252printf "{\n" 1253printf " /* Has this architecture been fully initialized? */\n" 1254printf " int initialized_p;\n" 1255printf "\n" 1256printf " /* An obstack bound to the lifetime of the architecture. */\n" 1257printf " struct obstack *obstack;\n" 1258printf "\n" 1259printf " /* basic architectural information */\n" 1260function_list | while do_read 1261do 1262 if class_is_info_p 1263 then 1264 printf " ${returntype} ${function};\n" 1265 fi 1266done 1267printf "\n" 1268printf " /* target specific vector. */\n" 1269printf " struct gdbarch_tdep *tdep;\n" 1270printf " gdbarch_dump_tdep_ftype *dump_tdep;\n" 1271printf "\n" 1272printf " /* per-architecture data-pointers */\n" 1273printf " unsigned nr_data;\n" 1274printf " void **data;\n" 1275printf "\n" 1276printf " /* per-architecture swap-regions */\n" 1277printf " struct gdbarch_swap *swap;\n" 1278printf "\n" 1279cat <<EOF 1280 /* Multi-arch values. 1281 1282 When extending this structure you must: 1283 1284 Add the field below. 1285 1286 Declare set/get functions and define the corresponding 1287 macro in gdbarch.h. 1288 1289 gdbarch_alloc(): If zero/NULL is not a suitable default, 1290 initialize the new field. 1291 1292 verify_gdbarch(): Confirm that the target updated the field 1293 correctly. 1294 1295 gdbarch_dump(): Add a fprintf_unfiltered call so that the new 1296 field is dumped out 1297 1298 \`\`startup_gdbarch()'': Append an initial value to the static 1299 variable (base values on the host's c-type system). 1300 1301 get_gdbarch(): Implement the set/get functions (probably using 1302 the macro's as shortcuts). 1303 1304 */ 1305 1306EOF 1307function_list | while do_read 1308do 1309 if class_is_variable_p 1310 then 1311 printf " ${returntype} ${function};\n" 1312 elif class_is_function_p 1313 then 1314 printf " gdbarch_${function}_ftype *${function}${attrib};\n" 1315 fi 1316done 1317printf "};\n" 1318 1319# A pre-initialized vector 1320printf "\n" 1321printf "\n" 1322cat <<EOF 1323/* The default architecture uses host values (for want of a better 1324 choice). */ 1325EOF 1326printf "\n" 1327printf "extern const struct bfd_arch_info bfd_default_arch_struct;\n" 1328printf "\n" 1329printf "struct gdbarch startup_gdbarch =\n" 1330printf "{\n" 1331printf " 1, /* Always initialized. */\n" 1332printf " NULL, /* The obstack. */\n" 1333printf " /* basic architecture information */\n" 1334function_list | while do_read 1335do 1336 if class_is_info_p 1337 then 1338 printf " ${staticdefault}, /* ${function} */\n" 1339 fi 1340done 1341cat <<EOF 1342 /* target specific vector and its dump routine */ 1343 NULL, NULL, 1344 /*per-architecture data-pointers and swap regions */ 1345 0, NULL, NULL, 1346 /* Multi-arch values */ 1347EOF 1348function_list | while do_read 1349do 1350 if class_is_function_p || class_is_variable_p 1351 then 1352 printf " ${staticdefault}, /* ${function} */\n" 1353 fi 1354done 1355cat <<EOF 1356 /* startup_gdbarch() */ 1357}; 1358 1359struct gdbarch *current_gdbarch = &startup_gdbarch; 1360EOF 1361 1362# Create a new gdbarch struct 1363cat <<EOF 1364 1365/* Create a new \`\`struct gdbarch'' based on information provided by 1366 \`\`struct gdbarch_info''. */ 1367EOF 1368printf "\n" 1369cat <<EOF 1370struct gdbarch * 1371gdbarch_alloc (const struct gdbarch_info *info, 1372 struct gdbarch_tdep *tdep) 1373{ 1374 /* NOTE: The new architecture variable is named \`\`current_gdbarch'' 1375 so that macros such as TARGET_DOUBLE_BIT, when expanded, refer to 1376 the current local architecture and not the previous global 1377 architecture. This ensures that the new architectures initial 1378 values are not influenced by the previous architecture. Once 1379 everything is parameterised with gdbarch, this will go away. */ 1380 struct gdbarch *current_gdbarch; 1381 1382 /* Create an obstack for allocating all the per-architecture memory, 1383 then use that to allocate the architecture vector. */ 1384 struct obstack *obstack = XMALLOC (struct obstack); 1385 obstack_init (obstack); 1386 current_gdbarch = obstack_alloc (obstack, sizeof (*current_gdbarch)); 1387 memset (current_gdbarch, 0, sizeof (*current_gdbarch)); 1388 current_gdbarch->obstack = obstack; 1389 1390 alloc_gdbarch_data (current_gdbarch); 1391 1392 current_gdbarch->tdep = tdep; 1393EOF 1394printf "\n" 1395function_list | while do_read 1396do 1397 if class_is_info_p 1398 then 1399 printf " current_gdbarch->${function} = info->${function};\n" 1400 fi 1401done 1402printf "\n" 1403printf " /* Force the explicit initialization of these. */\n" 1404function_list | while do_read 1405do 1406 if class_is_function_p || class_is_variable_p 1407 then 1408 if [ -n "${predefault}" -a "x${predefault}" != "x0" ] 1409 then 1410 printf " current_gdbarch->${function} = ${predefault};\n" 1411 fi 1412 fi 1413done 1414cat <<EOF 1415 /* gdbarch_alloc() */ 1416 1417 return current_gdbarch; 1418} 1419EOF 1420 1421# Free a gdbarch struct. 1422printf "\n" 1423printf "\n" 1424cat <<EOF 1425/* Allocate extra space using the per-architecture obstack. */ 1426 1427void * 1428gdbarch_obstack_zalloc (struct gdbarch *arch, long size) 1429{ 1430 void *data = obstack_alloc (arch->obstack, size); 1431 memset (data, 0, size); 1432 return data; 1433} 1434 1435 1436/* Free a gdbarch struct. This should never happen in normal 1437 operation --- once you've created a gdbarch, you keep it around. 1438 However, if an architecture's init function encounters an error 1439 building the structure, it may need to clean up a partially 1440 constructed gdbarch. */ 1441 1442void 1443gdbarch_free (struct gdbarch *arch) 1444{ 1445 struct obstack *obstack; 1446 gdb_assert (arch != NULL); 1447 gdb_assert (!arch->initialized_p); 1448 obstack = arch->obstack; 1449 obstack_free (obstack, 0); /* Includes the ARCH. */ 1450 xfree (obstack); 1451} 1452EOF 1453 1454# verify a new architecture 1455cat <<EOF 1456 1457 1458/* Ensure that all values in a GDBARCH are reasonable. */ 1459 1460/* NOTE/WARNING: The parameter is called \`\`current_gdbarch'' so that it 1461 just happens to match the global variable \`\`current_gdbarch''. That 1462 way macros refering to that variable get the local and not the global 1463 version - ulgh. Once everything is parameterised with gdbarch, this 1464 will go away. */ 1465 1466static void 1467verify_gdbarch (struct gdbarch *current_gdbarch) 1468{ 1469 struct ui_file *log; 1470 struct cleanup *cleanups; 1471 long dummy; 1472 char *buf; 1473 log = mem_fileopen (); 1474 cleanups = make_cleanup_ui_file_delete (log); 1475 /* fundamental */ 1476 if (current_gdbarch->byte_order == BFD_ENDIAN_UNKNOWN) 1477 fprintf_unfiltered (log, "\n\tbyte-order"); 1478 if (current_gdbarch->bfd_arch_info == NULL) 1479 fprintf_unfiltered (log, "\n\tbfd_arch_info"); 1480 /* Check those that need to be defined for the given multi-arch level. */ 1481EOF 1482function_list | while do_read 1483do 1484 if class_is_function_p || class_is_variable_p 1485 then 1486 if [ "x${invalid_p}" = "x0" ] 1487 then 1488 printf " /* Skip verify of ${function}, invalid_p == 0 */\n" 1489 elif class_is_predicate_p 1490 then 1491 printf " /* Skip verify of ${function}, has predicate */\n" 1492 # FIXME: See do_read for potential simplification 1493 elif [ -n "${invalid_p}" -a -n "${postdefault}" ] 1494 then 1495 printf " if (${invalid_p})\n" 1496 printf " current_gdbarch->${function} = ${postdefault};\n" 1497 elif [ -n "${predefault}" -a -n "${postdefault}" ] 1498 then 1499 printf " if (current_gdbarch->${function} == ${predefault})\n" 1500 printf " current_gdbarch->${function} = ${postdefault};\n" 1501 elif [ -n "${postdefault}" ] 1502 then 1503 printf " if (current_gdbarch->${function} == 0)\n" 1504 printf " current_gdbarch->${function} = ${postdefault};\n" 1505 elif [ -n "${invalid_p}" ] 1506 then 1507 printf " if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)\n" 1508 printf " && (${invalid_p}))\n" 1509 printf " fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n" 1510 elif [ -n "${predefault}" ] 1511 then 1512 printf " if ((GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL)\n" 1513 printf " && (current_gdbarch->${function} == ${predefault}))\n" 1514 printf " fprintf_unfiltered (log, \"\\\\n\\\\t${function}\");\n" 1515 fi 1516 fi 1517done 1518cat <<EOF 1519 buf = ui_file_xstrdup (log, &dummy); 1520 make_cleanup (xfree, buf); 1521 if (strlen (buf) > 0) 1522 internal_error (__FILE__, __LINE__, 1523 "verify_gdbarch: the following are invalid ...%s", 1524 buf); 1525 do_cleanups (cleanups); 1526} 1527EOF 1528 1529# dump the structure 1530printf "\n" 1531printf "\n" 1532cat <<EOF 1533/* Print out the details of the current architecture. */ 1534 1535/* NOTE/WARNING: The parameter is called \`\`current_gdbarch'' so that it 1536 just happens to match the global variable \`\`current_gdbarch''. That 1537 way macros refering to that variable get the local and not the global 1538 version - ulgh. Once everything is parameterised with gdbarch, this 1539 will go away. */ 1540 1541void 1542gdbarch_dump (struct gdbarch *current_gdbarch, struct ui_file *file) 1543{ 1544 fprintf_unfiltered (file, 1545 "gdbarch_dump: GDB_MULTI_ARCH = %d\\n", 1546 GDB_MULTI_ARCH); 1547EOF 1548function_list | sort -t: -k 4 | while do_read 1549do 1550 # First the predicate 1551 if class_is_predicate_p 1552 then 1553 if test -n "${macro}" 1554 then 1555 printf "#ifdef ${macro}_P\n" 1556 printf " fprintf_unfiltered (file,\n" 1557 printf " \"gdbarch_dump: %%s # %%s\\\\n\",\n" 1558 printf " \"${macro}_P()\",\n" 1559 printf " XSTRING (${macro}_P ()));\n" 1560 printf "#endif\n" 1561 fi 1562 printf " fprintf_unfiltered (file,\n" 1563 printf " \"gdbarch_dump: gdbarch_${function}_p() = %%d\\\\n\",\n" 1564 printf " gdbarch_${function}_p (current_gdbarch));\n" 1565 fi 1566 # Print the macro definition. 1567 if test -n "${macro}" 1568 then 1569 printf "#ifdef ${macro}\n" 1570 if class_is_function_p 1571 then 1572 printf " fprintf_unfiltered (file,\n" 1573 printf " \"gdbarch_dump: %%s # %%s\\\\n\",\n" 1574 printf " \"${macro}(${actual})\",\n" 1575 printf " XSTRING (${macro} (${actual})));\n" 1576 else 1577 printf " fprintf_unfiltered (file,\n" 1578 printf " \"gdbarch_dump: ${macro} # %%s\\\\n\",\n" 1579 printf " XSTRING (${macro}));\n" 1580 fi 1581 printf "#endif\n" 1582 fi 1583 # Print the corresponding value. 1584 if class_is_function_p 1585 then 1586 printf " fprintf_unfiltered (file,\n" 1587 printf " \"gdbarch_dump: ${function} = <0x%%lx>\\\\n\",\n" 1588 printf " (long) current_gdbarch->${function});\n" 1589 else 1590 # It is a variable 1591 case "${fmt}:${print}:${returntype}" in 1592 ::CORE_ADDR ) 1593 fmt="0x%s" 1594 print="paddr_nz (current_gdbarch->${function})" 1595 ;; 1596 ::* ) 1597 fmt="%s" 1598 print="paddr_d (current_gdbarch->${function})" 1599 ;; 1600 * ) 1601 test "${fmt}" || fmt="%ld" 1602 test "${print}" || print="(long) (current_gdbarch->${function})" 1603 ;; 1604 esac 1605 printf " fprintf_unfiltered (file,\n" 1606 printf " \"gdbarch_dump: ${function} = %s\\\\n\",\n" "${fmt}" 1607 printf " ${print});\n" 1608 fi 1609done 1610cat <<EOF 1611 if (current_gdbarch->dump_tdep != NULL) 1612 current_gdbarch->dump_tdep (current_gdbarch, file); 1613} 1614EOF 1615 1616 1617# GET/SET 1618printf "\n" 1619cat <<EOF 1620struct gdbarch_tdep * 1621gdbarch_tdep (struct gdbarch *gdbarch) 1622{ 1623 if (gdbarch_debug >= 2) 1624 fprintf_unfiltered (gdb_stdlog, "gdbarch_tdep called\\n"); 1625 return gdbarch->tdep; 1626} 1627EOF 1628printf "\n" 1629function_list | while do_read 1630do 1631 if class_is_predicate_p 1632 then 1633 printf "\n" 1634 printf "int\n" 1635 printf "gdbarch_${function}_p (struct gdbarch *gdbarch)\n" 1636 printf "{\n" 1637 printf " gdb_assert (gdbarch != NULL);\n" 1638 printf " return ${predicate};\n" 1639 printf "}\n" 1640 fi 1641 if class_is_function_p 1642 then 1643 printf "\n" 1644 printf "${returntype}\n" 1645 if [ "x${formal}" = "xvoid" ] 1646 then 1647 printf "gdbarch_${function} (struct gdbarch *gdbarch)\n" 1648 else 1649 printf "gdbarch_${function} (struct gdbarch *gdbarch, ${formal})\n" 1650 fi 1651 printf "{\n" 1652 printf " gdb_assert (gdbarch != NULL);\n" 1653 printf " gdb_assert (gdbarch->${function} != NULL);\n" 1654 if class_is_predicate_p && test -n "${predefault}" 1655 then 1656 # Allow a call to a function with a predicate. 1657 printf " /* Do not check predicate: ${predicate}, allow call. */\n" 1658 fi 1659 printf " if (gdbarch_debug >= 2)\n" 1660 printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n" 1661 if [ "x${actual}" = "x-" -o "x${actual}" = "x" ] 1662 then 1663 if class_is_multiarch_p 1664 then 1665 params="gdbarch" 1666 else 1667 params="" 1668 fi 1669 else 1670 if class_is_multiarch_p 1671 then 1672 params="gdbarch, ${actual}" 1673 else 1674 params="${actual}" 1675 fi 1676 fi 1677 if [ "x${returntype}" = "xvoid" ] 1678 then 1679 printf " gdbarch->${function} (${params});\n" 1680 else 1681 printf " return gdbarch->${function} (${params});\n" 1682 fi 1683 printf "}\n" 1684 printf "\n" 1685 printf "void\n" 1686 printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n" 1687 printf " `echo ${function} | sed -e 's/./ /g'` gdbarch_${function}_ftype ${function})\n" 1688 printf "{\n" 1689 printf " gdbarch->${function} = ${function};\n" 1690 printf "}\n" 1691 elif class_is_variable_p 1692 then 1693 printf "\n" 1694 printf "${returntype}\n" 1695 printf "gdbarch_${function} (struct gdbarch *gdbarch)\n" 1696 printf "{\n" 1697 printf " gdb_assert (gdbarch != NULL);\n" 1698 if [ "x${invalid_p}" = "x0" ] 1699 then 1700 printf " /* Skip verify of ${function}, invalid_p == 0 */\n" 1701 elif [ -n "${invalid_p}" ] 1702 then 1703 printf " /* Check variable is valid. */\n" 1704 printf " gdb_assert (!(${invalid_p}));\n" 1705 elif [ -n "${predefault}" ] 1706 then 1707 printf " /* Check variable changed from pre-default. */\n" 1708 printf " gdb_assert (gdbarch->${function} != ${predefault});\n" 1709 fi 1710 printf " if (gdbarch_debug >= 2)\n" 1711 printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n" 1712 printf " return gdbarch->${function};\n" 1713 printf "}\n" 1714 printf "\n" 1715 printf "void\n" 1716 printf "set_gdbarch_${function} (struct gdbarch *gdbarch,\n" 1717 printf " `echo ${function} | sed -e 's/./ /g'` ${returntype} ${function})\n" 1718 printf "{\n" 1719 printf " gdbarch->${function} = ${function};\n" 1720 printf "}\n" 1721 elif class_is_info_p 1722 then 1723 printf "\n" 1724 printf "${returntype}\n" 1725 printf "gdbarch_${function} (struct gdbarch *gdbarch)\n" 1726 printf "{\n" 1727 printf " gdb_assert (gdbarch != NULL);\n" 1728 printf " if (gdbarch_debug >= 2)\n" 1729 printf " fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n" 1730 printf " return gdbarch->${function};\n" 1731 printf "}\n" 1732 fi 1733done 1734 1735# All the trailing guff 1736cat <<EOF 1737 1738 1739/* Keep a registry of per-architecture data-pointers required by GDB 1740 modules. */ 1741 1742struct gdbarch_data 1743{ 1744 unsigned index; 1745 int init_p; 1746 gdbarch_data_pre_init_ftype *pre_init; 1747 gdbarch_data_post_init_ftype *post_init; 1748}; 1749 1750struct gdbarch_data_registration 1751{ 1752 struct gdbarch_data *data; 1753 struct gdbarch_data_registration *next; 1754}; 1755 1756struct gdbarch_data_registry 1757{ 1758 unsigned nr; 1759 struct gdbarch_data_registration *registrations; 1760}; 1761 1762struct gdbarch_data_registry gdbarch_data_registry = 1763{ 1764 0, NULL, 1765}; 1766 1767static struct gdbarch_data * 1768gdbarch_data_register (gdbarch_data_pre_init_ftype *pre_init, 1769 gdbarch_data_post_init_ftype *post_init) 1770{ 1771 struct gdbarch_data_registration **curr; 1772 /* Append the new registraration. */ 1773 for (curr = &gdbarch_data_registry.registrations; 1774 (*curr) != NULL; 1775 curr = &(*curr)->next); 1776 (*curr) = XMALLOC (struct gdbarch_data_registration); 1777 (*curr)->next = NULL; 1778 (*curr)->data = XMALLOC (struct gdbarch_data); 1779 (*curr)->data->index = gdbarch_data_registry.nr++; 1780 (*curr)->data->pre_init = pre_init; 1781 (*curr)->data->post_init = post_init; 1782 (*curr)->data->init_p = 1; 1783 return (*curr)->data; 1784} 1785 1786struct gdbarch_data * 1787gdbarch_data_register_pre_init (gdbarch_data_pre_init_ftype *pre_init) 1788{ 1789 return gdbarch_data_register (pre_init, NULL); 1790} 1791 1792struct gdbarch_data * 1793gdbarch_data_register_post_init (gdbarch_data_post_init_ftype *post_init) 1794{ 1795 return gdbarch_data_register (NULL, post_init); 1796} 1797 1798/* Create/delete the gdbarch data vector. */ 1799 1800static void 1801alloc_gdbarch_data (struct gdbarch *gdbarch) 1802{ 1803 gdb_assert (gdbarch->data == NULL); 1804 gdbarch->nr_data = gdbarch_data_registry.nr; 1805 gdbarch->data = GDBARCH_OBSTACK_CALLOC (gdbarch, gdbarch->nr_data, void *); 1806} 1807 1808/* Initialize the current value of the specified per-architecture 1809 data-pointer. */ 1810 1811void 1812deprecated_set_gdbarch_data (struct gdbarch *gdbarch, 1813 struct gdbarch_data *data, 1814 void *pointer) 1815{ 1816 gdb_assert (data->index < gdbarch->nr_data); 1817 gdb_assert (gdbarch->data[data->index] == NULL); 1818 gdb_assert (data->pre_init == NULL); 1819 gdbarch->data[data->index] = pointer; 1820} 1821 1822/* Return the current value of the specified per-architecture 1823 data-pointer. */ 1824 1825void * 1826gdbarch_data (struct gdbarch *gdbarch, struct gdbarch_data *data) 1827{ 1828 gdb_assert (data->index < gdbarch->nr_data); 1829 if (gdbarch->data[data->index] == NULL) 1830 { 1831 /* The data-pointer isn't initialized, call init() to get a 1832 value. */ 1833 if (data->pre_init != NULL) 1834 /* Mid architecture creation: pass just the obstack, and not 1835 the entire architecture, as that way it isn't possible for 1836 pre-init code to refer to undefined architecture 1837 fields. */ 1838 gdbarch->data[data->index] = data->pre_init (gdbarch->obstack); 1839 else if (gdbarch->initialized_p 1840 && data->post_init != NULL) 1841 /* Post architecture creation: pass the entire architecture 1842 (as all fields are valid), but be careful to also detect 1843 recursive references. */ 1844 { 1845 gdb_assert (data->init_p); 1846 data->init_p = 0; 1847 gdbarch->data[data->index] = data->post_init (gdbarch); 1848 data->init_p = 1; 1849 } 1850 else 1851 /* The architecture initialization hasn't completed - punt - 1852 hope that the caller knows what they are doing. Once 1853 deprecated_set_gdbarch_data has been initialized, this can be 1854 changed to an internal error. */ 1855 return NULL; 1856 gdb_assert (gdbarch->data[data->index] != NULL); 1857 } 1858 return gdbarch->data[data->index]; 1859} 1860 1861 1862 1863/* Keep a registry of swapped data required by GDB modules. */ 1864 1865struct gdbarch_swap 1866{ 1867 void *swap; 1868 struct gdbarch_swap_registration *source; 1869 struct gdbarch_swap *next; 1870}; 1871 1872struct gdbarch_swap_registration 1873{ 1874 void *data; 1875 unsigned long sizeof_data; 1876 gdbarch_swap_ftype *init; 1877 struct gdbarch_swap_registration *next; 1878}; 1879 1880struct gdbarch_swap_registry 1881{ 1882 int nr; 1883 struct gdbarch_swap_registration *registrations; 1884}; 1885 1886struct gdbarch_swap_registry gdbarch_swap_registry = 1887{ 1888 0, NULL, 1889}; 1890 1891void 1892deprecated_register_gdbarch_swap (void *data, 1893 unsigned long sizeof_data, 1894 gdbarch_swap_ftype *init) 1895{ 1896 struct gdbarch_swap_registration **rego; 1897 for (rego = &gdbarch_swap_registry.registrations; 1898 (*rego) != NULL; 1899 rego = &(*rego)->next); 1900 (*rego) = XMALLOC (struct gdbarch_swap_registration); 1901 (*rego)->next = NULL; 1902 (*rego)->init = init; 1903 (*rego)->data = data; 1904 (*rego)->sizeof_data = sizeof_data; 1905} 1906 1907static void 1908current_gdbarch_swap_init_hack (void) 1909{ 1910 struct gdbarch_swap_registration *rego; 1911 struct gdbarch_swap **curr = ¤t_gdbarch->swap; 1912 for (rego = gdbarch_swap_registry.registrations; 1913 rego != NULL; 1914 rego = rego->next) 1915 { 1916 if (rego->data != NULL) 1917 { 1918 (*curr) = GDBARCH_OBSTACK_ZALLOC (current_gdbarch, 1919 struct gdbarch_swap); 1920 (*curr)->source = rego; 1921 (*curr)->swap = gdbarch_obstack_zalloc (current_gdbarch, 1922 rego->sizeof_data); 1923 (*curr)->next = NULL; 1924 curr = &(*curr)->next; 1925 } 1926 if (rego->init != NULL) 1927 rego->init (); 1928 } 1929} 1930 1931static struct gdbarch * 1932current_gdbarch_swap_out_hack (void) 1933{ 1934 struct gdbarch *old_gdbarch = current_gdbarch; 1935 struct gdbarch_swap *curr; 1936 1937 gdb_assert (old_gdbarch != NULL); 1938 for (curr = old_gdbarch->swap; 1939 curr != NULL; 1940 curr = curr->next) 1941 { 1942 memcpy (curr->swap, curr->source->data, curr->source->sizeof_data); 1943 memset (curr->source->data, 0, curr->source->sizeof_data); 1944 } 1945 current_gdbarch = NULL; 1946 return old_gdbarch; 1947} 1948 1949static void 1950current_gdbarch_swap_in_hack (struct gdbarch *new_gdbarch) 1951{ 1952 struct gdbarch_swap *curr; 1953 1954 gdb_assert (current_gdbarch == NULL); 1955 for (curr = new_gdbarch->swap; 1956 curr != NULL; 1957 curr = curr->next) 1958 memcpy (curr->source->data, curr->swap, curr->source->sizeof_data); 1959 current_gdbarch = new_gdbarch; 1960} 1961 1962 1963/* Keep a registry of the architectures known by GDB. */ 1964 1965struct gdbarch_registration 1966{ 1967 enum bfd_architecture bfd_architecture; 1968 gdbarch_init_ftype *init; 1969 gdbarch_dump_tdep_ftype *dump_tdep; 1970 struct gdbarch_list *arches; 1971 struct gdbarch_registration *next; 1972}; 1973 1974static struct gdbarch_registration *gdbarch_registry = NULL; 1975 1976static void 1977append_name (const char ***buf, int *nr, const char *name) 1978{ 1979 *buf = xrealloc (*buf, sizeof (char**) * (*nr + 1)); 1980 (*buf)[*nr] = name; 1981 *nr += 1; 1982} 1983 1984const char ** 1985gdbarch_printable_names (void) 1986{ 1987 /* Accumulate a list of names based on the registed list of 1988 architectures. */ 1989 enum bfd_architecture a; 1990 int nr_arches = 0; 1991 const char **arches = NULL; 1992 struct gdbarch_registration *rego; 1993 for (rego = gdbarch_registry; 1994 rego != NULL; 1995 rego = rego->next) 1996 { 1997 const struct bfd_arch_info *ap; 1998 ap = bfd_lookup_arch (rego->bfd_architecture, 0); 1999 if (ap == NULL) 2000 internal_error (__FILE__, __LINE__, 2001 "gdbarch_architecture_names: multi-arch unknown"); 2002 do 2003 { 2004 append_name (&arches, &nr_arches, ap->printable_name); 2005 ap = ap->next; 2006 } 2007 while (ap != NULL); 2008 } 2009 append_name (&arches, &nr_arches, NULL); 2010 return arches; 2011} 2012 2013 2014void 2015gdbarch_register (enum bfd_architecture bfd_architecture, 2016 gdbarch_init_ftype *init, 2017 gdbarch_dump_tdep_ftype *dump_tdep) 2018{ 2019 struct gdbarch_registration **curr; 2020 const struct bfd_arch_info *bfd_arch_info; 2021 /* Check that BFD recognizes this architecture */ 2022 bfd_arch_info = bfd_lookup_arch (bfd_architecture, 0); 2023 if (bfd_arch_info == NULL) 2024 { 2025 internal_error (__FILE__, __LINE__, 2026 "gdbarch: Attempt to register unknown architecture (%d)", 2027 bfd_architecture); 2028 } 2029 /* Check that we haven't seen this architecture before */ 2030 for (curr = &gdbarch_registry; 2031 (*curr) != NULL; 2032 curr = &(*curr)->next) 2033 { 2034 if (bfd_architecture == (*curr)->bfd_architecture) 2035 internal_error (__FILE__, __LINE__, 2036 "gdbarch: Duplicate registraration of architecture (%s)", 2037 bfd_arch_info->printable_name); 2038 } 2039 /* log it */ 2040 if (gdbarch_debug) 2041 fprintf_unfiltered (gdb_stdlog, "register_gdbarch_init (%s, 0x%08lx)\n", 2042 bfd_arch_info->printable_name, 2043 (long) init); 2044 /* Append it */ 2045 (*curr) = XMALLOC (struct gdbarch_registration); 2046 (*curr)->bfd_architecture = bfd_architecture; 2047 (*curr)->init = init; 2048 (*curr)->dump_tdep = dump_tdep; 2049 (*curr)->arches = NULL; 2050 (*curr)->next = NULL; 2051} 2052 2053void 2054register_gdbarch_init (enum bfd_architecture bfd_architecture, 2055 gdbarch_init_ftype *init) 2056{ 2057 gdbarch_register (bfd_architecture, init, NULL); 2058} 2059 2060 2061/* Look for an architecture using gdbarch_info. Base search on only 2062 BFD_ARCH_INFO and BYTE_ORDER. */ 2063 2064struct gdbarch_list * 2065gdbarch_list_lookup_by_info (struct gdbarch_list *arches, 2066 const struct gdbarch_info *info) 2067{ 2068 for (; arches != NULL; arches = arches->next) 2069 { 2070 if (info->bfd_arch_info != arches->gdbarch->bfd_arch_info) 2071 continue; 2072 if (info->byte_order != arches->gdbarch->byte_order) 2073 continue; 2074 if (info->osabi != arches->gdbarch->osabi) 2075 continue; 2076 return arches; 2077 } 2078 return NULL; 2079} 2080 2081 2082/* Find an architecture that matches the specified INFO. Create a new 2083 architecture if needed. Return that new architecture. Assumes 2084 that there is no current architecture. */ 2085 2086static struct gdbarch * 2087find_arch_by_info (struct gdbarch *old_gdbarch, struct gdbarch_info info) 2088{ 2089 struct gdbarch *new_gdbarch; 2090 struct gdbarch_registration *rego; 2091 2092 /* The existing architecture has been swapped out - all this code 2093 works from a clean slate. */ 2094 gdb_assert (current_gdbarch == NULL); 2095 2096 /* Fill in missing parts of the INFO struct using a number of 2097 sources: "set ..."; INFOabfd supplied; and the existing 2098 architecture. */ 2099 gdbarch_info_fill (old_gdbarch, &info); 2100 2101 /* Must have found some sort of architecture. */ 2102 gdb_assert (info.bfd_arch_info != NULL); 2103 2104 if (gdbarch_debug) 2105 { 2106 fprintf_unfiltered (gdb_stdlog, 2107 "find_arch_by_info: info.bfd_arch_info %s\n", 2108 (info.bfd_arch_info != NULL 2109 ? info.bfd_arch_info->printable_name 2110 : "(null)")); 2111 fprintf_unfiltered (gdb_stdlog, 2112 "find_arch_by_info: info.byte_order %d (%s)\n", 2113 info.byte_order, 2114 (info.byte_order == BFD_ENDIAN_BIG ? "big" 2115 : info.byte_order == BFD_ENDIAN_LITTLE ? "little" 2116 : "default")); 2117 fprintf_unfiltered (gdb_stdlog, 2118 "find_arch_by_info: info.osabi %d (%s)\n", 2119 info.osabi, gdbarch_osabi_name (info.osabi)); 2120 fprintf_unfiltered (gdb_stdlog, 2121 "find_arch_by_info: info.abfd 0x%lx\n", 2122 (long) info.abfd); 2123 fprintf_unfiltered (gdb_stdlog, 2124 "find_arch_by_info: info.tdep_info 0x%lx\n", 2125 (long) info.tdep_info); 2126 } 2127 2128 /* Find the tdep code that knows about this architecture. */ 2129 for (rego = gdbarch_registry; 2130 rego != NULL; 2131 rego = rego->next) 2132 if (rego->bfd_architecture == info.bfd_arch_info->arch) 2133 break; 2134 if (rego == NULL) 2135 { 2136 if (gdbarch_debug) 2137 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: " 2138 "No matching architecture\n"); 2139 return 0; 2140 } 2141 2142 /* Ask the tdep code for an architecture that matches "info". */ 2143 new_gdbarch = rego->init (info, rego->arches); 2144 2145 /* Did the tdep code like it? No. Reject the change and revert to 2146 the old architecture. */ 2147 if (new_gdbarch == NULL) 2148 { 2149 if (gdbarch_debug) 2150 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: " 2151 "Target rejected architecture\n"); 2152 return NULL; 2153 } 2154 2155 /* Is this a pre-existing architecture (as determined by already 2156 being initialized)? Move it to the front of the architecture 2157 list (keeping the list sorted Most Recently Used). */ 2158 if (new_gdbarch->initialized_p) 2159 { 2160 struct gdbarch_list **list; 2161 struct gdbarch_list *this; 2162 if (gdbarch_debug) 2163 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: " 2164 "Previous architecture 0x%08lx (%s) selected\n", 2165 (long) new_gdbarch, 2166 new_gdbarch->bfd_arch_info->printable_name); 2167 /* Find the existing arch in the list. */ 2168 for (list = ®o->arches; 2169 (*list) != NULL && (*list)->gdbarch != new_gdbarch; 2170 list = &(*list)->next); 2171 /* It had better be in the list of architectures. */ 2172 gdb_assert ((*list) != NULL && (*list)->gdbarch == new_gdbarch); 2173 /* Unlink THIS. */ 2174 this = (*list); 2175 (*list) = this->next; 2176 /* Insert THIS at the front. */ 2177 this->next = rego->arches; 2178 rego->arches = this; 2179 /* Return it. */ 2180 return new_gdbarch; 2181 } 2182 2183 /* It's a new architecture. */ 2184 if (gdbarch_debug) 2185 fprintf_unfiltered (gdb_stdlog, "find_arch_by_info: " 2186 "New architecture 0x%08lx (%s) selected\n", 2187 (long) new_gdbarch, 2188 new_gdbarch->bfd_arch_info->printable_name); 2189 2190 /* Insert the new architecture into the front of the architecture 2191 list (keep the list sorted Most Recently Used). */ 2192 { 2193 struct gdbarch_list *this = XMALLOC (struct gdbarch_list); 2194 this->next = rego->arches; 2195 this->gdbarch = new_gdbarch; 2196 rego->arches = this; 2197 } 2198 2199 /* Check that the newly installed architecture is valid. Plug in 2200 any post init values. */ 2201 new_gdbarch->dump_tdep = rego->dump_tdep; 2202 verify_gdbarch (new_gdbarch); 2203 new_gdbarch->initialized_p = 1; 2204 2205 /* Initialize any per-architecture swap areas. This phase requires 2206 a valid global CURRENT_GDBARCH. Set it momentarially, and then 2207 swap the entire architecture out. */ 2208 current_gdbarch = new_gdbarch; 2209 current_gdbarch_swap_init_hack (); 2210 current_gdbarch_swap_out_hack (); 2211 2212 if (gdbarch_debug) 2213 gdbarch_dump (new_gdbarch, gdb_stdlog); 2214 2215 return new_gdbarch; 2216} 2217 2218struct gdbarch * 2219gdbarch_find_by_info (struct gdbarch_info info) 2220{ 2221 /* Save the previously selected architecture, setting the global to 2222 NULL. This stops things like gdbarch->init() trying to use the 2223 previous architecture's configuration. The previous architecture 2224 may not even be of the same architecture family. The most recent 2225 architecture of the same family is found at the head of the 2226 rego->arches list. */ 2227 struct gdbarch *old_gdbarch = current_gdbarch_swap_out_hack (); 2228 2229 /* Find the specified architecture. */ 2230 struct gdbarch *new_gdbarch = find_arch_by_info (old_gdbarch, info); 2231 2232 /* Restore the existing architecture. */ 2233 gdb_assert (current_gdbarch == NULL); 2234 current_gdbarch_swap_in_hack (old_gdbarch); 2235 2236 return new_gdbarch; 2237} 2238 2239/* Make the specified architecture current, swapping the existing one 2240 out. */ 2241 2242void 2243deprecated_current_gdbarch_select_hack (struct gdbarch *new_gdbarch) 2244{ 2245 gdb_assert (new_gdbarch != NULL); 2246 gdb_assert (current_gdbarch != NULL); 2247 gdb_assert (new_gdbarch->initialized_p); 2248 current_gdbarch_swap_out_hack (); 2249 current_gdbarch_swap_in_hack (new_gdbarch); 2250 architecture_changed_event (); 2251} 2252 2253extern void _initialize_gdbarch (void); 2254 2255void 2256_initialize_gdbarch (void) 2257{ 2258 struct cmd_list_element *c; 2259 2260 add_show_from_set (add_set_cmd ("arch", 2261 class_maintenance, 2262 var_zinteger, 2263 (char *)&gdbarch_debug, 2264 "Set architecture debugging.\\n\\ 2265When non-zero, architecture debugging is enabled.", &setdebuglist), 2266 &showdebuglist); 2267 c = add_set_cmd ("archdebug", 2268 class_maintenance, 2269 var_zinteger, 2270 (char *)&gdbarch_debug, 2271 "Set architecture debugging.\\n\\ 2272When non-zero, architecture debugging is enabled.", &setlist); 2273 2274 deprecate_cmd (c, "set debug arch"); 2275 deprecate_cmd (add_show_from_set (c, &showlist), "show debug arch"); 2276} 2277EOF 2278 2279# close things off 2280exec 1>&2 2281#../move-if-change new-gdbarch.c gdbarch.c 2282compare_new gdbarch.c 2283