aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.1/libgfortran/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8.1/libgfortran/runtime')
-rw-r--r--gcc-4.8.1/libgfortran/runtime/backtrace.c279
-rw-r--r--gcc-4.8.1/libgfortran/runtime/bounds.c271
-rw-r--r--gcc-4.8.1/libgfortran/runtime/compile_options.c278
-rw-r--r--gcc-4.8.1/libgfortran/runtime/convert_char.c69
-rw-r--r--gcc-4.8.1/libgfortran/runtime/environ.c856
-rw-r--r--gcc-4.8.1/libgfortran/runtime/error.c618
-rw-r--r--gcc-4.8.1/libgfortran/runtime/fpu.c41
-rw-r--r--gcc-4.8.1/libgfortran/runtime/in_pack_generic.c220
-rw-r--r--gcc-4.8.1/libgfortran/runtime/in_unpack_generic.c241
-rw-r--r--gcc-4.8.1/libgfortran/runtime/main.c256
-rw-r--r--gcc-4.8.1/libgfortran/runtime/memory.c60
-rw-r--r--gcc-4.8.1/libgfortran/runtime/pause.c70
-rw-r--r--gcc-4.8.1/libgfortran/runtime/select.c46
-rw-r--r--gcc-4.8.1/libgfortran/runtime/select_inc.c133
-rw-r--r--gcc-4.8.1/libgfortran/runtime/stop.c109
-rw-r--r--gcc-4.8.1/libgfortran/runtime/string.c111
16 files changed, 0 insertions, 3658 deletions
diff --git a/gcc-4.8.1/libgfortran/runtime/backtrace.c b/gcc-4.8.1/libgfortran/runtime/backtrace.c
deleted file mode 100644
index 3b5811881..000000000
--- a/gcc-4.8.1/libgfortran/runtime/backtrace.c
+++ /dev/null
@@ -1,279 +0,0 @@
-/* Copyright (C) 2006-2013 Free Software Foundation, Inc.
- Contributed by François-Xavier Coudert
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-
-#include <string.h>
-#include <stdlib.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-#include <limits.h>
-
-#include "unwind.h"
-
-
-/* Macros for common sets of capabilities: can we fork and exec, and
- can we use pipes to communicate with the subprocess. */
-#define CAN_FORK (defined(HAVE_FORK) && defined(HAVE_EXECVE) \
- && defined(HAVE_WAIT))
-#define CAN_PIPE (CAN_FORK && defined(HAVE_PIPE) \
- && defined(HAVE_DUP2) && defined(HAVE_CLOSE))
-
-#ifndef PATH_MAX
-#define PATH_MAX 4096
-#endif
-
-
-/* GDB style #NUM index for each stack frame. */
-
-static void
-bt_header (int num)
-{
- st_printf ("#%d ", num);
-}
-
-
-/* fgets()-like function that reads a line from a fd, without
- needing to malloc() a buffer, and does not use locks, hence should
- be async-signal-safe. */
-
-static char *
-fd_gets (char *s, int size, int fd)
-{
- for (int i = 0; i < size; i++)
- {
- char c;
- ssize_t nread = read (fd, &c, 1);
- if (nread == 1)
- {
- s[i] = c;
- if (c == '\n')
- {
- if (i + 1 < size)
- s[i+1] = '\0';
- else
- s[i] = '\0';
- break;
- }
- }
- else
- {
- s[i] = '\0';
- if (i == 0)
- return NULL;
- break;
- }
- }
- return s;
-}
-
-
-extern char *addr2line_path;
-
-/* Struct containing backtrace state. */
-typedef struct
-{
- int frame_number;
- int direct_output;
- int outfd;
- int infd;
- int error;
-}
-bt_state;
-
-static _Unwind_Reason_Code
-trace_function (struct _Unwind_Context *context, void *state_ptr)
-{
- bt_state* state = (bt_state*) state_ptr;
- _Unwind_Ptr ip;
-#ifdef HAVE_GETIPINFO
- int ip_before_insn = 0;
- ip = _Unwind_GetIPInfo (context, &ip_before_insn);
-
- /* If the unwinder gave us a 'return' address, roll it back a little
- to ensure we get the correct line number for the call itself. */
- if (! ip_before_insn)
- --ip;
-#else
- ip = _Unwind_GetIP (context);
-#endif
-
- if (state->direct_output)
- {
- bt_header(state->frame_number);
- st_printf ("%p\n", (void*) ip);
- }
- else
- {
- char addr_buf[GFC_XTOA_BUF_SIZE], func[1024], file[PATH_MAX];
- char *p;
- const char* addr = gfc_xtoa (ip, addr_buf, sizeof (addr_buf));
- write (state->outfd, addr, strlen (addr));
- write (state->outfd, "\n", 1);
-
- if (! fd_gets (func, sizeof(func), state->infd))
- {
- state->error = 1;
- goto done;
- }
- if (! fd_gets (file, sizeof(file), state->infd))
- {
- state->error = 1;
- goto done;
- }
-
- for (p = func; *p != '\n' && *p != '\r'; p++)
- ;
- *p = '\0';
-
- /* _start is a setup routine that calls main(), and main() is
- the frontend routine that calls some setup stuff and then
- calls MAIN__, so at this point we should stop. */
- if (strcmp (func, "_start") == 0 || strcmp (func, "main") == 0)
- return _URC_END_OF_STACK;
-
- bt_header (state->frame_number);
- estr_write ("0x");
- estr_write (addr);
-
- if (func[0] != '?' && func[1] != '?')
- {
- estr_write (" in ");
- estr_write (func);
- }
-
- if (strncmp (file, "??", 2) == 0)
- estr_write ("\n");
- else
- {
- estr_write (" at ");
- estr_write (file);
- }
- }
-
- done:
-
- state->frame_number++;
-
- return _URC_NO_REASON;
-}
-
-
-/* Display the backtrace. */
-
-void
-backtrace (void)
-{
- bt_state state;
- state.frame_number = 0;
- state.error = 0;
-
-#if CAN_PIPE
-
- if (addr2line_path == NULL)
- goto fallback_noerr;
-
- /* We attempt to extract file and line information from addr2line. */
- do
- {
- /* Local variables. */
- int f[2], pid, inp[2];
-
- /* Don't output an error message if something goes wrong, we'll simply
- fall back to printing the addresses. */
- if (pipe (f) != 0)
- break;
- if (pipe (inp) != 0)
- break;
- if ((pid = fork ()) == -1)
- break;
-
- if (pid == 0)
- {
- /* Child process. */
-#define NUM_FIXEDARGS 7
- char *arg[NUM_FIXEDARGS];
- char *newenv[] = { NULL };
-
- close (f[0]);
-
- close (inp[1]);
- if (dup2 (inp[0], STDIN_FILENO) == -1)
- _exit (1);
- close (inp[0]);
-
- close (STDERR_FILENO);
-
- if (dup2 (f[1], STDOUT_FILENO) == -1)
- _exit (1);
- close (f[1]);
-
- arg[0] = addr2line_path;
- arg[1] = (char *) "-e";
- arg[2] = full_exe_path ();
- arg[3] = (char *) "-f";
- arg[4] = (char *) "-s";
- arg[5] = (char *) "-C";
- arg[6] = NULL;
- execve (addr2line_path, arg, newenv);
- _exit (1);
-#undef NUM_FIXEDARGS
- }
-
- /* Father process. */
- close (f[1]);
- close (inp[0]);
-
- state.outfd = inp[1];
- state.infd = f[0];
- state.direct_output = 0;
- _Unwind_Backtrace (trace_function, &state);
- if (state.error)
- goto fallback;
- close (inp[1]);
- close (f[0]);
- wait (NULL);
- return;
-
-fallback:
- estr_write ("** Something went wrong while running addr2line. **\n"
- "** Falling back to a simpler backtrace scheme. **\n");
- }
- while (0);
-
-fallback_noerr:
-#endif /* CAN_PIPE */
-
- /* Fallback to the simple backtrace without addr2line. */
- state.direct_output = 1;
- _Unwind_Backtrace (trace_function, &state);
-}
-iexport(backtrace);
diff --git a/gcc-4.8.1/libgfortran/runtime/bounds.c b/gcc-4.8.1/libgfortran/runtime/bounds.c
deleted file mode 100644
index b9c6c4122..000000000
--- a/gcc-4.8.1/libgfortran/runtime/bounds.c
+++ /dev/null
@@ -1,271 +0,0 @@
-/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
- Contributed by Thomas Koenig
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <assert.h>
-
-/* Auxiliary functions for bounds checking, mostly to reduce library size. */
-
-/* Bounds checking for the return values of the iforeach functions (such
- as maxloc and minloc). The extent of ret_array must
- must match the rank of array. */
-
-void
-bounds_iforeach_return (array_t *retarray, array_t *array, const char *name)
-{
- index_type rank;
- index_type ret_rank;
- index_type ret_extent;
-
- ret_rank = GFC_DESCRIPTOR_RANK (retarray);
-
- if (ret_rank != 1)
- runtime_error ("Incorrect rank of return array in %s intrinsic:"
- "is %ld, should be 1", name, (long int) ret_rank);
-
- rank = GFC_DESCRIPTOR_RANK (array);
- ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
- if (ret_extent != rank)
- runtime_error ("Incorrect extent in return value of"
- " %s intrinsic: is %ld, should be %ld",
- name, (long int) ret_extent, (long int) rank);
-
-}
-
-/* Check the return of functions generated from ifunction.m4.
- We check the array descriptor "a" against the extents precomputed
- from ifunction.m4, and complain about the argument a_name in the
- intrinsic function. */
-
-void
-bounds_ifunction_return (array_t * a, const index_type * extent,
- const char * a_name, const char * intrinsic)
-{
- int empty;
- int n;
- int rank;
- index_type a_size;
-
- rank = GFC_DESCRIPTOR_RANK (a);
- a_size = size0 (a);
-
- empty = 0;
- for (n = 0; n < rank; n++)
- {
- if (extent[n] == 0)
- empty = 1;
- }
- if (empty)
- {
- if (a_size != 0)
- runtime_error ("Incorrect size in %s of %s"
- " intrinsic: should be zero-sized",
- a_name, intrinsic);
- }
- else
- {
- if (a_size == 0)
- runtime_error ("Incorrect size of %s in %s"
- " intrinsic: should not be zero-sized",
- a_name, intrinsic);
-
- for (n = 0; n < rank; n++)
- {
- index_type a_extent;
- a_extent = GFC_DESCRIPTOR_EXTENT(a, n);
- if (a_extent != extent[n])
- runtime_error("Incorrect extent in %s of %s"
- " intrinsic in dimension %ld: is %ld,"
- " should be %ld", a_name, intrinsic, (long int) n + 1,
- (long int) a_extent, (long int) extent[n]);
-
- }
- }
-}
-
-/* Check that two arrays have equal extents, or are both zero-sized. Abort
- with a runtime error if this is not the case. Complain that a has the
- wrong size. */
-
-void
-bounds_equal_extents (array_t *a, array_t *b, const char *a_name,
- const char *intrinsic)
-{
- index_type a_size, b_size, n;
-
- assert (GFC_DESCRIPTOR_RANK(a) == GFC_DESCRIPTOR_RANK(b));
-
- a_size = size0 (a);
- b_size = size0 (b);
-
- if (b_size == 0)
- {
- if (a_size != 0)
- runtime_error ("Incorrect size of %s in %s"
- " intrinsic: should be zero-sized",
- a_name, intrinsic);
- }
- else
- {
- if (a_size == 0)
- runtime_error ("Incorrect size of %s of %s"
- " intrinsic: Should not be zero-sized",
- a_name, intrinsic);
-
- for (n = 0; n < GFC_DESCRIPTOR_RANK (b); n++)
- {
- index_type a_extent, b_extent;
-
- a_extent = GFC_DESCRIPTOR_EXTENT(a, n);
- b_extent = GFC_DESCRIPTOR_EXTENT(b, n);
- if (a_extent != b_extent)
- runtime_error("Incorrect extent in %s of %s"
- " intrinsic in dimension %ld: is %ld,"
- " should be %ld", a_name, intrinsic, (long int) n + 1,
- (long int) a_extent, (long int) b_extent);
- }
- }
-}
-
-/* Check that the extents of a and b agree, except that a has a missing
- dimension in argument which. Complain about a if anything is wrong. */
-
-void
-bounds_reduced_extents (array_t *a, array_t *b, int which, const char *a_name,
- const char *intrinsic)
-{
-
- index_type i, n, a_size, b_size;
-
- assert (GFC_DESCRIPTOR_RANK(a) == GFC_DESCRIPTOR_RANK(b) - 1);
-
- a_size = size0 (a);
- b_size = size0 (b);
-
- if (b_size == 0)
- {
- if (a_size != 0)
- runtime_error ("Incorrect size in %s of %s"
- " intrinsic: should not be zero-sized",
- a_name, intrinsic);
- }
- else
- {
- if (a_size == 0)
- runtime_error ("Incorrect size of %s of %s"
- " intrinsic: should be zero-sized",
- a_name, intrinsic);
-
- i = 0;
- for (n = 0; n < GFC_DESCRIPTOR_RANK (b); n++)
- {
- index_type a_extent, b_extent;
-
- if (n != which)
- {
- a_extent = GFC_DESCRIPTOR_EXTENT(a, i);
- b_extent = GFC_DESCRIPTOR_EXTENT(b, n);
- if (a_extent != b_extent)
- runtime_error("Incorrect extent in %s of %s"
- " intrinsic in dimension %ld: is %ld,"
- " should be %ld", a_name, intrinsic, (long int) i + 1,
- (long int) a_extent, (long int) b_extent);
- i++;
- }
- }
- }
-}
-
-/* count_0 - count all the true elements in an array. The front
- end usually inlines this, we need this for bounds checking
- for unpack. */
-
-index_type count_0 (const gfc_array_l1 * array)
-{
- const GFC_LOGICAL_1 * restrict base;
- index_type rank;
- int kind;
- int continue_loop;
- index_type count[GFC_MAX_DIMENSIONS];
- index_type extent[GFC_MAX_DIMENSIONS];
- index_type sstride[GFC_MAX_DIMENSIONS];
- index_type result;
- index_type n;
-
- rank = GFC_DESCRIPTOR_RANK (array);
- kind = GFC_DESCRIPTOR_SIZE (array);
-
- base = array->base_addr;
-
- if (kind == 1 || kind == 2 || kind == 4 || kind == 8
-#ifdef HAVE_GFC_LOGICAL_16
- || kind == 16
-#endif
- )
- {
- if (base)
- base = GFOR_POINTER_TO_L1 (base, kind);
- }
- else
- internal_error (NULL, "Funny sized logical array in count_0");
-
- for (n = 0; n < rank; n++)
- {
- sstride[n] = GFC_DESCRIPTOR_STRIDE_BYTES(array,n);
- extent[n] = GFC_DESCRIPTOR_EXTENT(array,n);
- count[n] = 0;
-
- if (extent[n] <= 0)
- return 0;
- }
-
- result = 0;
- continue_loop = 1;
- while (continue_loop)
- {
- if (*base)
- result ++;
-
- count[0]++;
- base += sstride[0];
- n = 0;
- while (count[n] == extent[n])
- {
- count[n] = 0;
- base -= sstride[n] * extent[n];
- n++;
- if (n == rank)
- {
- continue_loop = 0;
- break;
- }
- else
- {
- count[n]++;
- base += sstride[n];
- }
- }
- }
- return result;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/compile_options.c b/gcc-4.8.1/libgfortran/runtime/compile_options.c
deleted file mode 100644
index a49514c0a..000000000
--- a/gcc-4.8.1/libgfortran/runtime/compile_options.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/* Handling of compile-time options that influence the library.
- Copyright (C) 2005-2013 Free Software Foundation, Inc.
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <signal.h>
-
-
-/* Useful compile-time options will be stored in here. */
-compile_options_t compile_options;
-
-
-volatile sig_atomic_t fatal_error_in_progress = 0;
-
-
-/* Helper function for backtrace_handler to write information about the
- received signal to stderr before actually giving the backtrace. */
-static void
-show_signal (int signum)
-{
- const char * name = NULL, * desc = NULL;
-
- switch (signum)
- {
-#if defined(SIGQUIT)
- case SIGQUIT:
- name = "SIGQUIT";
- desc = "Terminal quit signal";
- break;
-#endif
-
- /* The following 4 signals are defined by C89. */
- case SIGILL:
- name = "SIGILL";
- desc = "Illegal instruction";
- break;
-
- case SIGABRT:
- name = "SIGABRT";
- desc = "Process abort signal";
- break;
-
- case SIGFPE:
- name = "SIGFPE";
- desc = "Floating-point exception - erroneous arithmetic operation";
- break;
-
- case SIGSEGV:
- name = "SIGSEGV";
- desc = "Segmentation fault - invalid memory reference";
- break;
-
-#if defined(SIGBUS)
- case SIGBUS:
- name = "SIGBUS";
- desc = "Access to an undefined portion of a memory object";
- break;
-#endif
-
-#if defined(SIGSYS)
- case SIGSYS:
- name = "SIGSYS";
- desc = "Bad system call";
- break;
-#endif
-
-#if defined(SIGTRAP)
- case SIGTRAP:
- name = "SIGTRAP";
- desc = "Trace/breakpoint trap";
- break;
-#endif
-
-#if defined(SIGXCPU)
- case SIGXCPU:
- name = "SIGXCPU";
- desc = "CPU time limit exceeded";
- break;
-#endif
-
-#if defined(SIGXFSZ)
- case SIGXFSZ:
- name = "SIGXFSZ";
- desc = "File size limit exceeded";
- break;
-#endif
- }
-
- if (name)
- st_printf ("\nProgram received signal %s: %s.\n", name, desc);
- else
- st_printf ("\nProgram received signal %d.\n", signum);
-}
-
-
-/* A signal handler to allow us to output a backtrace. */
-void
-backtrace_handler (int signum)
-{
- /* Since this handler is established for more than one kind of signal,
- it might still get invoked recursively by delivery of some other kind
- of signal. Use a static variable to keep track of that. */
- if (fatal_error_in_progress)
- raise (signum);
- fatal_error_in_progress = 1;
-
- show_signal (signum);
- estr_write ("\nBacktrace for this error:\n");
- backtrace ();
-
- /* Now reraise the signal. We reactivate the signal's
- default handling, which is to terminate the process.
- We could just call exit or abort,
- but reraising the signal sets the return status
- from the process correctly. */
- signal (signum, SIG_DFL);
- raise (signum);
-}
-
-
-/* Helper function for set_options because we need to access the
- global variable options which is not seen in set_options. */
-static void
-maybe_find_addr2line (void)
-{
- if (options.backtrace == -1)
- find_addr2line ();
-}
-
-/* Set the usual compile-time options. */
-extern void set_options (int , int []);
-export_proto(set_options);
-
-void
-set_options (int num, int options[])
-{
- if (num >= 1)
- compile_options.warn_std = options[0];
- if (num >= 2)
- compile_options.allow_std = options[1];
- if (num >= 3)
- compile_options.pedantic = options[2];
- /* options[3] is the removed -fdump-core option. It's place in the
- options array is retained due to ABI compatibility. Remove when
- bumping the library ABI. */
- if (num >= 5)
- compile_options.backtrace = options[4];
- if (num >= 6)
- compile_options.sign_zero = options[5];
- if (num >= 7)
- compile_options.bounds_check = options[6];
- /* options[7] is the -frange-check option, which no longer affects
- the library behavior; range checking is now always done when
- parsing integers. It's place in the options array is retained due
- to ABI compatibility. Remove when bumping the library ABI. */
-
- /* If backtrace is required, we set signal handlers on the POSIX
- 2001 signals with core action. */
- if (compile_options.backtrace)
- {
-#if defined(SIGQUIT)
- signal (SIGQUIT, backtrace_handler);
-#endif
-
- /* The following 4 signals are defined by C89. */
- signal (SIGILL, backtrace_handler);
- signal (SIGABRT, backtrace_handler);
- signal (SIGFPE, backtrace_handler);
- signal (SIGSEGV, backtrace_handler);
-
-#if defined(SIGBUS)
- signal (SIGBUS, backtrace_handler);
-#endif
-
-#if defined(SIGSYS)
- signal (SIGSYS, backtrace_handler);
-#endif
-
-#if defined(SIGTRAP)
- signal (SIGTRAP, backtrace_handler);
-#endif
-
-#if defined(SIGXCPU)
- signal (SIGXCPU, backtrace_handler);
-#endif
-
-#if defined(SIGXFSZ)
- signal (SIGXFSZ, backtrace_handler);
-#endif
-
- maybe_find_addr2line ();
- }
-}
-
-
-/* Default values for the compile-time options. Keep in sync with
- gcc/fortran/options.c (gfc_init_options). */
-void
-init_compile_options (void)
-{
- compile_options.warn_std = GFC_STD_F95_DEL | GFC_STD_LEGACY;
- compile_options.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL
- | GFC_STD_F2003 | GFC_STD_F2008 | GFC_STD_F95 | GFC_STD_F77
- | GFC_STD_F2008_OBS | GFC_STD_GNU | GFC_STD_LEGACY;
- compile_options.pedantic = 0;
- compile_options.backtrace = 0;
- compile_options.sign_zero = 1;
-}
-
-/* Function called by the front-end to tell us the
- default for unformatted data conversion. */
-
-extern void set_convert (int);
-export_proto (set_convert);
-
-void
-set_convert (int conv)
-{
- compile_options.convert = conv;
-}
-
-extern void set_record_marker (int);
-export_proto (set_record_marker);
-
-
-void
-set_record_marker (int val)
-{
-
- switch(val)
- {
- case 4:
- compile_options.record_marker = sizeof (GFC_INTEGER_4);
- break;
-
- case 8:
- compile_options.record_marker = sizeof (GFC_INTEGER_8);
- break;
-
- default:
- runtime_error ("Invalid value for record marker");
- break;
- }
-}
-
-extern void set_max_subrecord_length (int);
-export_proto (set_max_subrecord_length);
-
-void set_max_subrecord_length(int val)
-{
- if (val > GFC_MAX_SUBRECORD_LENGTH || val < 1)
- {
- runtime_error ("Invalid value for maximum subrecord length");
- return;
- }
-
- compile_options.max_subrecord_length = val;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/convert_char.c b/gcc-4.8.1/libgfortran/runtime/convert_char.c
deleted file mode 100644
index e30a2f634..000000000
--- a/gcc-4.8.1/libgfortran/runtime/convert_char.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Runtime conversion of strings from one character kind to another.
- Copyright (C) 2008-2013 Free Software Foundation, Inc.
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-
-extern void convert_char1_to_char4 (gfc_char4_t **, gfc_charlen_type,
- const unsigned char *);
-export_proto(convert_char1_to_char4);
-
-extern void convert_char4_to_char1 (unsigned char **, gfc_charlen_type,
- const gfc_char4_t *);
-export_proto(convert_char4_to_char1);
-
-
-void
-convert_char1_to_char4 (gfc_char4_t **dst, gfc_charlen_type len,
- const unsigned char *src)
-{
- gfc_charlen_type i, l;
-
- l = len > 0 ? len : 0;
- *dst = xmalloc ((l + 1) * sizeof (gfc_char4_t));
-
- for (i = 0; i < l; i++)
- (*dst)[i] = src[i];
-
- (*dst)[l] = '\0';
-}
-
-
-void
-convert_char4_to_char1 (unsigned char **dst, gfc_charlen_type len,
- const gfc_char4_t *src)
-{
- gfc_charlen_type i, l;
-
- l = len > 0 ? len : 0;
- *dst = xmalloc ((l + 1) * sizeof (unsigned char));
-
- for (i = 0; i < l; i++)
- (*dst)[i] = src[i];
-
- (*dst)[l] = '\0';
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/environ.c b/gcc-4.8.1/libgfortran/runtime/environ.c
deleted file mode 100644
index 8c09391f0..000000000
--- a/gcc-4.8.1/libgfortran/runtime/environ.c
+++ /dev/null
@@ -1,856 +0,0 @@
-/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Andy Vaught
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-
-#include <string.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-
-/* Environment scanner. Examine the environment for controlling minor
- * aspects of the program's execution. Our philosophy here that the
- * environment should not prevent the program from running, so an
- * environment variable with a messed-up value will be interpreted in
- * the default way.
- *
- * Most of the environment is checked early in the startup sequence,
- * but other variables are checked during execution of the user's
- * program. */
-
-options_t options;
-
-
-typedef struct variable
-{
- const char *name;
- int value, *var;
- void (*init) (struct variable *);
- void (*show) (struct variable *);
- const char *desc;
- int bad;
-}
-variable;
-
-static void init_unformatted (variable *);
-
-
-#ifdef FALLBACK_SECURE_GETENV
-char *
-secure_getenv (const char *name)
-{
- if ((getuid () == geteuid ()) && (getgid () == getegid ()))
- return getenv (name);
- else
- return NULL;
-}
-#endif
-
-
-/* print_spaces()-- Print a particular number of spaces. */
-
-static void
-print_spaces (int n)
-{
- char buffer[80];
- int i;
-
- if (n <= 0)
- return;
-
- for (i = 0; i < n; i++)
- buffer[i] = ' ';
-
- buffer[i] = '\0';
-
- estr_write (buffer);
-}
-
-
-/* var_source()-- Return a string that describes where the value of a
- * variable comes from */
-
-static const char *
-var_source (variable * v)
-{
- if (getenv (v->name) == NULL)
- return "Default";
-
- if (v->bad)
- return "Bad ";
-
- return "Set ";
-}
-
-
-/* init_integer()-- Initialize an integer environment variable. */
-
-static void
-init_integer (variable * v)
-{
- char *p, *q;
-
- p = getenv (v->name);
- if (p == NULL)
- goto set_default;
-
- for (q = p; *q; q++)
- if (!isdigit (*q) && (p != q || *q != '-'))
- {
- v->bad = 1;
- goto set_default;
- }
-
- *v->var = atoi (p);
- return;
-
- set_default:
- *v->var = v->value;
- return;
-}
-
-
-/* init_unsigned_integer()-- Initialize an integer environment variable
- which has to be positive. */
-
-static void
-init_unsigned_integer (variable * v)
-{
- char *p, *q;
-
- p = getenv (v->name);
- if (p == NULL)
- goto set_default;
-
- for (q = p; *q; q++)
- if (!isdigit (*q))
- {
- v->bad = 1;
- goto set_default;
- }
-
- *v->var = atoi (p);
- return;
-
- set_default:
- *v->var = v->value;
- return;
-}
-
-
-/* show_integer()-- Show an integer environment variable */
-
-static void
-show_integer (variable * v)
-{
- st_printf ("%s %d\n", var_source (v), *v->var);
-}
-
-
-/* init_boolean()-- Initialize a boolean environment variable. We
- * only look at the first letter of the variable. */
-
-static void
-init_boolean (variable * v)
-{
- char *p;
-
- p = getenv (v->name);
- if (p == NULL)
- goto set_default;
-
- if (*p == '1' || *p == 'Y' || *p == 'y')
- {
- *v->var = 1;
- return;
- }
-
- if (*p == '0' || *p == 'N' || *p == 'n')
- {
- *v->var = 0;
- return;
- }
-
- v->bad = 1;
-
-set_default:
- *v->var = v->value;
- return;
-}
-
-
-/* show_boolean()-- Show a boolean environment variable */
-
-static void
-show_boolean (variable * v)
-{
- st_printf ("%s %s\n", var_source (v), *v->var ? "Yes" : "No");
-}
-
-
-static void
-init_sep (variable * v)
-{
- int seen_comma;
- char *p;
-
- p = getenv (v->name);
- if (p == NULL)
- goto set_default;
-
- v->bad = 1;
- options.separator = p;
- options.separator_len = strlen (p);
-
- /* Make sure the separator is valid */
-
- if (options.separator_len == 0)
- goto set_default;
- seen_comma = 0;
-
- while (*p)
- {
- if (*p == ',')
- {
- if (seen_comma)
- goto set_default;
- seen_comma = 1;
- p++;
- continue;
- }
-
- if (*p++ != ' ')
- goto set_default;
- }
-
- v->bad = 0;
- return;
-
-set_default:
- options.separator = " ";
- options.separator_len = 1;
-}
-
-
-static void
-show_sep (variable * v)
-{
- st_printf ("%s \"%s\"\n", var_source (v), options.separator);
-}
-
-
-static void
-init_string (variable * v __attribute__ ((unused)))
-{
-}
-
-static void
-show_string (variable * v)
-{
- const char *p;
-
- p = getenv (v->name);
- if (p == NULL)
- p = "";
-
- estr_write (var_source (v));
- estr_write (" \"");
- estr_write (p);
- estr_write ("\"\n");
-}
-
-
-static variable variable_table[] = {
- {"GFORTRAN_STDIN_UNIT", GFC_STDIN_UNIT_NUMBER, &options.stdin_unit,
- init_integer, show_integer,
- "Unit number that will be preconnected to standard input\n"
- "(No preconnection if negative)", 0},
-
- {"GFORTRAN_STDOUT_UNIT", GFC_STDOUT_UNIT_NUMBER, &options.stdout_unit,
- init_integer, show_integer,
- "Unit number that will be preconnected to standard output\n"
- "(No preconnection if negative)", 0},
-
- {"GFORTRAN_STDERR_UNIT", GFC_STDERR_UNIT_NUMBER, &options.stderr_unit,
- init_integer, show_integer,
- "Unit number that will be preconnected to standard error\n"
- "(No preconnection if negative)", 0},
-
- {"TMPDIR", 0, NULL, init_string, show_string,
- "Directory for scratch files.", 0},
-
- {"GFORTRAN_UNBUFFERED_ALL", 0, &options.all_unbuffered, init_boolean,
- show_boolean,
- "If TRUE, all output is unbuffered. This will slow down large writes "
- "but can be\nuseful for forcing data to be displayed immediately.", 0},
-
- {"GFORTRAN_UNBUFFERED_PRECONNECTED", 0, &options.unbuffered_preconnected,
- init_boolean, show_boolean,
- "If TRUE, output to preconnected units is unbuffered.", 0},
-
- {"GFORTRAN_SHOW_LOCUS", 1, &options.locus, init_boolean, show_boolean,
- "If TRUE, print filename and line number where runtime errors happen.", 0},
-
- {"GFORTRAN_OPTIONAL_PLUS", 0, &options.optional_plus, init_boolean, show_boolean,
- "Print optional plus signs in numbers where permitted. Default FALSE.", 0},
-
- {"GFORTRAN_DEFAULT_RECL", DEFAULT_RECL, &options.default_recl,
- init_unsigned_integer, show_integer,
- "Default maximum record length for sequential files. Most useful for\n"
- "adjusting line length of preconnected units. Default "
- stringize (DEFAULT_RECL), 0},
-
- {"GFORTRAN_LIST_SEPARATOR", 0, NULL, init_sep, show_sep,
- "Separator to use when writing list output. May contain any number of "
- "spaces\nand at most one comma. Default is a single space.", 0},
-
- /* GFORTRAN_CONVERT_UNIT - Set the default data conversion for
- unformatted I/O. */
- {"GFORTRAN_CONVERT_UNIT", 0, 0, init_unformatted, show_string,
- "Set format for unformatted files", 0},
-
- {"GFORTRAN_ERROR_BACKTRACE", -1, &options.backtrace,
- init_boolean, show_boolean,
- "Print out a backtrace (if possible) on runtime error", -1},
-
- {NULL, 0, NULL, NULL, NULL, NULL, 0}
-};
-
-
-/* init_variables()-- Initialize most runtime variables from
- * environment variables. */
-
-void
-init_variables (void)
-{
- variable *v;
-
- for (v = variable_table; v->name; v++)
- v->init (v);
-}
-
-
-void
-show_variables (void)
-{
- variable *v;
- int n;
-
- /* TODO: print version number. */
- estr_write ("GNU Fortran runtime library version "
- "UNKNOWN" "\n\n");
-
- estr_write ("Environment variables:\n");
- estr_write ("----------------------\n");
-
- for (v = variable_table; v->name; v++)
- {
- n = estr_write (v->name);
- print_spaces (25 - n);
-
- if (v->show == show_integer)
- estr_write ("Integer ");
- else if (v->show == show_boolean)
- estr_write ("Boolean ");
- else
- estr_write ("String ");
-
- v->show (v);
- estr_write (v->desc);
- estr_write ("\n\n");
- }
-
- /* System error codes */
-
- estr_write ("\nRuntime error codes:");
- estr_write ("\n--------------------\n");
-
- for (n = LIBERROR_FIRST + 1; n < LIBERROR_LAST; n++)
- if (n < 0 || n > 9)
- st_printf ("%d %s\n", n, translate_error (n));
- else
- st_printf (" %d %s\n", n, translate_error (n));
-
- estr_write ("\nCommand line arguments:\n");
- estr_write (" --help Print this list\n");
-
- exit (0);
-}
-
-/* This is the handling of the GFORTRAN_CONVERT_UNITS environment variable.
- It is called from environ.c to parse this variable, and from
- open.c to determine if the user specified a default for an
- unformatted file.
- The syntax of the environment variable is, in bison grammar:
-
- GFORTRAN_CONVERT_UNITS: mode | mode ';' exception ;
- mode: 'native' | 'swap' | 'big_endian' | 'little_endian' ;
- exception: mode ':' unit_list | unit_list ;
- unit_list: unit_spec | unit_list unit_spec ;
- unit_spec: INTEGER | INTEGER '-' INTEGER ;
-*/
-
-/* Defines for the tokens. Other valid tokens are ',', ':', '-'. */
-
-
-#define NATIVE 257
-#define SWAP 258
-#define BIG 259
-#define LITTLE 260
-/* Some space for additional tokens later. */
-#define INTEGER 273
-#define END (-1)
-#define ILLEGAL (-2)
-
-typedef struct
-{
- int unit;
- unit_convert conv;
-} exception_t;
-
-
-static char *p; /* Main character pointer for parsing. */
-static char *lastpos; /* Auxiliary pointer, for backing up. */
-static int unit_num; /* The last unit number read. */
-static int unit_count; /* The number of units found. */
-static int do_count; /* Parsing is done twice - first to count the number
- of units, then to fill in the table. This
- variable controls what to do. */
-static exception_t *elist; /* The list of exceptions to the default. This is
- sorted according to unit number. */
-static int n_elist; /* Number of exceptions to the default. */
-
-static unit_convert endian; /* Current endianness. */
-
-static unit_convert def; /* Default as specified (if any). */
-
-/* Search for a unit number, using a binary search. The
- first argument is the unit number to search for. The second argument
- is a pointer to an index.
- If the unit number is found, the function returns 1, and the index
- is that of the element.
- If the unit number is not found, the function returns 0, and the
- index is the one where the element would be inserted. */
-
-static int
-search_unit (int unit, int *ip)
-{
- int low, high, mid;
-
- if (n_elist == 0)
- {
- *ip = 0;
- return 0;
- }
-
- low = 0;
- high = n_elist - 1;
-
- do
- {
- mid = (low + high) / 2;
- if (unit == elist[mid].unit)
- {
- *ip = mid;
- return 1;
- }
- else if (unit > elist[mid].unit)
- low = mid + 1;
- else
- high = mid - 1;
- } while (low <= high);
-
- if (unit > elist[mid].unit)
- *ip = mid + 1;
- else
- *ip = mid;
-
- return 0;
-}
-
-/* This matches a keyword. If it is found, return the token supplied,
- otherwise return ILLEGAL. */
-
-static int
-match_word (const char *word, int tok)
-{
- int res;
-
- if (strncasecmp (p, word, strlen (word)) == 0)
- {
- p += strlen (word);
- res = tok;
- }
- else
- res = ILLEGAL;
- return res;
-
-}
-
-/* Match an integer and store its value in unit_num. This only works
- if p actually points to the start of an integer. The caller has
- to ensure this. */
-
-static int
-match_integer (void)
-{
- unit_num = 0;
- while (isdigit (*p))
- unit_num = unit_num * 10 + (*p++ - '0');
- return INTEGER;
-
-}
-
-/* This reads the next token from the GFORTRAN_CONVERT_UNITS variable.
- Returned values are the different tokens. */
-
-static int
-next_token (void)
-{
- int result;
-
- lastpos = p;
- switch (*p)
- {
- case '\0':
- result = END;
- break;
-
- case ':':
- case ',':
- case '-':
- case ';':
- result = *p;
- p++;
- break;
-
- case 'b':
- case 'B':
- result = match_word ("big_endian", BIG);
- break;
-
- case 'l':
- case 'L':
- result = match_word ("little_endian", LITTLE);
- break;
-
- case 'n':
- case 'N':
- result = match_word ("native", NATIVE);
- break;
-
- case 's':
- case 'S':
- result = match_word ("swap", SWAP);
- break;
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- result = match_integer ();
- break;
-
- default:
- result = ILLEGAL;
- break;
- }
- return result;
-}
-
-/* Back up the last token by setting back the character pointer. */
-
-static void
-push_token (void)
-{
- p = lastpos;
-}
-
-/* This is called when a unit is identified. If do_count is nonzero,
- increment the number of units by one. If do_count is zero,
- put the unit into the table. */
-
-static void
-mark_single (int unit)
-{
- int i,j;
-
- if (do_count)
- {
- unit_count++;
- return;
- }
- if (search_unit (unit, &i))
- {
- elist[i].conv = endian;
- }
- else
- {
- for (j=n_elist-1; j>=i; j--)
- elist[j+1] = elist[j];
-
- n_elist += 1;
- elist[i].unit = unit;
- elist[i].conv = endian;
- }
-}
-
-/* This is called when a unit range is identified. If do_count is
- nonzero, increase the number of units. If do_count is zero,
- put the unit into the table. */
-
-static void
-mark_range (int unit1, int unit2)
-{
- int i;
- if (do_count)
- unit_count += abs (unit2 - unit1) + 1;
- else
- {
- if (unit2 < unit1)
- for (i=unit2; i<=unit1; i++)
- mark_single (i);
- else
- for (i=unit1; i<=unit2; i++)
- mark_single (i);
- }
-}
-
-/* Parse the GFORTRAN_CONVERT_UNITS variable. This is called
- twice, once to count the units and once to actually mark them in
- the table. When counting, we don't check for double occurrences
- of units. */
-
-static int
-do_parse (void)
-{
- int tok;
- int unit1;
- int continue_ulist;
- char *start;
-
- unit_count = 0;
-
- start = p;
-
- /* Parse the string. First, let's look for a default. */
- tok = next_token ();
- switch (tok)
- {
- case NATIVE:
- endian = GFC_CONVERT_NATIVE;
- break;
-
- case SWAP:
- endian = GFC_CONVERT_SWAP;
- break;
-
- case BIG:
- endian = GFC_CONVERT_BIG;
- break;
-
- case LITTLE:
- endian = GFC_CONVERT_LITTLE;
- break;
-
- case INTEGER:
- /* A leading digit means that we are looking at an exception.
- Reset the position to the beginning, and continue processing
- at the exception list. */
- p = start;
- goto exceptions;
- break;
-
- case END:
- goto end;
- break;
-
- default:
- goto error;
- break;
- }
-
- tok = next_token ();
- switch (tok)
- {
- case ';':
- def = endian;
- break;
-
- case ':':
- /* This isn't a default after all. Reset the position to the
- beginning, and continue processing at the exception list. */
- p = start;
- goto exceptions;
- break;
-
- case END:
- def = endian;
- goto end;
- break;
-
- default:
- goto error;
- break;
- }
-
- exceptions:
-
- /* Loop over all exceptions. */
- while(1)
- {
- tok = next_token ();
- switch (tok)
- {
- case NATIVE:
- if (next_token () != ':')
- goto error;
- endian = GFC_CONVERT_NATIVE;
- break;
-
- case SWAP:
- if (next_token () != ':')
- goto error;
- endian = GFC_CONVERT_SWAP;
- break;
-
- case LITTLE:
- if (next_token () != ':')
- goto error;
- endian = GFC_CONVERT_LITTLE;
- break;
-
- case BIG:
- if (next_token () != ':')
- goto error;
- endian = GFC_CONVERT_BIG;
- break;
-
- case INTEGER:
- push_token ();
- break;
-
- case END:
- goto end;
- break;
-
- default:
- goto error;
- break;
- }
- /* We arrive here when we want to parse a list of
- numbers. */
- continue_ulist = 1;
- do
- {
- tok = next_token ();
- if (tok != INTEGER)
- goto error;
-
- unit1 = unit_num;
- tok = next_token ();
- /* The number can be followed by a - and another number,
- which means that this is a unit range, a comma
- or a semicolon. */
- if (tok == '-')
- {
- if (next_token () != INTEGER)
- goto error;
-
- mark_range (unit1, unit_num);
- tok = next_token ();
- if (tok == END)
- goto end;
- else if (tok == ';')
- continue_ulist = 0;
- else if (tok != ',')
- goto error;
- }
- else
- {
- mark_single (unit1);
- switch (tok)
- {
- case ';':
- continue_ulist = 0;
- break;
-
- case ',':
- break;
-
- case END:
- goto end;
- break;
-
- default:
- goto error;
- }
- }
- } while (continue_ulist);
- }
- end:
- return 0;
- error:
- def = GFC_CONVERT_NONE;
- return -1;
-}
-
-void init_unformatted (variable * v)
-{
- char *val;
- val = getenv (v->name);
- def = GFC_CONVERT_NONE;
- n_elist = 0;
-
- if (val == NULL)
- return;
- do_count = 1;
- p = val;
- do_parse ();
- if (do_count <= 0)
- {
- n_elist = 0;
- elist = NULL;
- }
- else
- {
- elist = xmalloc (unit_count * sizeof (exception_t));
- do_count = 0;
- p = val;
- do_parse ();
- }
-}
-
-/* Get the default conversion for for an unformatted unit. */
-
-unit_convert
-get_unformatted_convert (int unit)
-{
- int i;
-
- if (elist == NULL)
- return def;
- else if (search_unit (unit, &i))
- return elist[i].conv;
- else
- return def;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/error.c b/gcc-4.8.1/libgfortran/runtime/error.c
deleted file mode 100644
index f09fa201e..000000000
--- a/gcc-4.8.1/libgfortran/runtime/error.c
+++ /dev/null
@@ -1,618 +0,0 @@
-/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Andy Vaught
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-
-#include "libgfortran.h"
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <signal.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <stdlib.h>
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-/* <sys/time.h> has to be included before <sys/resource.h> to work
- around PR 30518; otherwise, MacOS 10.3.9 headers are just broken. */
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-
-
-#ifdef __MINGW32__
-#define HAVE_GETPID 1
-#include <process.h>
-#endif
-
-
-/* Termination of a program: F2008 2.3.5 talks about "normal
- termination" and "error termination". Normal termination occurs as
- a result of e.g. executing the end program statement, and executing
- the STOP statement. It includes the effect of the C exit()
- function.
-
- Error termination is initiated when the ERROR STOP statement is
- executed, when ALLOCATE/DEALLOCATE fails without STAT= being
- specified, when some of the co-array synchronization statements
- fail without STAT= being specified, and some I/O errors if
- ERR/IOSTAT/END/EOR is not present, and finally EXECUTE_COMMAND_LINE
- failure without CMDSTAT=.
-
- 2.3.5 also explains how co-images synchronize during termination.
-
- In libgfortran we have two ways of ending a program. exit(code) is
- a normal exit; calling exit() also causes open units to be
- closed. No backtrace or core dump is needed here. When something
- goes wrong, we have sys_abort() which tries to print the backtrace
- if -fbacktrace is enabled, and then dumps core; whether a core file
- is generated is system dependent. When aborting, we don't flush and
- close open units, as program memory might be corrupted and we'd
- rather risk losing dirty data in the buffers rather than corrupting
- files on disk.
-
-*/
-
-/* Error conditions. The tricky part here is printing a message when
- * it is the I/O subsystem that is severely wounded. Our goal is to
- * try and print something making the fewest assumptions possible,
- * then try to clean up before actually exiting.
- *
- * The following exit conditions are defined:
- * 0 Normal program exit.
- * 1 Terminated because of operating system error.
- * 2 Error in the runtime library
- * 3 Internal error in runtime library
- *
- * Other error returns are reserved for the STOP statement with a numeric code.
- */
-
-
-/* Write a null-terminated C string to standard error. This function
- is async-signal-safe. */
-
-ssize_t
-estr_write (const char *str)
-{
- return write (STDERR_FILENO, str, strlen (str));
-}
-
-
-/* st_vprintf()-- vsnprintf-like function for error output. We use a
- stack allocated buffer for formatting; since this function might be
- called from within a signal handler, printing directly to stderr
- with vfprintf is not safe since the stderr locking might lead to a
- deadlock. */
-
-#define ST_VPRINTF_SIZE 512
-
-int
-st_vprintf (const char *format, va_list ap)
-{
- int written;
- char buffer[ST_VPRINTF_SIZE];
-
-#ifdef HAVE_VSNPRINTF
- written = vsnprintf(buffer, ST_VPRINTF_SIZE, format, ap);
-#else
- written = vsprintf(buffer, format, ap);
-
- if (written >= ST_VPRINTF_SIZE - 1)
- {
- /* The error message was longer than our buffer. Ouch. Because
- we may have messed up things badly, report the error and
- quit. */
-#define ERROR_MESSAGE "Internal error: buffer overrun in st_vprintf()\n"
- write (STDERR_FILENO, buffer, ST_VPRINTF_SIZE - 1);
- write (STDERR_FILENO, ERROR_MESSAGE, strlen(ERROR_MESSAGE));
- sys_abort ();
-#undef ERROR_MESSAGE
-
- }
-#endif
-
- written = write (STDERR_FILENO, buffer, written);
- return written;
-}
-
-
-int
-st_printf (const char * format, ...)
-{
- int written;
- va_list ap;
- va_start (ap, format);
- written = st_vprintf (format, ap);
- va_end (ap);
- return written;
-}
-
-
-/* sys_abort()-- Terminate the program showing backtrace and dumping
- core. */
-
-void
-sys_abort (void)
-{
- /* If backtracing is enabled, print backtrace and disable signal
- handler for ABRT. */
- if (options.backtrace == 1
- || (options.backtrace == -1 && compile_options.backtrace == 1))
- {
- estr_write ("\nProgram aborted. Backtrace:\n");
- backtrace ();
- signal (SIGABRT, SIG_DFL);
- }
-
- abort();
-}
-
-
-/* gfc_xtoa()-- Integer to hexadecimal conversion. */
-
-const char *
-gfc_xtoa (GFC_UINTEGER_LARGEST n, char *buffer, size_t len)
-{
- int digit;
- char *p;
-
- assert (len >= GFC_XTOA_BUF_SIZE);
-
- if (n == 0)
- return "0";
-
- p = buffer + GFC_XTOA_BUF_SIZE - 1;
- *p = '\0';
-
- while (n != 0)
- {
- digit = n & 0xF;
- if (digit > 9)
- digit += 'A' - '0' - 10;
-
- *--p = '0' + digit;
- n >>= 4;
- }
-
- return p;
-}
-
-
-/* Hopefully thread-safe wrapper for a strerror_r() style function. */
-
-char *
-gf_strerror (int errnum,
- char * buf __attribute__((unused)),
- size_t buflen __attribute__((unused)))
-{
-#ifdef HAVE_STRERROR_R
- /* POSIX returns an "int", GNU a "char*". */
- return
- __builtin_choose_expr (__builtin_classify_type (strerror_r (0, buf, 0))
- == 5,
- /* GNU strerror_r() */
- strerror_r (errnum, buf, buflen),
- /* POSIX strerror_r () */
- (strerror_r (errnum, buf, buflen), buf));
-#elif defined(HAVE_STRERROR_R_2ARGS)
- strerror_r (errnum, buf);
- return buf;
-#else
- /* strerror () is not necessarily thread-safe, but should at least
- be available everywhere. */
- return strerror (errnum);
-#endif
-}
-
-
-/* show_locus()-- Print a line number and filename describing where
- * something went wrong */
-
-void
-show_locus (st_parameter_common *cmp)
-{
- char *filename;
-
- if (!options.locus || cmp == NULL || cmp->filename == NULL)
- return;
-
- if (cmp->unit > 0)
- {
- filename = filename_from_unit (cmp->unit);
-
- if (filename != NULL)
- {
- st_printf ("At line %d of file %s (unit = %d, file = '%s')\n",
- (int) cmp->line, cmp->filename, (int) cmp->unit, filename);
- free (filename);
- }
- else
- {
- st_printf ("At line %d of file %s (unit = %d)\n",
- (int) cmp->line, cmp->filename, (int) cmp->unit);
- }
- return;
- }
-
- st_printf ("At line %d of file %s\n", (int) cmp->line, cmp->filename);
-}
-
-
-/* recursion_check()-- It's possible for additional errors to occur
- * during fatal error processing. We detect this condition here and
- * exit with code 4 immediately. */
-
-#define MAGIC 0x20DE8101
-
-static void
-recursion_check (void)
-{
- static int magic = 0;
-
- /* Don't even try to print something at this point */
- if (magic == MAGIC)
- sys_abort ();
-
- magic = MAGIC;
-}
-
-
-#define STRERR_MAXSZ 256
-
-/* os_error()-- Operating system error. We get a message from the
- * operating system, show it and leave. Some operating system errors
- * are caught and processed by the library. If not, we come here. */
-
-void
-os_error (const char *message)
-{
- char errmsg[STRERR_MAXSZ];
- recursion_check ();
- estr_write ("Operating system error: ");
- estr_write (gf_strerror (errno, errmsg, STRERR_MAXSZ));
- estr_write ("\n");
- estr_write (message);
- estr_write ("\n");
- exit (1);
-}
-iexport(os_error);
-
-
-/* void runtime_error()-- These are errors associated with an
- * invalid fortran program. */
-
-void
-runtime_error (const char *message, ...)
-{
- va_list ap;
-
- recursion_check ();
- estr_write ("Fortran runtime error: ");
- va_start (ap, message);
- st_vprintf (message, ap);
- va_end (ap);
- estr_write ("\n");
- exit (2);
-}
-iexport(runtime_error);
-
-/* void runtime_error_at()-- These are errors associated with a
- * run time error generated by the front end compiler. */
-
-void
-runtime_error_at (const char *where, const char *message, ...)
-{
- va_list ap;
-
- recursion_check ();
- estr_write (where);
- estr_write ("\nFortran runtime error: ");
- va_start (ap, message);
- st_vprintf (message, ap);
- va_end (ap);
- estr_write ("\n");
- exit (2);
-}
-iexport(runtime_error_at);
-
-
-void
-runtime_warning_at (const char *where, const char *message, ...)
-{
- va_list ap;
-
- estr_write (where);
- estr_write ("\nFortran runtime warning: ");
- va_start (ap, message);
- st_vprintf (message, ap);
- va_end (ap);
- estr_write ("\n");
-}
-iexport(runtime_warning_at);
-
-
-/* void internal_error()-- These are this-can't-happen errors
- * that indicate something deeply wrong. */
-
-void
-internal_error (st_parameter_common *cmp, const char *message)
-{
- recursion_check ();
- show_locus (cmp);
- estr_write ("Internal Error: ");
- estr_write (message);
- estr_write ("\n");
-
- /* This function call is here to get the main.o object file included
- when linking statically. This works because error.o is supposed to
- be always linked in (and the function call is in internal_error
- because hopefully it doesn't happen too often). */
- stupid_function_name_for_static_linking();
-
- exit (3);
-}
-
-
-/* translate_error()-- Given an integer error code, return a string
- * describing the error. */
-
-const char *
-translate_error (int code)
-{
- const char *p;
-
- switch (code)
- {
- case LIBERROR_EOR:
- p = "End of record";
- break;
-
- case LIBERROR_END:
- p = "End of file";
- break;
-
- case LIBERROR_OK:
- p = "Successful return";
- break;
-
- case LIBERROR_OS:
- p = "Operating system error";
- break;
-
- case LIBERROR_BAD_OPTION:
- p = "Bad statement option";
- break;
-
- case LIBERROR_MISSING_OPTION:
- p = "Missing statement option";
- break;
-
- case LIBERROR_OPTION_CONFLICT:
- p = "Conflicting statement options";
- break;
-
- case LIBERROR_ALREADY_OPEN:
- p = "File already opened in another unit";
- break;
-
- case LIBERROR_BAD_UNIT:
- p = "Unattached unit";
- break;
-
- case LIBERROR_FORMAT:
- p = "FORMAT error";
- break;
-
- case LIBERROR_BAD_ACTION:
- p = "Incorrect ACTION specified";
- break;
-
- case LIBERROR_ENDFILE:
- p = "Read past ENDFILE record";
- break;
-
- case LIBERROR_BAD_US:
- p = "Corrupt unformatted sequential file";
- break;
-
- case LIBERROR_READ_VALUE:
- p = "Bad value during read";
- break;
-
- case LIBERROR_READ_OVERFLOW:
- p = "Numeric overflow on read";
- break;
-
- case LIBERROR_INTERNAL:
- p = "Internal error in run-time library";
- break;
-
- case LIBERROR_INTERNAL_UNIT:
- p = "Internal unit I/O error";
- break;
-
- case LIBERROR_DIRECT_EOR:
- p = "Write exceeds length of DIRECT access record";
- break;
-
- case LIBERROR_SHORT_RECORD:
- p = "I/O past end of record on unformatted file";
- break;
-
- case LIBERROR_CORRUPT_FILE:
- p = "Unformatted file structure has been corrupted";
- break;
-
- default:
- p = "Unknown error code";
- break;
- }
-
- return p;
-}
-
-
-/* generate_error()-- Come here when an error happens. This
- * subroutine is called if it is possible to continue on after the error.
- * If an IOSTAT or IOMSG variable exists, we set it. If IOSTAT or
- * ERR labels are present, we return, otherwise we terminate the program
- * after printing a message. The error code is always required but the
- * message parameter can be NULL, in which case a string describing
- * the most recent operating system error is used. */
-
-void
-generate_error (st_parameter_common *cmp, int family, const char *message)
-{
- char errmsg[STRERR_MAXSZ];
-
- /* If there was a previous error, don't mask it with another
- error message, EOF or EOR condition. */
-
- if ((cmp->flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_ERROR)
- return;
-
- /* Set the error status. */
- if ((cmp->flags & IOPARM_HAS_IOSTAT))
- *cmp->iostat = (family == LIBERROR_OS) ? errno : family;
-
- if (message == NULL)
- message =
- (family == LIBERROR_OS) ? gf_strerror (errno, errmsg, STRERR_MAXSZ) :
- translate_error (family);
-
- if (cmp->flags & IOPARM_HAS_IOMSG)
- cf_strcpy (cmp->iomsg, cmp->iomsg_len, message);
-
- /* Report status back to the compiler. */
- cmp->flags &= ~IOPARM_LIBRETURN_MASK;
- switch (family)
- {
- case LIBERROR_EOR:
- cmp->flags |= IOPARM_LIBRETURN_EOR;
- if ((cmp->flags & IOPARM_EOR))
- return;
- break;
-
- case LIBERROR_END:
- cmp->flags |= IOPARM_LIBRETURN_END;
- if ((cmp->flags & IOPARM_END))
- return;
- break;
-
- default:
- cmp->flags |= IOPARM_LIBRETURN_ERROR;
- if ((cmp->flags & IOPARM_ERR))
- return;
- break;
- }
-
- /* Return if the user supplied an iostat variable. */
- if ((cmp->flags & IOPARM_HAS_IOSTAT))
- return;
-
- /* Terminate the program */
-
- recursion_check ();
- show_locus (cmp);
- estr_write ("Fortran runtime error: ");
- estr_write (message);
- estr_write ("\n");
- exit (2);
-}
-iexport(generate_error);
-
-
-/* generate_warning()-- Similar to generate_error but just give a warning. */
-
-void
-generate_warning (st_parameter_common *cmp, const char *message)
-{
- if (message == NULL)
- message = " ";
-
- show_locus (cmp);
- estr_write ("Fortran runtime warning: ");
- estr_write (message);
- estr_write ("\n");
-}
-
-
-/* Whether, for a feature included in a given standard set (GFC_STD_*),
- we should issue an error or a warning, or be quiet. */
-
-notification
-notification_std (int std)
-{
- int warning;
-
- if (!compile_options.pedantic)
- return NOTIFICATION_SILENT;
-
- warning = compile_options.warn_std & std;
- if ((compile_options.allow_std & std) != 0 && !warning)
- return NOTIFICATION_SILENT;
-
- return warning ? NOTIFICATION_WARNING : NOTIFICATION_ERROR;
-}
-
-
-/* Possibly issue a warning/error about use of a nonstandard (or deleted)
- feature. An error/warning will be issued if the currently selected
- standard does not contain the requested bits. */
-
-try
-notify_std (st_parameter_common *cmp, int std, const char * message)
-{
- int warning;
-
- if (!compile_options.pedantic)
- return SUCCESS;
-
- warning = compile_options.warn_std & std;
- if ((compile_options.allow_std & std) != 0 && !warning)
- return SUCCESS;
-
- if (!warning)
- {
- recursion_check ();
- show_locus (cmp);
- estr_write ("Fortran runtime error: ");
- estr_write (message);
- estr_write ("\n");
- exit (2);
- }
- else
- {
- show_locus (cmp);
- estr_write ("Fortran runtime warning: ");
- estr_write (message);
- estr_write ("\n");
- }
- return FAILURE;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/fpu.c b/gcc-4.8.1/libgfortran/runtime/fpu.c
deleted file mode 100644
index 209cbfbab..000000000
--- a/gcc-4.8.1/libgfortran/runtime/fpu.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Set FPU mask.
- Copyright (C) 2005-2013 Free Software Foundation, Inc.
- Contributed by Francois-Xavier Coudert <coudert@clipper.ens.fr>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-
-/* We include the platform-dependent code. */
-#include "fpu-target.h"
-
-/* Function called by the front-end to tell us
- when a FPE should be raised. */
-extern void set_fpe (int);
-export_proto(set_fpe);
-
-void
-set_fpe (int exceptions)
-{
- options.fpe = exceptions;
- set_fpu ();
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/in_pack_generic.c b/gcc-4.8.1/libgfortran/runtime/in_pack_generic.c
deleted file mode 100644
index 330f0f425..000000000
--- a/gcc-4.8.1/libgfortran/runtime/in_pack_generic.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Generic helper function for repacking arrays.
- Copyright (C) 2003-2013 Free Software Foundation, Inc.
- Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-
-extern void *internal_pack (gfc_array_char *);
-export_proto(internal_pack);
-
-void *
-internal_pack (gfc_array_char * source)
-{
- index_type count[GFC_MAX_DIMENSIONS];
- index_type extent[GFC_MAX_DIMENSIONS];
- index_type stride[GFC_MAX_DIMENSIONS];
- index_type stride0;
- index_type dim;
- index_type ssize;
- const char *src;
- char *dest;
- void *destptr;
- int n;
- int packed;
- index_type size;
- index_type type_size;
-
- if (source->base_addr == NULL)
- return NULL;
-
- type_size = GFC_DTYPE_TYPE_SIZE(source);
- size = GFC_DESCRIPTOR_SIZE (source);
- switch (type_size)
- {
- case GFC_DTYPE_INTEGER_1:
- case GFC_DTYPE_LOGICAL_1:
- case GFC_DTYPE_DERIVED_1:
- return internal_pack_1 ((gfc_array_i1 *) source);
-
- case GFC_DTYPE_INTEGER_2:
- case GFC_DTYPE_LOGICAL_2:
- return internal_pack_2 ((gfc_array_i2 *) source);
-
- case GFC_DTYPE_INTEGER_4:
- case GFC_DTYPE_LOGICAL_4:
- return internal_pack_4 ((gfc_array_i4 *) source);
-
- case GFC_DTYPE_INTEGER_8:
- case GFC_DTYPE_LOGICAL_8:
- return internal_pack_8 ((gfc_array_i8 *) source);
-
-#if defined(HAVE_GFC_INTEGER_16)
- case GFC_DTYPE_INTEGER_16:
- case GFC_DTYPE_LOGICAL_16:
- return internal_pack_16 ((gfc_array_i16 *) source);
-#endif
- case GFC_DTYPE_REAL_4:
- return internal_pack_r4 ((gfc_array_r4 *) source);
-
- case GFC_DTYPE_REAL_8:
- return internal_pack_r8 ((gfc_array_r8 *) source);
-
-/* FIXME: This here is a hack, which will have to be removed when
- the array descriptor is reworked. Currently, we don't store the
- kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
- we cannot discriminate here and have to fall back to the generic
- handling (which is suboptimal). */
-#if !defined(GFC_REAL_16_IS_FLOAT128)
-# if defined (HAVE_GFC_REAL_10)
- case GFC_DTYPE_REAL_10:
- return internal_pack_r10 ((gfc_array_r10 *) source);
-# endif
-
-# if defined (HAVE_GFC_REAL_16)
- case GFC_DTYPE_REAL_16:
- return internal_pack_r16 ((gfc_array_r16 *) source);
-# endif
-#endif
-
- case GFC_DTYPE_COMPLEX_4:
- return internal_pack_c4 ((gfc_array_c4 *) source);
-
- case GFC_DTYPE_COMPLEX_8:
- return internal_pack_c8 ((gfc_array_c8 *) source);
-
-/* FIXME: This here is a hack, which will have to be removed when
- the array descriptor is reworked. Currently, we don't store the
- kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
- we cannot discriminate here and have to fall back to the generic
- handling (which is suboptimal). */
-#if !defined(GFC_REAL_16_IS_FLOAT128)
-# if defined (HAVE_GFC_COMPLEX_10)
- case GFC_DTYPE_COMPLEX_10:
- return internal_pack_c10 ((gfc_array_c10 *) source);
-# endif
-
-# if defined (HAVE_GFC_COMPLEX_16)
- case GFC_DTYPE_COMPLEX_16:
- return internal_pack_c16 ((gfc_array_c16 *) source);
-# endif
-#endif
-
- case GFC_DTYPE_DERIVED_2:
- if (GFC_UNALIGNED_2(source->base_addr))
- break;
- else
- return internal_pack_2 ((gfc_array_i2 *) source);
-
- case GFC_DTYPE_DERIVED_4:
- if (GFC_UNALIGNED_4(source->base_addr))
- break;
- else
- return internal_pack_4 ((gfc_array_i4 *) source);
-
- case GFC_DTYPE_DERIVED_8:
- if (GFC_UNALIGNED_8(source->base_addr))
- break;
- else
- return internal_pack_8 ((gfc_array_i8 *) source);
-
-#ifdef HAVE_GFC_INTEGER_16
- case GFC_DTYPE_DERIVED_16:
- if (GFC_UNALIGNED_16(source->base_addr))
- break;
- else
- return internal_pack_16 ((gfc_array_i16 *) source);
-#endif
-
- default:
- break;
- }
-
- dim = GFC_DESCRIPTOR_RANK (source);
- ssize = 1;
- packed = 1;
- for (n = 0; n < dim; n++)
- {
- count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(source,n);
- extent[n] = GFC_DESCRIPTOR_EXTENT(source,n);
- if (extent[n] <= 0)
- {
- /* Do nothing. */
- packed = 1;
- break;
- }
-
- if (ssize != stride[n])
- packed = 0;
-
- ssize *= extent[n];
- }
-
- if (packed)
- return source->base_addr;
-
- /* Allocate storage for the destination. */
- destptr = xmalloc (ssize * size);
- dest = (char *)destptr;
- src = source->base_addr;
- stride0 = stride[0] * size;
-
- while (src)
- {
- /* Copy the data. */
- memcpy(dest, src, size);
- /* Advance to the next element. */
- dest += size;
- src += stride0;
- count[0]++;
- /* Advance to the next source element. */
- n = 0;
- while (count[n] == extent[n])
- {
- /* When we get to the end of a dimension, reset it and increment
- the next dimension. */
- count[n] = 0;
- /* We could precalculate these products, but this is a less
- frequently used path so probably not worth it. */
- src -= stride[n] * extent[n] * size;
- n++;
- if (n == dim)
- {
- src = NULL;
- break;
- }
- else
- {
- count[n]++;
- src += stride[n] * size;
- }
- }
- }
- return destptr;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/in_unpack_generic.c b/gcc-4.8.1/libgfortran/runtime/in_unpack_generic.c
deleted file mode 100644
index b369eedae..000000000
--- a/gcc-4.8.1/libgfortran/runtime/in_unpack_generic.c
+++ /dev/null
@@ -1,241 +0,0 @@
-/* Generic helper function for repacking arrays.
- Copyright (C) 2003-2013 Free Software Foundation, Inc.
- Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-
-extern void internal_unpack (gfc_array_char *, const void *);
-export_proto(internal_unpack);
-
-void
-internal_unpack (gfc_array_char * d, const void * s)
-{
- index_type count[GFC_MAX_DIMENSIONS];
- index_type extent[GFC_MAX_DIMENSIONS];
- index_type stride[GFC_MAX_DIMENSIONS];
- index_type stride0;
- index_type dim;
- index_type dsize;
- char *dest;
- const char *src;
- int n;
- int size;
- int type_size;
-
- dest = d->base_addr;
- /* This check may be redundant, but do it anyway. */
- if (s == dest || !s)
- return;
-
- type_size = GFC_DTYPE_TYPE_SIZE (d);
- switch (type_size)
- {
- case GFC_DTYPE_INTEGER_1:
- case GFC_DTYPE_LOGICAL_1:
- case GFC_DTYPE_DERIVED_1:
- internal_unpack_1 ((gfc_array_i1 *) d, (const GFC_INTEGER_1 *) s);
- return;
-
- case GFC_DTYPE_INTEGER_2:
- case GFC_DTYPE_LOGICAL_2:
- internal_unpack_2 ((gfc_array_i2 *) d, (const GFC_INTEGER_2 *) s);
- return;
-
- case GFC_DTYPE_INTEGER_4:
- case GFC_DTYPE_LOGICAL_4:
- internal_unpack_4 ((gfc_array_i4 *) d, (const GFC_INTEGER_4 *) s);
- return;
-
- case GFC_DTYPE_INTEGER_8:
- case GFC_DTYPE_LOGICAL_8:
- internal_unpack_8 ((gfc_array_i8 *) d, (const GFC_INTEGER_8 *) s);
- return;
-
-#if defined (HAVE_GFC_INTEGER_16)
- case GFC_DTYPE_INTEGER_16:
- case GFC_DTYPE_LOGICAL_16:
- internal_unpack_16 ((gfc_array_i16 *) d, (const GFC_INTEGER_16 *) s);
- return;
-#endif
-
- case GFC_DTYPE_REAL_4:
- internal_unpack_r4 ((gfc_array_r4 *) d, (const GFC_REAL_4 *) s);
- return;
-
- case GFC_DTYPE_REAL_8:
- internal_unpack_r8 ((gfc_array_r8 *) d, (const GFC_REAL_8 *) s);
- return;
-
-/* FIXME: This here is a hack, which will have to be removed when
- the array descriptor is reworked. Currently, we don't store the
- kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
- we cannot discriminate here and have to fall back to the generic
- handling (which is suboptimal). */
-#if !defined(GFC_REAL_16_IS_FLOAT128)
-# if defined(HAVE_GFC_REAL_10)
- case GFC_DTYPE_REAL_10:
- internal_unpack_r10 ((gfc_array_r10 *) d, (const GFC_REAL_10 *) s);
- return;
-# endif
-
-# if defined(HAVE_GFC_REAL_16)
- case GFC_DTYPE_REAL_16:
- internal_unpack_r16 ((gfc_array_r16 *) d, (const GFC_REAL_16 *) s);
- return;
-# endif
-#endif
-
- case GFC_DTYPE_COMPLEX_4:
- internal_unpack_c4 ((gfc_array_c4 *)d, (const GFC_COMPLEX_4 *)s);
- return;
-
- case GFC_DTYPE_COMPLEX_8:
- internal_unpack_c8 ((gfc_array_c8 *)d, (const GFC_COMPLEX_8 *)s);
- return;
-
-/* FIXME: This here is a hack, which will have to be removed when
- the array descriptor is reworked. Currently, we don't store the
- kind value for the type, but only the size. Because on targets with
- __float128, we have sizeof(logn double) == sizeof(__float128),
- we cannot discriminate here and have to fall back to the generic
- handling (which is suboptimal). */
-#if !defined(GFC_REAL_16_IS_FLOAT128)
-# if defined(HAVE_GFC_COMPLEX_10)
- case GFC_DTYPE_COMPLEX_10:
- internal_unpack_c10 ((gfc_array_c10 *) d, (const GFC_COMPLEX_10 *) s);
- return;
-# endif
-
-# if defined(HAVE_GFC_COMPLEX_16)
- case GFC_DTYPE_COMPLEX_16:
- internal_unpack_c16 ((gfc_array_c16 *) d, (const GFC_COMPLEX_16 *) s);
- return;
-# endif
-#endif
-
- case GFC_DTYPE_DERIVED_2:
- if (GFC_UNALIGNED_2(d->base_addr) || GFC_UNALIGNED_2(s))
- break;
- else
- {
- internal_unpack_2 ((gfc_array_i2 *) d, (const GFC_INTEGER_2 *) s);
- return;
- }
- case GFC_DTYPE_DERIVED_4:
- if (GFC_UNALIGNED_4(d->base_addr) || GFC_UNALIGNED_4(s))
- break;
- else
- {
- internal_unpack_4 ((gfc_array_i4 *) d, (const GFC_INTEGER_4 *) s);
- return;
- }
-
- case GFC_DTYPE_DERIVED_8:
- if (GFC_UNALIGNED_8(d->base_addr) || GFC_UNALIGNED_8(s))
- break;
- else
- {
- internal_unpack_8 ((gfc_array_i8 *) d, (const GFC_INTEGER_8 *) s);
- return;
- }
-
-#ifdef HAVE_GFC_INTEGER_16
- case GFC_DTYPE_DERIVED_16:
- if (GFC_UNALIGNED_16(d->base_addr) || GFC_UNALIGNED_16(s))
- break;
- else
- {
- internal_unpack_16 ((gfc_array_i16 *) d, (const GFC_INTEGER_16 *) s);
- return;
- }
-#endif
-
- default:
- break;
- }
-
- size = GFC_DESCRIPTOR_SIZE (d);
-
- dim = GFC_DESCRIPTOR_RANK (d);
- dsize = 1;
- for (n = 0; n < dim; n++)
- {
- count[n] = 0;
- stride[n] = GFC_DESCRIPTOR_STRIDE(d,n);
- extent[n] = GFC_DESCRIPTOR_EXTENT(d,n);
- if (extent[n] <= 0)
- return;
-
- if (dsize == stride[n])
- dsize *= extent[n];
- else
- dsize = 0;
- }
-
- src = s;
-
- if (dsize != 0)
- {
- memcpy (dest, src, dsize * size);
- return;
- }
-
- stride0 = stride[0] * size;
-
- while (dest)
- {
- /* Copy the data. */
- memcpy (dest, src, size);
- /* Advance to the next element. */
- src += size;
- dest += stride0;
- count[0]++;
- /* Advance to the next source element. */
- n = 0;
- while (count[n] == extent[n])
- {
- /* When we get to the end of a dimension, reset it and increment
- the next dimension. */
- count[n] = 0;
- /* We could precalculate these products, but this is a less
- frequently used path so probably not worth it. */
- dest -= stride[n] * extent[n] * size;
- n++;
- if (n == dim)
- {
- dest = NULL;
- break;
- }
- else
- {
- count[n]++;
- dest += stride[n] * size;
- }
- }
- }
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/main.c b/gcc-4.8.1/libgfortran/runtime/main.c
deleted file mode 100644
index d774cfb8a..000000000
--- a/gcc-4.8.1/libgfortran/runtime/main.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Andy Vaught and Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* Stupid function to be sure the constructor is always linked in, even
- in the case of static linking. See PR libfortran/22298 for details. */
-void
-stupid_function_name_for_static_linking (void)
-{
- return;
-}
-
-/* This will be 0 for little-endian
- machines and 1 for big-endian machines. */
-int big_endian = 0;
-
-
-/* Figure out endianness for this machine. */
-
-static void
-determine_endianness (void)
-{
- union
- {
- GFC_LOGICAL_8 l8;
- GFC_LOGICAL_4 l4[2];
- } u;
-
- u.l8 = 1;
- if (u.l4[0])
- big_endian = 0;
- else if (u.l4[1])
- big_endian = 1;
- else
- runtime_error ("Unable to determine machine endianness");
-}
-
-
-static int argc_save;
-static char **argv_save;
-
-static const char *exe_path;
-static int please_free_exe_path_when_done;
-
-/* Save the path under which the program was called, for use in the
- backtrace routines. */
-void
-store_exe_path (const char * argv0)
-{
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
- char buf[PATH_MAX], *path;
- const char *cwd;
-
- /* This can only happen if store_exe_path is called multiple times. */
- if (please_free_exe_path_when_done)
- free ((char *) exe_path);
-
- /* Reading the /proc/self/exe symlink is Linux-specific(?), but if
- it works it gives the correct answer. */
-#ifdef HAVE_READLINK
- int len;
- if ((len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1)) != -1)
- {
- buf[len] = '\0';
- exe_path = strdup (buf);
- please_free_exe_path_when_done = 1;
- return;
- }
-#endif
-
- /* If the path is absolute or on a simulator where argv is not set. */
-#ifdef __MINGW32__
- if (argv0 == NULL
- || ('A' <= argv0[0] && argv0[0] <= 'Z' && argv0[1] == ':')
- || ('a' <= argv0[0] && argv0[0] <= 'z' && argv0[1] == ':')
- || (argv0[0] == '/' && argv0[1] == '/')
- || (argv0[0] == '\\' && argv0[1] == '\\'))
-#else
- if (argv0 == NULL || argv0[0] == DIR_SEPARATOR)
-#endif
- {
- exe_path = argv0;
- please_free_exe_path_when_done = 0;
- return;
- }
-
-#ifdef HAVE_GETCWD
- cwd = getcwd (buf, sizeof (buf));
-#else
- cwd = NULL;
-#endif
-
- if (!cwd)
- {
- exe_path = argv0;
- please_free_exe_path_when_done = 0;
- return;
- }
-
- /* exe_path will be cwd + "/" + argv[0] + "\0". This will not work
- if the executable is not in the cwd, but at this point we're out
- of better ideas. */
- size_t pathlen = strlen (cwd) + 1 + strlen (argv0) + 1;
- path = malloc (pathlen);
- snprintf (path, pathlen, "%s%c%s", cwd, DIR_SEPARATOR, argv0);
- exe_path = path;
- please_free_exe_path_when_done = 1;
-}
-
-
-/* Return the full path of the executable. */
-char *
-full_exe_path (void)
-{
- return (char *) exe_path;
-}
-
-
-char *addr2line_path;
-
-/* Find addr2line and store the path. */
-
-void
-find_addr2line (void)
-{
-#ifdef HAVE_ACCESS
-#define A2L_LEN 10
- char *path = secure_getenv ("PATH");
- if (!path)
- return;
- size_t n = strlen (path);
- char ap[n + 1 + A2L_LEN];
- size_t ai = 0;
- for (size_t i = 0; i < n; i++)
- {
- if (path[i] != ':')
- ap[ai++] = path[i];
- else
- {
- ap[ai++] = '/';
- memcpy (ap + ai, "addr2line", A2L_LEN);
- if (access (ap, R_OK|X_OK) == 0)
- {
- addr2line_path = strdup (ap);
- return;
- }
- else
- ai = 0;
- }
- }
-#endif
-}
-
-
-/* Set the saved values of the command line arguments. */
-
-void
-set_args (int argc, char **argv)
-{
- argc_save = argc;
- argv_save = argv;
- store_exe_path (argv[0]);
-}
-iexport(set_args);
-
-
-/* Retrieve the saved values of the command line arguments. */
-
-void
-get_args (int *argc, char ***argv)
-{
- *argc = argc_save;
- *argv = argv_save;
-}
-
-
-/* Initialize the runtime library. */
-
-static void __attribute__((constructor))
-init (void)
-{
- /* Figure out the machine endianness. */
- determine_endianness ();
-
- /* Must be first */
- init_variables ();
-
- init_units ();
- set_fpu ();
- init_compile_options ();
-
-#ifdef DEBUG
- /* Check for special command lines. */
-
- if (argc > 1 && strcmp (argv[1], "--help") == 0)
- show_variables ();
-
- /* if (argc > 1 && strcmp(argv[1], "--resume") == 0) resume(); */
-#endif
-
- if (options.backtrace == 1)
- find_addr2line ();
-
- random_seed_i4 (NULL, NULL, NULL);
-}
-
-
-/* Cleanup the runtime library. */
-
-static void __attribute__((destructor))
-cleanup (void)
-{
- close_units ();
-
- if (please_free_exe_path_when_done)
- free ((char *) exe_path);
-
- free (addr2line_path);
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/memory.c b/gcc-4.8.1/libgfortran/runtime/memory.c
deleted file mode 100644
index d25a97a27..000000000
--- a/gcc-4.8.1/libgfortran/runtime/memory.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Memory management routines.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <stdlib.h>
-
-
-void *
-xmalloc (size_t n)
-{
- void *p;
-
- if (n == 0)
- n = 1;
-
- p = malloc (n);
-
- if (p == NULL)
- os_error ("Memory allocation failed");
-
- return p;
-}
-
-
-/* calloc wrapper that aborts on error. */
-
-void *
-xcalloc (size_t nmemb, size_t size)
-{
- if (nmemb * size == 0)
- nmemb = size = 1;
-
- void *p = calloc (nmemb, size);
- if (!p)
- os_error ("Allocating cleared memory failed");
-
- return p;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/pause.c b/gcc-4.8.1/libgfortran/runtime/pause.c
deleted file mode 100644
index ad69c95ca..000000000
--- a/gcc-4.8.1/libgfortran/runtime/pause.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Implementation of the PAUSE statement.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <string.h>
-#include <unistd.h>
-
-static void
-do_pause (void)
-{
- char buff[4];
- estr_write ("To resume execution, type go. "
- "Other input will terminate the job.\n");
-
- fgets(buff, 4, stdin);
- if (strncmp(buff, "go\n", 3) != 0)
- stop_string ('\0', 0);
- estr_write ("RESUMED\n");
-}
-
-/* A numeric PAUSE statement. */
-
-extern void pause_numeric (GFC_INTEGER_4);
-export_proto(pause_numeric);
-
-void
-pause_numeric (GFC_INTEGER_4 code)
-{
- st_printf ("PAUSE %d\n", (int) code);
- do_pause ();
-}
-
-/* A character string or blank PAUSE statement. */
-
-extern void pause_string (char *string, GFC_INTEGER_4 len);
-export_proto(pause_string);
-
-void
-pause_string (char *string, GFC_INTEGER_4 len)
-{
- estr_write ("PAUSE ");
- ssize_t w = write (STDERR_FILENO, string, len);
- (void) sizeof (w); /* Avoid compiler warning about not using write
- return val. */
- estr_write ("\n");
-
- do_pause ();
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/select.c b/gcc-4.8.1/libgfortran/runtime/select.c
deleted file mode 100644
index b5ca1facc..000000000
--- a/gcc-4.8.1/libgfortran/runtime/select.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Implement the SELECT statement for character variables.
- Copyright (C) 2008-2013 Free Software Foundation, Inc.
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-
-
-/* The string selection function is defined using a few generic macros
- in select_inc.c, so we avoid code duplication between the various
- character type kinds. */
-
-#undef CHARTYPE
-#define CHARTYPE char
-#undef SUFFIX
-#define SUFFIX(x) x
-
-#include "select_inc.c"
-
-
-#undef CHARTYPE
-#define CHARTYPE gfc_char4_t
-#undef SUFFIX
-#define SUFFIX(x) x ## _char4
-
-#include "select_inc.c"
-
diff --git a/gcc-4.8.1/libgfortran/runtime/select_inc.c b/gcc-4.8.1/libgfortran/runtime/select_inc.c
deleted file mode 100644
index 625587ec8..000000000
--- a/gcc-4.8.1/libgfortran/runtime/select_inc.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/* Implement the SELECT statement for character variables.
- Copyright (C) 2008-2013 Free Software Foundation, Inc.
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#define select_string SUFFIX(select_string)
-#define select_struct SUFFIX(select_struct)
-#define compare_string SUFFIX(compare_string)
-
-typedef struct
-{
- CHARTYPE *low;
- gfc_charlen_type low_len;
- CHARTYPE *high;
- gfc_charlen_type high_len;
- int address;
-}
-select_struct;
-
-extern int select_string (select_struct *table, int table_len,
- const CHARTYPE *selector,
- gfc_charlen_type selector_len);
-export_proto(select_string);
-
-
-/* select_string()-- Given a selector string and a table of
- * select_struct structures, return the address to jump to. */
-
-int
-select_string (select_struct *table, int table_len, const CHARTYPE *selector,
- gfc_charlen_type selector_len)
-{
- select_struct *t;
- int i, low, high, mid;
- int default_jump = -1;
-
- if (table_len == 0)
- return -1;
-
- /* Record the default address if present */
-
- if (table->low == NULL && table->high == NULL)
- {
- default_jump = table->address;
-
- table++;
- table_len--;
- if (table_len == 0)
- return default_jump;
- }
-
- /* Try the high and low bounds if present. */
-
- if (table->low == NULL)
- {
- if (compare_string (table->high_len, table->high,
- selector_len, selector) >= 0)
- return table->address;
-
- table++;
- table_len--;
- if (table_len == 0)
- return default_jump;
- }
-
- t = table + table_len - 1;
-
- if (t->high == NULL)
- {
- if (compare_string (t->low_len, t->low, selector_len, selector) <= 0)
- return t->address;
-
- table_len--;
- if (table_len == 0)
- return default_jump;
- }
-
- /* At this point, the only table entries are bounded entries. Find
- the right entry with a binary chop. */
-
- low = -1;
- high = table_len;
-
- while (low + 1 < high)
- {
- mid = (low + high) / 2;
-
- t = table + mid;
- i = compare_string (t->low_len, t->low, selector_len, selector);
-
- if (i == 0)
- return t->address;
-
- if (i < 0)
- low = mid;
- else
- high = mid;
- }
-
- /* The string now lies between the low indeces of the now-adjacent
- high and low entries. Because it is less than the low entry of
- 'high', it can't be that one. If low is still -1, then no
- entries match. Otherwise, we have to check the high entry of
- 'low'. */
-
- if (low == -1)
- return default_jump;
-
- t = table + low;
- if (compare_string (selector_len, selector, t->high_len, t->high) <= 0)
- return t->address;
-
- return default_jump;
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/stop.c b/gcc-4.8.1/libgfortran/runtime/stop.c
deleted file mode 100644
index 1f0f453bc..000000000
--- a/gcc-4.8.1/libgfortran/runtime/stop.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/* Implementation of the STOP statement.
- Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Paul Brook <paul@nowt.org>
-
-This file is part of the GNU Fortran runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either
-version 3 of the License, or (at your option) any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-/* A numeric STOP statement. */
-
-extern void stop_numeric (GFC_INTEGER_4)
- __attribute__ ((noreturn));
-export_proto(stop_numeric);
-
-void
-stop_numeric (GFC_INTEGER_4 code)
-{
- if (code == -1)
- code = 0;
- else
- st_printf ("STOP %d\n", (int)code);
-
- exit (code);
-}
-
-
-/* A Fortran 2008 numeric STOP statement. */
-
-extern void stop_numeric_f08 (GFC_INTEGER_4)
- __attribute__ ((noreturn));
-export_proto(stop_numeric_f08);
-
-void
-stop_numeric_f08 (GFC_INTEGER_4 code)
-{
- st_printf ("STOP %d\n", (int)code);
- exit (code);
-}
-
-
-/* A character string or blank STOP statement. */
-
-void
-stop_string (const char *string, GFC_INTEGER_4 len)
-{
- if (string)
- {
- estr_write ("STOP ");
- (void) write (STDERR_FILENO, string, len);
- estr_write ("\n");
- }
- exit (0);
-}
-
-
-/* Per Fortran 2008, section 8.4: "Execution of a STOP statement initiates
- normal termination of execution. Execution of an ERROR STOP statement
- initiates error termination of execution." Thus, error_stop_string returns
- a nonzero exit status code. */
-
-extern void error_stop_string (const char *, GFC_INTEGER_4)
- __attribute__ ((noreturn));
-export_proto(error_stop_string);
-
-void
-error_stop_string (const char *string, GFC_INTEGER_4 len)
-{
- estr_write ("ERROR STOP ");
- (void) write (STDERR_FILENO, string, len);
- estr_write ("\n");
-
- exit (1);
-}
-
-
-/* A numeric ERROR STOP statement. */
-
-extern void error_stop_numeric (GFC_INTEGER_4)
- __attribute__ ((noreturn));
-export_proto(error_stop_numeric);
-
-void
-error_stop_numeric (GFC_INTEGER_4 code)
-{
- st_printf ("ERROR STOP %d\n", (int) code);
- exit (code);
-}
diff --git a/gcc-4.8.1/libgfortran/runtime/string.c b/gcc-4.8.1/libgfortran/runtime/string.c
deleted file mode 100644
index 4c506cd01..000000000
--- a/gcc-4.8.1/libgfortran/runtime/string.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
- Contributed by Paul Brook
-
-This file is part of the GNU Fortran 95 runtime library (libgfortran).
-
-Libgfortran is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 3, or (at your option)
-any later version.
-
-Libgfortran is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-Under Section 7 of GPL version 3, you are granted additional
-permissions described in the GCC Runtime Library Exception, version
-3.1, as published by the Free Software Foundation.
-
-You should have received a copy of the GNU General Public License and
-a copy of the GCC Runtime Library Exception along with this program;
-see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-<http://www.gnu.org/licenses/>. */
-
-#include "libgfortran.h"
-#include <string.h>
-
-
-/* Given a fortran string, return its length exclusive of the trailing
- spaces. */
-
-gfc_charlen_type
-fstrlen (const char *string, gfc_charlen_type len)
-{
- for (; len > 0; len--)
- if (string[len-1] != ' ')
- break;
-
- return len;
-}
-
-
-/* Copy a Fortran string (not null-terminated, hence length arguments
- for both source and destination strings. Returns the non-padded
- length of the destination. */
-
-gfc_charlen_type
-fstrcpy (char *dest, gfc_charlen_type destlen,
- const char *src, gfc_charlen_type srclen)
-{
- if (srclen >= destlen)
- {
- /* This will truncate if too long. */
- memcpy (dest, src, destlen);
- return destlen;
- }
- else
- {
- memcpy (dest, src, srclen);
- /* Pad with spaces. */
- memset (&dest[srclen], ' ', destlen - srclen);
- return srclen;
- }
-}
-
-
-/* Copy a null-terminated C string to a non-null-terminated Fortran
- string. Returns the non-padded length of the destination string. */
-
-gfc_charlen_type
-cf_strcpy (char *dest, gfc_charlen_type dest_len, const char *src)
-{
- size_t src_len;
-
- src_len = strlen (src);
-
- if (src_len >= (size_t) dest_len)
- {
- /* This will truncate if too long. */
- memcpy (dest, src, dest_len);
- return dest_len;
- }
- else
- {
- memcpy (dest, src, src_len);
- /* Pad with spaces. */
- memset (&dest[src_len], ' ', dest_len - src_len);
- return src_len;
- }
-}
-
-
-/* Given a fortran string and an array of st_option structures, search through
- the array to find a match. If the option is not found, we generate an error
- if no default is provided. */
-
-int
-find_option (st_parameter_common *cmp, const char *s1, gfc_charlen_type s1_len,
- const st_option * opts, const char *error_message)
-{
- /* Strip trailing blanks from the Fortran string. */
- size_t len = (size_t) fstrlen (s1, s1_len);
-
- for (; opts->name; opts++)
- if (len == strlen(opts->name) && strncasecmp (s1, opts->name, len) == 0)
- return opts->value;
-
- generate_error (cmp, LIBERROR_BAD_OPTION, error_message);
-
- return -1;
-}