Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [RFA] gdb-events.sh portability update
@ 2001-06-07 11:30 Keith Seitz
  2001-06-07 12:24 ` Andrew Cagney
  0 siblings, 1 reply; 3+ messages in thread
From: Keith Seitz @ 2001-06-07 11:30 UTC (permalink / raw)
  To: gdb-patches

Hi,

gdb-events.sh will only run on a linux box (maybe BSD, too). It does not
run on Solaris, SunOS, or almost any other host OS because the script does
things like:

1) Assumes that /bin/sh's "if" has built-in logical not.

  if ! test -r file_exits
  then
    # stuf
  fi

and

  if ! diff ...
  then
    # stuff
  fi

2) Some commands assume that IFS is a space:

  for arg in `echo ${args} | tr '[,]' '[ ]'`; do
    # stuff
  done

At the top of this script, we explicitly set it to ":". This bug prevents
using event notifiers with more than one argument, i.e.,

f:void:my_new_event_notifier:int a, void *b:a, b

would produce output like:

  void
  my_new_event_notifier_event (int a, void *b)
  {
      if (gdb_events_debug)
        fprintf_unfiltered (gdb_stdlog, "my_new_event_notifier_event\n");
      if (!current_event_hooks->my_new_event_notifier)
        return;
      current_event_hooks->my_new_event_notifier (a b);
  }

3) Uses "echo" to put strings containing special characters (e.g. \n) into
files:

  echo ""
  echo "fprintf_unfiltered (gdb_stderr, \"This is an error\\n\");"

Different /bin/sh require different levels of escaping. HPUX 10&11, Aix
4.3, and tru64 OSF 1 v 5.1 all exhibit this "problem". (They actually
require: echo "fprintf_unfiltered (gdb_stderr, \"This is an
error\\\\n\");"

The following patch corrects these assumptions/errors. I have tested this
on:

  Red Hat 7.0
  Solaris 5.1, 6, 7, 8
  HPUX B10.20, B11.00
  Aix 4.3
  UnixWare 7.1.0
  tru64 OSF 1 v5.1

This patch does not alter the output of the script at all. It just allows
it to run on more host OSes.

Ok to commit?
Keith

ChangeLog
2001-06-07  Keith Seitz  <keiths@redhat.com>

	* gdb-events.sh: Make if statements and tests
	a little more portable.
	Don't use shell's echo command to put strings containing
	escaped characters into a file -- different flavors of /bin/sh
	require differnt levels of escaping. Use cat <<EOF instead.
	Our internal field separator is a colon. Change all
	commands which assume it is a space.

Patch:
Index: gdb-events.sh
===================================================================
RCS file: /cvs/src/src/gdb/gdb-events.sh,v
retrieving revision 1.7
diff -u -p -r1.7 gdb-events.sh
--- gdb-events.sh	2001/06/06 14:44:42	1.7
+++ gdb-events.sh	2001/06/07 18:14:11
@@ -277,12 +277,15 @@ echo ""
 echo "#endif"
 exec 1>&2
 #../move-if-change new-gdb-events.h gdb-events.h
-if ! test -r gdb-events.h
+if test -r gdb-events.h
 then
+  diff -c gdb-events.h new-gdb-events.h
+  if [ $? = 1 ]
+  then
+    echo "gdb-events.h changed? cp new-gdb-events.h gdb-events.h" 1>&2
+  fi
+else
   echo "File missing? mv new-gdb-events.h gdb-events.h" 1>&2
-elif ! diff -c gdb-events.h new-gdb-events.h
-then
-  echo "gdb-events.h changed? cp new-gdb-events.h gdb-events.h" 1>&2
 fi


@@ -330,30 +333,34 @@ do
   case "${class}" in
     "*" ) continue ;;
     "?" )
-	echo ""
-	echo "int"
-	echo "${function}_event_p (${formal})"
-	echo "{"
-	echo "  return current_event_hooks->${function};"
-	echo "}"
-	echo ""
-	echo "${returntype}"
-	echo "${function}_event (${formal})"
-	echo "{"
-	echo "  return current_events->${function} (${actual});"
-	echo "}"
+cat <<EOF
+
+int
+${function}_event_p (${formal})
+{
+  return current_event_hooks->${function};
+}
+
+${returntype}
+${function}_event (${formal})
+{
+  return current_events->${function} (${actual});
+}
+EOF
 	;;
      "f" )
-	echo ""
-	echo "void"
-	echo "${function}_event (${formal})"
-	echo "{"
-	echo "  if (gdb_events_debug)"
-	echo "    fprintf_unfiltered (gdb_stdlog, \"${function}_event\\n\");"
-	echo "  if (!current_event_hooks->${function})"
-	echo "    return;"
-	echo "  current_event_hooks->${function} (${actual});"
-	echo "}"
+cat <<EOF
+
+void
+${function}_event (${formal})
+{
+  if (gdb_events_debug)
+    fprintf_unfiltered (gdb_stdlog, \"${function}_event\n\");
+  if (!current_event_hooks->${function})
+    return;
+  current_event_hooks->${function} (${actual});
+}
+EOF
 	;;
   esac
 done
@@ -471,7 +478,7 @@ do
       echo "{"
       echo "  struct event *event = XMALLOC (struct event);"
       echo "  event->type = ${function};"
-      for arg in `echo ${actual} | tr '[,]' '[ ]'`; do
+      for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
         echo "  event->data.${function}.${arg} = ${arg};"
       done
       echo "  append (event);"
@@ -513,7 +520,7 @@ do
       echo "          vector->${function}"
       sep="            ("
       ass=""
-      for arg in `echo ${actual} | tr '[,]' '[ ]'`; do
+      for arg in `echo ${actual} | tr '[,]' '[:]' | tr -d '[ ]'`; do
         ass="${ass}${sep}event->data.${function}.${arg}"
 	sep=",
              "
@@ -576,10 +583,13 @@ sed < new-gdb-events.c > tmp-gdb-events.
     -e 's/\(	\)*        /\1	/g'
 mv tmp-gdb-events.c new-gdb-events.c
 # Move if changed?
-if ! test -r gdb-events.c
+if test -r gdb-events.c
 then
+  diff -c gdb-events.c new-gdb-events.c
+  if [ $? = 1 ]
+  then
+    echo "gdb-events.c changed? cp new-gdb-events.c gdb-events.c" 1>&2
+  fi
+else
   echo "File missing? mv new-gdb-events.c gdb-events.c" 1>&2
-elif ! diff -c gdb-events.c new-gdb-events.c
-then
-  echo "gdb-events.c changed? cp new-gdb-events.c gdb-events.c" 1>&2
 fi



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFA] gdb-events.sh portability update
  2001-06-07 11:30 [RFA] gdb-events.sh portability update Keith Seitz
@ 2001-06-07 12:24 ` Andrew Cagney
  2001-06-07 12:43   ` Keith Seitz
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cagney @ 2001-06-07 12:24 UTC (permalink / raw)
  To: Keith Seitz; +Cc: gdb-patches

> Hi,
> 
> gdb-events.sh will only run on a linux box (maybe BSD, too). It does not
> run on Solaris, SunOS, or almost any other host OS because the script does
> things like:
> 
> 1) Assumes that /bin/sh's "if" has built-in logical not.
> 
>   if ! test -r file_exits
>   then
>     # stuf
>   fi
> 
> and
> 
>   if ! diff ...
>   then
>     # stuff
>   fi
> 
> 2) Some commands assume that IFS is a space:
> 
>   for arg in `echo ${args} | tr '[,]' '[ ]'`; do
>     # stuff
>   done
> 
> At the top of this script, we explicitly set it to ":". This bug prevents
> using event notifiers with more than one argument, i.e.,
> 
> f:void:my_new_event_notifier:int a, void *b:a, b
> 
> would produce output like:
> 
>   void
>   my_new_event_notifier_event (int a, void *b)
>   {
>       if (gdb_events_debug)
>         fprintf_unfiltered (gdb_stdlog, "my_new_event_notifier_event\n");
>       if (!current_event_hooks->my_new_event_notifier)
>         return;
>       current_event_hooks->my_new_event_notifier (a b);
>   }
> 
> 3) Uses "echo" to put strings containing special characters (e.g. \n) into
> files:
> 
>   echo ""
>   echo "fprintf_unfiltered (gdb_stderr, \"This is an error\\n\");"



Yes, ok.  On the last one, gdbarch.sh now uses printf but it doesn't 
matter either way.

	Andrew



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [RFA] gdb-events.sh portability update
  2001-06-07 12:24 ` Andrew Cagney
@ 2001-06-07 12:43   ` Keith Seitz
  0 siblings, 0 replies; 3+ messages in thread
From: Keith Seitz @ 2001-06-07 12:43 UTC (permalink / raw)
  To: gdb-patches

On Thu, 7 Jun 2001, Andrew Cagney wrote:

> > 3) Uses "echo" to put strings containing special characters (e.g. \n) into
> > files:
> >
> >   echo ""
> >   echo "fprintf_unfiltered (gdb_stderr, \"This is an error\\n\");"
>
> Yes, ok.

Done.

> On the last one, gdbarch.sh now uses printf but it doesn't
> matter either way.

So it does. I wasn't sure whether this was portable, but it would seem to
be.

Perhaps one of my subsequent patches to gdb-events.sh will mimick more of
gdbarch.sh... :-)

Keith



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2001-06-07 12:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-07 11:30 [RFA] gdb-events.sh portability update Keith Seitz
2001-06-07 12:24 ` Andrew Cagney
2001-06-07 12:43   ` Keith Seitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox