diff options
author | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-02-21 21:46:21 +0000 |
---|---|---|
committer | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1992-02-21 21:46:21 +0000 |
commit | 1bf96fc56e4113ffbc0aca814e603a1f591050b6 (patch) | |
tree | a48d8c16885dab413176495edd0b3318918099b9 /gcc/halfpic.c | |
parent | be9d040f9eff98d5ce1820d285e807c1ff25e5a7 (diff) | |
download | gcc-1bf96fc56e4113ffbc0aca814e603a1f591050b6.tar.gz |
Initial revision
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@354 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/halfpic.c')
-rw-r--r-- | gcc/halfpic.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/gcc/halfpic.c b/gcc/halfpic.c new file mode 100644 index 00000000000..9b75ebb9dfc --- /dev/null +++ b/gcc/halfpic.c @@ -0,0 +1,95 @@ +/* OSF/rose half-pic support functions. + Copyright (C) 1992 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +/* The OSF/rose half-pic model assumes that the non-library code does + not need to have full PIC (position independent code), but rather, + that pointers to external references are put into the data section + and derefenced as normal pointers. References to static data does + not need to be PIC-ized. + + Another optimization is to have the compiler know what symbols are + in the shared libraries, and to only lay down the pointers to + things which in the library proper. */ + +#include "config.h" + +#ifdef HALF_PIC_INIT + +#include "tree.h" +#include "rtl.h" +#include <stdio.h> + +extern rtx eliminate_constant_term (); + +int flag_half_pic; /* Global half-pic flag. */ + + +/* Do any half-pic initializations. */ + +void +half_pic_init () +{ + flag_half_pic = TRUE; +} + + +/* Encode in a declaration whether or not it is half-pic. */ + +void +half_pic_encode (decl) + tree decl; +{ +#if 0 + fprintf (stderr, "\n========== Half_pic_encode\n"); + debug_tree (decl); +#endif +} + + +/* Return whether an address is half-pic. */ + +int +half_pic_address_p (addr) + rtx addr; +{ + int offset; + char *name; + + switch (GET_CODE (addr)) + { + case CONST: + offset = 0; + addr = eliminate_constant_term (addr, &offset); + if (GET_CODE (addr) != SYMBOL_REF) + return FALSE; + + /* fall through */ + + case SYMBOL_REF: + name = XSTR (addr, 0); + + /* If this is a label, it will have a '*' in front of it. */ + if (name[0] == '*') + return FALSE; + } + + return FALSE; +} + +#endif /* HALF_PIC_INIT */ |