From 931e13a666718cee753747c6fa61b413db1ca6e2 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 18 Jun 2003 23:05:44 +0000 Subject: [PATCH] * config/tc-ppc.c (ppc_csect): Pass alignment to ppc_change_csect. (ppc_change_csect): Add align param. Align frag at start of csect. (ppc_section, ppc_named_section): Adjust ppc_change_csect calls. (ppc_frob_section): Align vma. --- gas/ChangeLog | 17 ++++++++++++----- gas/config/tc-ppc.c | 36 +++++++++++++++++++++++++----------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index cd2c1d6e7dc..297417807cc 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,10 @@ +2003-06-19 Alan Modra + + * config/tc-ppc.c (ppc_csect): Pass alignment to ppc_change_csect. + (ppc_change_csect): Add align param. Align frag at start of csect. + (ppc_section, ppc_named_section): Adjust ppc_change_csect calls. + (ppc_frob_section): Align vma. + 2003-06-18 Jakub Jelinek * dw2gencfi.c (EH_FRAME_ALIGNMENT): Define if not defined. @@ -1595,7 +1602,7 @@ (s_d30v_align ): Likewise. (build_insn): Correct format string. (md_apply_fix3): Likewise. - * config/tc-fr30.c (md_parse_option ): Add ATTRIBUTE_UNUSED. + * config/tc-fr30.c (md_parse_option ): Add ATTRIBUTE_UNUSED. (md_undefined_symbol ): Likewise. (md_convert_frag ): Likewise. (md_cgen_lookup_reloc ): Likewise. @@ -2056,7 +2063,7 @@ 2002-11-21 Randolph Chung - * config/tc-hppa.h (tc_frob_symbol): Frob undefined unused symbols + * config/tc-hppa.h (tc_frob_symbol): Frob undefined unused symbols only if they have default visibility. 2002-11-21 Richard Henderson @@ -3073,14 +3080,14 @@ Thu Oct 10 14:31:30 2002 J"orn Rennecke * tc-v850.c (v850_relax): Declare. (v850_longcode): New routine. (v850_handle_align): New routine. - (md_pseudo_table): Add longcall and longjump. + (md_pseudo_table): Add longcall and longjump. (md_parse_option): Check for relax option. - (tc_gen_reloc): Handle BFD_RELOC_V850_LONGCALL, + (tc_gen_reloc): Handle BFD_RELOC_V850_LONGCALL, BFD_RELOC_V850_LONGJUMP, and BFD_RELOC_V850_ALIGN. (md_apply_fix3): Likewise. (v850_force_relocation): Likewise. (v850_comm): Change the current section. - (md_assemble): Ensure that the correct value is put in the + (md_assemble): Ensure that the correct value is put in the fixup. (v850_sdata, v850_tdata, v850_zdata, v850_sbss, v850_tbss, v850_zbss, v850_rosdata, v850_rozdata): Fix section book keeping. diff --git a/gas/config/tc-ppc.c b/gas/config/tc-ppc.c index caf6b7ffb6a..80146b7308a 100644 --- a/gas/config/tc-ppc.c +++ b/gas/config/tc-ppc.c @@ -111,7 +111,7 @@ static void ppc_ec PARAMS ((int)); static void ppc_ef PARAMS ((int)); static void ppc_es PARAMS ((int)); static void ppc_csect PARAMS ((int)); -static void ppc_change_csect PARAMS ((symbolS *)); +static void ppc_change_csect PARAMS ((symbolS *, offsetT)); static void ppc_function PARAMS ((int)); static void ppc_extern PARAMS ((int)); static void ppc_lglobl PARAMS ((int)); @@ -3006,6 +3006,7 @@ ppc_csect (ignore) char *name; char endc; symbolS *sym; + offsetT align; name = input_line_pointer; endc = get_symbol_end (); @@ -3020,22 +3021,24 @@ ppc_csect (ignore) symbol_get_tc (sym)->class = XMC_PR; } - ppc_change_csect (sym); - + align = 2; if (*input_line_pointer == ',') { ++input_line_pointer; - symbol_get_tc (sym)->align = get_absolute_expression (); + align = get_absolute_expression (); } + ppc_change_csect (sym, align); + demand_empty_rest_of_line (); } /* Change to a different csect. */ static void -ppc_change_csect (sym) +ppc_change_csect (sym, align) symbolS *sym; + offsetT align; { if (S_IS_DEFINED (sym)) subseg_set (S_GET_SEGMENT (sym), symbol_get_tc (sym)->subseg); @@ -3045,11 +3048,14 @@ ppc_change_csect (sym) int after_toc; int hold_chunksize; symbolS *list; + int is_code; + segT sec; /* This is a new csect. We need to look at the symbol class to figure out whether it should go in the text section or the data section. */ after_toc = 0; + is_code = 0; switch (symbol_get_tc (sym)->class) { case XMC_PR: @@ -3064,6 +3070,7 @@ ppc_change_csect (sym) symbol_get_tc (sym)->subseg = ppc_text_subsegment; ++ppc_text_subsegment; list_ptr = &ppc_text_csects; + is_code = 1; break; case XMC_RW: case XMC_TC0: @@ -3091,18 +3098,24 @@ ppc_change_csect (sym) hold_chunksize = chunksize; chunksize = 64; - subseg_new (segment_name (S_GET_SEGMENT (sym)), - symbol_get_tc (sym)->subseg); + sec = subseg_new (segment_name (S_GET_SEGMENT (sym)), + symbol_get_tc (sym)->subseg); chunksize = hold_chunksize; if (after_toc) ppc_after_toc_frag = frag_now; + record_alignment (sec, align); + if (is_code) + frag_align_code (align, 0); + else + frag_align (align, 0, 0); + symbol_set_frag (sym, frag_now); S_SET_VALUE (sym, (valueT) frag_now_fix ()); - symbol_get_tc (sym)->align = 2; + symbol_get_tc (sym)->align = align; symbol_get_tc (sym)->output = 1; symbol_get_tc (sym)->within = sym; @@ -3140,7 +3153,7 @@ ppc_section (type) sym = symbol_find_or_make (name); - ppc_change_csect (sym); + ppc_change_csect (sym, 2); demand_empty_rest_of_line (); } @@ -3177,7 +3190,7 @@ ppc_named_section (ignore) sym = symbol_find_or_make (real_name); - ppc_change_csect (sym); + ppc_change_csect (sym, 2); demand_empty_rest_of_line (); } @@ -5047,8 +5060,9 @@ void ppc_frob_section (sec) asection *sec; { - static bfd_size_type vma = 0; + static bfd_vma vma = 0; + vma = md_section_align (sec, vma); bfd_set_section_vma (stdoutput, sec, vma); vma += bfd_section_size (stdoutput, sec); } -- 2.30.2