This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[patch/multi-arch] Add function class ``m'' and ``M''


Hello,

The attatched patch modifies gdbarch.sh so that it can generate code for
two new method classes - ``m'' and ``M''.  Methods of this class:

	o	take a gdbarch parameter
		(other methods don't)

	o	do not define wrapper macros

These classes are intended for new multi-arch methods.

(Regenerating gdbarch.[hc] with this change has no affect)

	enjoy,
		Andrew
2001-03-16  Andrew Cagney  <ac131313@redhat.com>

	* gdbarch.sh: Add classes ``m'' and ``M'' for pure multi-arch.  Do
	not generate macro wrappers for multi-arch functions or
	predicates.
	(class_is_info_p, class_is_predicate_p): Update.
	(class_is_function_p, class_is_variable_p): Ditto.
	(class_is_multiarch_p): New class function.

Index: gdbarch.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdbarch.sh,v
retrieving revision 1.54
diff -p -r1.54 gdbarch.sh
*** gdbarch.sh	2001/02/08 06:03:53	1.54
--- gdbarch.sh	2001/03/17 00:24:54
*************** fallback_default_p ()
*** 137,158 ****
  
  class_is_variable_p ()
  {
!     [ "${class}" = "v" -o "${class}" = "V" ]
  }
  
  class_is_function_p ()
  {
!     [ "${class}" = "f" -o "${class}" = "F" ]
  }
  
  class_is_predicate_p ()
  {
!     [ "${class}" = "F" -o "${class}" = "V" ]
  }
  
  class_is_info_p ()
  {
!     [ "${class}" = "i" ]
  }
  
  
--- 137,178 ----
  
  class_is_variable_p ()
  {
!     case "${class}" in
! 	*v* | *V* ) true ;;
! 	* ) false ;;
!     esac
  }
  
  class_is_function_p ()
  {
!     case "${class}" in
! 	*f* | *F* | *m* | *M* ) true ;;
! 	* ) false ;;
!     esac
  }
  
+ class_is_multiarch_p ()
+ {
+     case "${class}" in
+ 	*m* | *M* ) true ;;
+ 	* ) false ;;
+     esac
+ }
+ 
  class_is_predicate_p ()
  {
!     case "${class}" in
! 	*F* | *V* | *M* ) true ;;
! 	* ) false ;;
!     esac
  }
  
  class_is_info_p ()
  {
!     case "${class}" in
! 	*i* ) true ;;
! 	* ) false ;;
!     esac
  }
  
  
*************** do
*** 174,179 ****
--- 194,203 ----
  	#   hiding a variable + predicate to test variables validity
  	# i -> set from info
  	#   hiding something from the ``struct info'' object
+ 	# m -> multi-arch function
+ 	#   hiding a multi-arch function (parameterised with the architecture)
+         # M -> multi-arch function + predicate
+ 	#   hiding a multi-arch function + predicate to test function validity
  
      level ) : ;;
  
*************** do
*** 630,641 ****
  	    -e '3,$ s,#,  ,' \
  	    -e '$ s,$, */,'
      fi
!     if class_is_predicate_p
      then
  	printf "\n"
  	printf "#if defined (${macro})\n"
  	printf "/* Legacy for systems yet to multi-arch ${macro} */\n"
! #	printf "#if (GDB_MULTI_ARCH <= GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n"
  	printf "#define ${macro}_P() (1)\n"
  	printf "#endif\n"
  	printf "\n"
--- 654,665 ----
  	    -e '3,$ s,#,  ,' \
  	    -e '$ s,$, */,'
      fi
!     if class_is_predicate_p && ! class_is_multiarch_p
      then
  	printf "\n"
  	printf "#if defined (${macro})\n"
  	printf "/* Legacy for systems yet to multi-arch ${macro} */\n"
! 	#printf "#if (GDB_MULTI_ARCH <= GDB_MULTI_ARCH_PARTIAL) && defined (${macro})\n"
  	printf "#define ${macro}_P() (1)\n"
  	printf "#endif\n"
  	printf "\n"
*************** do
*** 649,654 ****
--- 673,683 ----
  	printf "#define ${macro}_P() (gdbarch_${function}_p (current_gdbarch))\n"
  	printf "#endif\n"
      fi
+     if class_is_predicate_p && class_is_multiarch_p
+     then
+ 	printf "\n"
+ 	printf "extern int gdbarch_${function}_p (struct gdbarch *gdbarch);\n"
+     fi
      if class_is_variable_p
      then
  	if fallback_default_p || class_is_predicate_p
*************** do
*** 671,677 ****
      fi
      if class_is_function_p
      then
! 	if fallback_default_p || class_is_predicate_p
  	then
  	    printf "\n"
  	    printf "/* Default (function) for non- multi-arch platforms. */\n"
--- 700,706 ----
      fi
      if class_is_function_p
      then
! 	if ( fallback_default_p || class_is_predicate_p ) && ! class_is_multiarch_p
  	then
  	    printf "\n"
  	    printf "/* Default (function) for non- multi-arch platforms. */\n"
*************** do
*** 687,693 ****
  	    printf "#endif\n"
  	fi
  	printf "\n"
! 	printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
  	if [ "${formal}" = "void" ]
  	then
  	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
--- 716,730 ----
  	    printf "#endif\n"
  	fi
  	printf "\n"
! 	if [ "${formal}" = "void" ] && class_is_multiarch_p
! 	then
! 	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch);\n"
! 	elif class_is_multiarch_p
! 	then
! 	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (struct gdbarch *gdbarch, ${formal});\n"
! 	else
! 	    printf "typedef ${returntype} (gdbarch_${function}_ftype) (${formal});\n"
! 	fi
  	if [ "${formal}" = "void" ]
  	then
  	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch);\n"
*************** do
*** 695,713 ****
  	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
  	fi
  	printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
! 	printf "#if GDB_MULTI_ARCH\n"
! 	printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (${macro})\n"
! 	if [ "${actual}" = "" ]
  	then
! 	  printf "#define ${macro}() (gdbarch_${function} (current_gdbarch))\n"
! 	elif [ "${actual}" = "-" ]
! 	then
! 	  printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
! 	else
! 	  printf "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))\n"
  	fi
- 	printf "#endif\n"
- 	printf "#endif\n"
      fi
  done
  
--- 732,753 ----
  	  printf "extern ${returntype} gdbarch_${function} (struct gdbarch *gdbarch, ${formal});\n"
  	fi
  	printf "extern void set_gdbarch_${function} (struct gdbarch *gdbarch, gdbarch_${function}_ftype *${function});\n"
! 	if ! class_is_multiarch_p
  	then
! 	    printf "#if GDB_MULTI_ARCH\n"
! 	    printf "#if (GDB_MULTI_ARCH > GDB_MULTI_ARCH_PARTIAL) || !defined (${macro})\n"
! 	    if [ "${actual}" = "" ]
! 	    then
! 		printf "#define ${macro}() (gdbarch_${function} (current_gdbarch))\n"
! 	    elif [ "${actual}" = "-" ]
! 	    then
! 		printf "#define ${macro} (gdbarch_${function} (current_gdbarch))\n"
! 	    else
! 		printf "#define ${macro}(${actual}) (gdbarch_${function} (current_gdbarch, ${actual}))\n"
! 	    fi
! 	    printf "#endif\n"
! 	    printf "#endif\n"
  	fi
      fi
  done
  
*************** gdbarch_dump (struct gdbarch *gdbarch, s
*** 1345,1350 ****
--- 1385,1392 ----
  EOF
  function_list | while do_read
  do
+     # multiarch functions don't have macros.
+     class_is_multiarch_p && continue
      if [ "${returntype}" = "void" ]
      then
  	printf "#if defined (${macro}) && GDB_MULTI_ARCH\n"
*************** do
*** 1367,1382 ****
  done
  function_list | while do_read
  do
      printf "#ifdef ${macro}\n"
      if [ "${print_p}" = "()" ]
      then
! 	printf "  gdbarch_dump_${function} (current_gdbarch);\n"
      elif [ "${print_p}" = "0" ]
      then
! 	printf "  /* skip print of ${macro}, print_p == 0. */\n"
      elif [ "${print_p}" ]
      then
! 	printf "  if (${print_p})\n"
  	printf "    fprintf_unfiltered (file,\n"
  	printf "                        \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
  	printf "                        ${print});\n"
--- 1409,1432 ----
  done
  function_list | while do_read
  do
+     if class_is_multiarch_p
+     then
+ 	printf "  if (GDB_MULTI_ARCH)\n"
+ 	printf "    fprintf_unfiltered (file,\n"
+ 	printf "                        \"gdbarch_dump: ${function} = 0x%%08lx\\\\n\",\n"
+ 	printf "                        (long) current_gdbarch->${function});\n"
+ 	continue
+     fi
      printf "#ifdef ${macro}\n"
      if [ "${print_p}" = "()" ]
      then
!         printf "  gdbarch_dump_${function} (current_gdbarch);\n"
      elif [ "${print_p}" = "0" ]
      then
!         printf "  /* skip print of ${macro}, print_p == 0. */\n"
      elif [ "${print_p}" ]
      then
!         printf "  if (${print_p})\n"
  	printf "    fprintf_unfiltered (file,\n"
  	printf "                        \"gdbarch_dump: ${macro} = %s\\\\n\",\n" "${fmt}"
  	printf "                        ${print});\n"
*************** do
*** 1445,1456 ****
  	printf "                    \"gdbarch: gdbarch_${function} invalid\");\n"
  	printf "  if (gdbarch_debug >= 2)\n"
  	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
!         test "${actual}" = "-" && actual=""
         	if [ "${returntype}" = "void" ]
  	then
! 	  printf "  gdbarch->${function} (${actual});\n"
  	else
! 	  printf "  return gdbarch->${function} (${actual});\n"
  	fi
  	printf "}\n"
  	printf "\n"
--- 1495,1521 ----
  	printf "                    \"gdbarch: gdbarch_${function} invalid\");\n"
  	printf "  if (gdbarch_debug >= 2)\n"
  	printf "    fprintf_unfiltered (gdb_stdlog, \"gdbarch_${function} called\\\\n\");\n"
! 	if [ "${actual}" = "-" -o "${actual}" = "" ]
! 	then
! 	    if class_is_multiarch_p
! 	    then
! 		params="gdbarch"
! 	    else
! 		params=""
! 	    fi
! 	else
! 	    if class_is_multiarch_p
! 	    then
! 		params="gdbarch, ${actual}"
! 	    else
! 		params="${actual}"
! 	    fi
!         fi
         	if [ "${returntype}" = "void" ]
  	then
! 	  printf "  gdbarch->${function} (${params});\n"
  	else
! 	  printf "  return gdbarch->${function} (${params});\n"
  	fi
  	printf "}\n"
  	printf "\n"

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]