diff options
author | Jim Blandy <jimb@codesourcery.com> | 2001-11-13 18:52:53 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2001-11-13 18:52:53 +0000 |
commit | 8fd6cde20a8fd86e83ad3e5757af361a8d9e1ec1 (patch) | |
tree | 2b96084992d698f17b9ea59e06468fa37740ca3e | |
parent | 777d3b9a5c179be26e72ad42b8cb76708e2913af (diff) | |
download | gdb-8fd6cde20a8fd86e83ad3e5757af361a8d9e1ec1.tar.gz |
* gdbint.texinfo (COERCE_FLOAT_TO_DOUBLE): Clarify.
-rw-r--r-- | gdb/doc/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/doc/gdbint.texinfo | 64 |
2 files changed, 44 insertions, 24 deletions
diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 8a5901a8a73..953d769672c 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2001-11-13 Jim Blandy <jimb@redhat.com> + + * gdbint.texinfo (COERCE_FLOAT_TO_DOUBLE): Clarify. + 2001-11-06 Corinna Vinschen <vinschen@redhat.com> * gdb.texinfo (gdbarch_in_function_epilogue_p): Add documentation. diff --git a/gdb/doc/gdbint.texinfo b/gdb/doc/gdbint.texinfo index b79191ff1f2..a0effc457a1 100644 --- a/gdb/doc/gdbint.texinfo +++ b/gdb/doc/gdbint.texinfo @@ -42,7 +42,7 @@ Software Foundation raise funds for GNU development.'' @page @tex \def\$#1${{#1}} % Kluge: collect RCS revision info without $...$ -\xdef\manvers{\$Revision: 1.43 $} % For use in headers, footers too +\xdef\manvers{\$Revision: 1.44 $} % For use in headers, footers too {\parskip=0pt \hfill Cygnus Solutions\par \hfill \manvers\par @@ -2815,30 +2815,46 @@ Currently only implemented correctly for native Sparc configurations? @item COERCE_FLOAT_TO_DOUBLE (@var{formal}, @var{actual}) @findex COERCE_FLOAT_TO_DOUBLE @cindex promotion to @code{double} -If we are calling a function by hand, and the function was declared -(according to the debug info) without a prototype, should we -automatically promote @code{float}s to @code{double}s? This macro -must evaluate to non-zero if we should, or zero if we should leave the -value alone. - -The argument @var{actual} is the type of the value we want to pass to -the function. The argument @var{formal} is the type of this argument, -as it appears in the function's definition. Note that @var{formal} may -be zero if we have no debugging information for the function, or if -we're passing more arguments than are officially declared (for example, -varargs). This macro is never invoked if the function definitely has a -prototype. - -@findex set_gdbarch_coerce_float_to_double +@cindex @code{float} arguments +@cindex prototyped functions, passing arguments to +@cindex passing arguments to prototyped functions +Return non-zero if GDB should promote @code{float} values to +@code{double} when calling a non-prototyped function. The argument +@var{actual} is the type of the value we want to pass to the function. +The argument @var{formal} is the type of this argument, as it appears in +the function's definition. Note that @var{formal} may be zero if we +have no debugging information for the function, or if we're passing more +arguments than are officially declared (for example, varargs). This +macro is never invoked if the function definitely has a prototype. + +How you should pass arguments to a function depends on whether it was +defined in K&R style or prototype style. If you define a function using +the K&R syntax that takes a @code{float} argument, then callers must +pass that argument as a @code{double}. If you define the function using +the prototype syntax, then you must pass the argument as a @code{float}, +with no promotion. + +Unfortunately, on certain older platforms, the debug info doesn't +indicate reliably how each function was defined. A function type's +@code{TYPE_FLAG_PROTOTYPED} flag may be unset, even if the function was +defined in prototype style. When calling a function whose +@code{TYPE_FLAG_PROTOTYPED} flag is unset, GDB consults the +@code{COERCE_FLOAT_TO_DOUBLE} macro to decide what to do. + @findex standard_coerce_float_to_double -The default behavior is to promote only when we have no type information -for the formal parameter. This is different from the obvious behavior, -which would be to promote whenever we have no prototype, just as the -compiler does. It's annoying, but some older targets rely on this. If -you want @value{GDBN} to follow the typical compiler behavior---to always -promote when there is no prototype in scope---your gdbarch @code{init} -function can call @code{set_gdbarch_coerce_float_to_double} and select -the @code{standard_coerce_float_to_double} function. +For modern targets, it is proper to assume that, if the prototype flag +is unset, that can be trusted: @code{float} arguments should be promoted +to @code{double}. You should use the function +@code{standard_coerce_float_to_double} to get this behavior. + +@findex default_coerce_float_to_double +For some older targets, if the prototype flag is unset, that doesn't +tell us anything. So we guess that, if we don't have a type for the +formal parameter (@i{i.e.}, the first argument to +@code{COERCE_FLOAT_TO_DOUBLE} is null), then we should promote it; +otherwise, we should leave it alone. The function +@code{default_coerce_float_to_double} provides this behavior; it is the +default value, for compatibility with older configurations. @item CPLUS_MARKER @findex CPLUS_MARKERz |