From 5ae218df2a586ed4fd07c8249e4fdb5913c1e093 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sun, 13 Aug 1995 06:39:39 +0000 Subject: [PATCH] * config/tc-hppa.c (md_pseudo_table): Add entries for "begin_brtab" and "end_brtab" pseudo-ops. (pa_brtab): New function. (tc_gen_reloc, SOM version): Handle R_BEGIN_BRTAB and R_END_BRTAB. (hppa_force_relocation): Force relocations for BRTAB fixups when OBJ_SOM is defined. More infrastructure for PA optimziations. --- gas/ChangeLog | 9 +++++++++ gas/config/tc-hppa.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index d75fe165044..b19f0ed9929 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,12 @@ +Sun Aug 13 00:35:02 1995 Jeff Law (law@snake.cs.utah.edu) + + * config/tc-hppa.c (md_pseudo_table): Add entries for + "begin_brtab" and "end_brtab" pseudo-ops. + (pa_brtab): New function. + (tc_gen_reloc, SOM version): Handle R_BEGIN_BRTAB and R_END_BRTAB. + (hppa_force_relocation): Force relocations for BRTAB fixups + when OBJ_SOM is defined. + Fri Aug 11 20:34:05 1995 Ken Raeburn * Makefile.in (TE_OBJS): Add empty definition. diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index 6d124bfe462..b8db7b16a6c 100644 --- a/gas/config/tc-hppa.c +++ b/gas/config/tc-hppa.c @@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License along with GAS; see the file COPYING. If not, write to - the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* HP PA-RISC support was contributed by the Center for Software Science @@ -475,6 +475,7 @@ static int pa_parse_neg_add_cmpltr PARAMS ((char **, int)); static int pa_parse_nonneg_add_cmpltr PARAMS ((char **, int)); static void pa_align PARAMS ((int)); static void pa_block PARAMS ((int)); +static void pa_brtab PARAMS ((int)); static void pa_call PARAMS ((int)); static void pa_call_args PARAMS ((struct call_desc *)); static void pa_callinfo PARAMS ((int)); @@ -582,6 +583,7 @@ const pseudo_typeS md_pseudo_table[] = /* align pseudo-ops on the PA specify the actual alignment requested, not the log2 of the requested alignment. */ {"align", pa_align, 8}, + {"begin_brtab", pa_brtab, 1}, {"block", pa_block, 1}, {"blockz", pa_block, 0}, {"byte", pa_cons, 1}, @@ -593,6 +595,7 @@ const pseudo_typeS md_pseudo_table[] = {"data", pa_data, 0}, {"double", pa_float_cons, 'd'}, {"end", pa_end, 0}, + {"end_brtab", pa_brtab, 0}, {"enter", pa_enter, 0}, {"entry", pa_entry, 0}, {"equ", pa_equ, 0}, @@ -2741,6 +2744,8 @@ tc_gen_reloc (section, fixp) case R_FSEL: case R_LSEL: case R_RSEL: + case R_BEGIN_BRTAB: + case R_END_BRTAB: /* There is no symbol or addend associated with these fixups. */ relocs[i]->sym_ptr_ptr = &dummy_symbol->bsym; relocs[i]->addend = 0; @@ -4008,6 +4013,27 @@ pa_block (z) demand_empty_rest_of_line (); } +/* Handle a .begin_brtab and .end_brtab pseudo-op. */ + +static void +pa_brtab (begin) + int begin; +{ + +#ifdef OBJ_SOM + /* The BRTAB relocations are only availble in SOM (to denote + the beginning and end of branch tables). */ + char *where = frag_more (0); + + fix_new_hppa (frag_now, where - frag_now->fr_literal, 0, + NULL, (offsetT) 0, NULL, + 0, begin ? R_HPPA_BEGIN_BRTAB : R_HPPA_END_BRTAB, + e_fsel, 0, 0, NULL); +#endif + + demand_empty_rest_of_line (); +} + /* Handle a .CALL pseudo-op. This involves storing away information about where arguments are to be found so the linker can detect (and correct) argument location mismatches between caller and callee. */ @@ -6284,6 +6310,8 @@ hppa_force_relocation (fixp) hppa_fixp = (struct hppa_fix_struct *) fixp->tc_fix_data; #ifdef OBJ_SOM if (fixp->fx_r_type == R_HPPA_ENTRY || fixp->fx_r_type == R_HPPA_EXIT + || fixp->fx_r_type == R_HPPA_BEGIN_BRTAB + || fixp->fx_r_type == R_HPPA_END_BRTAB || (fixp->fx_addsy != NULL && fixp->fx_subsy != NULL && (hppa_fixp->segment->flags & SEC_CODE) != 0)) return 1; -- 2.30.2