aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-05-09 07:00:44 +0000
committerRichard Stallman <rms@gnu.org>1992-05-09 07:00:44 +0000
commit2dcb563f6cccc1a1d222e1141c8b15f06798ac97 (patch)
treeb9c8d53638aefdbe9a3932947ee2682b0f21aede /gcc
parenta8031c4edce5929649e0c2558f5a7977cc4b89fa (diff)
downloadgcc-2dcb563f6cccc1a1d222e1141c8b15f06798ac97.zip
gcc-2dcb563f6cccc1a1d222e1141c8b15f06798ac97.tar.gz
gcc-2dcb563f6cccc1a1d222e1141c8b15f06798ac97.tar.bz2
*** empty log message ***
From-SVN: r945
Diffstat (limited to 'gcc')
-rw-r--r--gcc/gcc.c17
-rw-r--r--gcc/rtl.c32
2 files changed, 29 insertions, 20 deletions
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 6a6449d..39df4d5 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -94,6 +94,11 @@ extern int execv (), execvp ();
#define MIN_FATAL_STATUS 1
+/* Flag saying to print the full filename of libgcc.a
+ as found through our usual search mechanism. */
+
+static int print_libgcc_file_name;
+
/* Flag indicating whether we should print the command and arguments */
static int verbose_flag;
@@ -1826,6 +1831,10 @@ process_command (argc, argv)
printf ("%s\n", version_string);
exit (0);
}
+ else if (! strcmp (argv[i], "-print-libgcc-file-name"))
+ {
+ print_libgcc_file_name = 1;
+ }
else if (! strcmp (argv[i], "-Xlinker"))
{
/* Pass the argument of this option to the linker when we link. */
@@ -1939,6 +1948,8 @@ process_command (argc, argv)
{
if (!strcmp (argv[i], "-Xlinker"))
i++;
+ else if (! strcmp (argv[i], "-print-libgcc-file-name"))
+ i++;
else if (argv[i][0] == '-' && argv[i][1] != 0 && argv[i][1] != 'l')
{
register char *p = &argv[i][1];
@@ -3038,6 +3049,12 @@ main (argc, argv)
if (! switches[i].valid)
error ("unrecognized option `-%s'", switches[i].part1);
+ if (print_libgcc_file_name)
+ {
+ printf ("%s\n", find_file ("libgcc.a"));
+ exit (0);
+ }
+
/* Obey some of the options. */
if (verbose_flag)
diff --git a/gcc/rtl.c b/gcc/rtl.c
index dc9e218..7d7d73a 100644
--- a/gcc/rtl.c
+++ b/gcc/rtl.c
@@ -642,36 +642,28 @@ read_rtx (infile)
}
if (c != '"')
dump_and_abort ('"', c, infile);
- j = 0;
- stringbufsize = 10;
- stringbuf = (char *) xmalloc (stringbufsize + 1);
while (1)
{
- if (j >= stringbufsize - 4)
+ c = getc (infile); /* Read the string */
+ if (c == '\\')
{
- stringbufsize *= 2;
- stringbuf = (char *) xrealloc (stringbuf, stringbufsize + 1);
- }
- stringbuf[j] = getc (infile); /* Read the string */
- if (stringbuf[j] == '\\')
- {
- stringbuf[j] = getc (infile); /* Read the string */
+ c = getc (infile); /* Read the string */
/* \; makes stuff for a C string constant containing
newline and tab. */
- if (stringbuf[j] == ';')
- {
- strcpy (&stringbuf[j], "\\n\\t");
- j += 3;
- }
+ if (c == ';')
+ obstack_grow (rtl_obstack, "\\n\\t", 4);
+ else
+ obstack_1grow (rtl_obstack, c);
}
- else if (stringbuf[j] == '"')
+ else if (c == '"')
break;
- j++;
+
+ obstack_1grow (rtl_obstack, c);
}
- stringbuf[j] = 0; /* NUL terminate the string */
- stringbuf = (char *) xrealloc (stringbuf, j + 1);
+ obstack_1grow (rtl_obstack, 0);
+ stringbuf = (char *) obstack_finish (rtl_obstack);
if (saw_paren)
{