Date: Thu, 05 Dec 2002 16:51:00 -0800 From: Peter Wemm <peter@wemm.org> To: Marcel Moolenaar <marcel@xcllnt.net> Cc: "David E. O'Brien" <obrien@FreeBSD.org>, cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: Re: cvs commit: src/gnu/usr.bin/binutils/as/ia64-freebsd Makefile Message-ID: <20021206005100.447A62A7EA@canning.wemm.org> In-Reply-To: <20021205184209.GA605@dhcp01.pn.xcllnt.net>
next in thread | previous in thread | raw e-mail | index | archive | help
Marcel Moolenaar wrote:
> On Thu, Dec 05, 2002 at 10:24:34AM -0800, David E. O'Brien wrote:
> > obrien 2002/12/05 10:24:34 PST
> >
> > Modified files:
> > gnu/usr.bin/binutils/as/ia64-freebsd Makefile
> > Log:
> > Set WARNS=0 as a temp work around until I can get access to an IA-64 box
> > to do this right.
>
> Thanks!
>
> As for the ia64 box: pluto1.freebsd.org
> Peter added it yesterday.
Here's the ``fix'' (not really a fix, more of a hack which probably
isn't quite right) that we use on the ia64 p4 tree:
Index: contrib/binutils/gas/read.c
===========================================================================
--- contrib/binutils/gas/read.c 2002/12/05 16:20:01 #3
+++ contrib/binutils/gas/read.c 2002/12/05 16:20:01
@@ -1196,9 +1196,11 @@
frag_align_pattern (n, fill, len, max);
}
+#ifndef __ia64__
#ifdef md_do_align
just_record_alignment:
#endif
+#endif
record_alignment (now_seg, n - OCTETS_PER_BYTE_POWER);
}
The problem is that md_do_align() is implemented like this on the x86:
#define md_do_align(n, fill, len, max, around) \
if ((n) && !need_pass_2 \
&& (!(fill) || ((char)*(fill) == (char)0x90 && (len) == 1)) \
&& subseg_text_p (now_seg)) \
{ \
frag_align_code ((n), (max)); \
goto around; \
}
Notice the goto of that label.
tc-arm.h does the same evil things:
#define md_do_align(N, FILL, LEN, MAX, LABEL) \
if (FILL == NULL && (N) != 0 && ! need_pass_2 && subseg_text_p (now_seg)) \
{ \
arm_frag_align_code (N, MAX); \
goto LABEL; \
}
tc-s390.h does something similar too.
ia64 does not have a goto:
#define md_do_align(n,f,l,m,j) ia64_md_do_align (n,f,l,m)
In order to get a real fix into the binutils tree, I'd suggest adding
a new macro, say md_do_align_label(label) that generates the goto label
on i386/arm/s390 and does nothing on ia64. Or, add a new flag to tc-ia64.h,
perhaps something like this:
#define md_do_align_nolabel
and change the #ifdef in gas/read.c to this:
#if defined(md_do_align) && !defined(md_do_align_nolabel)
just_record_alignment:
#endif
Cheers,
-Peter
--
Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20021206005100.447A62A7EA>
