A very "strange" bug in gcc 2.96

Alan Modra alan@linuxcare.com.au
Mon May 22 00:08:00 GMT 2000


I didn't think you could wait a week.  :-)

On Sun, 21 May 2000, H . J . Lu wrote:

> diff -u -p -r1.23 tc-i386.c
> --- config/tc-i386.c	2000/05/14 17:25:52	1.23
> +++ config/tc-i386.c	2000/05/22 06:42:51
> @@ -3766,7 +3766,8 @@ md_estimate_size_before_relax (fragP, se
>    opcode = (unsigned char *) fragP->fr_opcode;
>    /* We've already got fragP->fr_subtype right;  all we have to do is
>       check for un-relaxable symbols.  */
> -  if (S_GET_SEGMENT (fragP->fr_symbol) != segment)
> +  if (!S_IS_LOCAL (fragP->fr_symbol)
> +      || S_GET_SEGMENT (fragP->fr_symbol) != segment)
>      {
>        /* symbol is undefined in this segment */
>        int code16 = fragP->fr_subtype & CODE16;

!S_IS_LOCAL isn't optimal.  We still want to use short jumps to
get to a static function.  I was just about to test the following

  if (S_GET_SEGMENT (fragP->fr_symbol) != segment
      || S_IS_EXTERN (fragP->fr_symbol)
      || S_IS_WEAK (fragP->fr_symbol))

-- 
Linuxcare.  Support for the Revolution.



More information about the Binutils mailing list