| /* Functions for generic NeXT as target machine for GNU C compiler. |
| Copyright (C) 1989, 90-93, 96, 1997 Free Software Foundation, Inc. |
| |
| This file is part of GNU CC. |
| |
| GNU CC 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 2, or (at your option) |
| any later version. |
| |
| GNU CC 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. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU CC; see the file COPYING. If not, write to |
| the Free Software Foundation, 59 Temple Place - Suite 330, |
| Boston, MA 02111-1307, USA. */ |
| |
| #include "config.h" |
| #include <stdio.h> |
| #include "flags.h" |
| #include "tree.h" |
| |
| /* Make everything that used to go in the text section really go there. */ |
| |
| int flag_no_mach_text_sections = 0; |
| |
| #define OPT_STRCMP(opt) (!strncmp (opt, p, sizeof (opt)-1)) |
| |
| /* 1 if handle_pragma has been called yet. */ |
| |
| static int pragma_initialized; |
| |
| /* Initial setting of `optimize'. */ |
| |
| static int initial_optimize_flag; |
| |
| extern char *get_directive_line (); |
| |
| /* Called from check_newline via the macro HANDLE_PRAGMA. |
| FINPUT is the source file input stream. |
| CH is the first character after `#pragma'. |
| The result is 1 if the pragma was handled. */ |
| |
| int |
| handle_pragma (finput, node) |
| FILE *finput; |
| tree node; |
| { |
| int retval = 0; |
| register char *pname; |
| |
| /* Record initial setting of optimize flag, so we can restore it. */ |
| if (!pragma_initialized) |
| { |
| pragma_initialized = 1; |
| initial_optimize_flag = optimize; |
| } |
| |
| if (TREE_CODE (node) != IDENTIFIER_NODE) |
| return 0; |
| |
| pname = IDENTIFIER_POINTER (node); |
| |
| if (strcmp (pname, "CC_OPT_ON") == 0) |
| { |
| optimize = 1, obey_regdecls = 0; |
| warning ("optimization turned on"); |
| retval = 1; |
| } |
| else if (strcmp (pname, "CC_OPT_OFF") == 0) |
| { |
| optimize = 0, obey_regdecls = 1; |
| warning ("optimization turned off"); |
| retval = 1; |
| } |
| else if (strcmp (pname, "CC_OPT_RESTORE") == 0) |
| { |
| extern int initial_optimize_flag; |
| |
| if (optimize != initial_optimize_flag) |
| { |
| if (initial_optimize_flag) |
| obey_regdecls = 0; |
| else |
| obey_regdecls = 1; |
| optimize = initial_optimize_flag; |
| } |
| warning ("optimization level restored"); |
| retval = 1; |
| } |
| else if (strcmp (pname, "CC_WRITABLE_STRINGS") == 0) |
| flag_writable_strings = retval = 1; |
| else if (strcmp (pname, "CC_NON_WRITABLE_STRINGS") == 0) |
| flag_writable_strings = 0, retval = 1; |
| else if (strcmp (pname, "CC_NO_MACH_TEXT_SECTIONS") == 0) |
| flag_no_mach_text_sections = retval = 1; |
| |
| return retval; |
| } |