X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gas%2Fwrite.c;h=d2bdb7acdf731aa343fb84f3a1dced524164f406;hb=b65d68b8d60338a860e169aac3bac54e6bac60db;hp=9b5ae6ff32a3b43453bdf03da62bbb12adda569c;hpb=fd3619828e94a24a92cddec42cbc0ab33352eeb4;p=deliverable%2Fbinutils-gdb.git diff --git a/gas/write.c b/gas/write.c index 9b5ae6ff32..d2bdb7acdf 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1960,7 +1960,8 @@ maybe_generate_build_notes (void) /* Create a GNU Build Attribute section. */ sec = subseg_new (GNU_BUILD_ATTRS_SECTION_NAME, FALSE); elf_section_type (sec) = SHT_NOTE; - bfd_set_section_flags (sec, SEC_READONLY | SEC_HAS_CONTENTS | SEC_DATA); + bfd_set_section_flags (sec, (SEC_READONLY | SEC_HAS_CONTENTS | SEC_DATA + | SEC_OCTETS)); bfd_set_section_alignment (sec, 2); /* Work out the size of the notes that we will create, @@ -2480,6 +2481,10 @@ write_object_file (void) } #ifdef TC_GENERIC_RELAX_TABLE +#ifndef md_generic_table_relax_frag +#define md_generic_table_relax_frag relax_frag +#endif + /* Relax a fragment by scanning TC_GENERIC_RELAX_TABLE. */ long @@ -2497,7 +2502,7 @@ relax_frag (segT segment, fragS *fragP, long stretch) const relax_typeS *table; target = fragP->fr_offset; - address = fragP->fr_address; + address = fragP->fr_address + fragP->fr_fix; table = TC_GENERIC_RELAX_TABLE; this_state = fragP->fr_subtype; start_type = this_type = table + this_state; @@ -2537,13 +2542,13 @@ relax_frag (segT segment, fragS *fragP, long stretch) negative. Don't allow this in case the negative reach is large enough to require a larger branch instruction. */ else if (target < address) - target = fragP->fr_next->fr_address + stretch; + return 0; } } - aim = target - address - fragP->fr_fix; + aim = target - address; #ifdef TC_PCREL_ADJUST - /* Currently only the ns32k family needs this. */ + /* Currently only the ns32k and arc needs this. */ aim += TC_PCREL_ADJUST (fragP); #endif @@ -3030,7 +3035,8 @@ relax_segment (struct frag *segment_frag_root, segT segment, int pass) #ifdef TC_GENERIC_RELAX_TABLE /* The default way to relax a frag is to look through TC_GENERIC_RELAX_TABLE. */ - growth = relax_frag (segment, fragP, stretch); + growth = md_generic_table_relax_frag (segment, fragP, + stretch); #endif /* TC_GENERIC_RELAX_TABLE */ #endif break;