Summary: | [3.4 only] Alignment error building gcc with i686-coff target | ||
---|---|---|---|
Product: | gcc | Reporter: | Richard Parratt <richard.parratt> |
Component: | target | Assignee: | Jim Wilson <wilson> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | gcc-bugs |
Priority: | P2 | Keywords: | wrong-code |
Version: | 3.3.1 | ||
Target Milestone: | 3.4.3 | ||
Host: | Target: | i686-coff | |
Build: | Known to work: | 4.0.0 | |
Known to fail: | 3.4.0 | Last reconfirmed: | 2004-06-08 22:35:19 |
Description
Richard Parratt
2004-06-02 23:15:14 UTC
Patches goto gcc-patches@gcc.gnu.org with a changelog after reading <http://gcc.gnu.org/ contribute.html> fully. Subject: Re: New: Alignment error building gcc with i686-coff
target
richard dot parratt at netiq dot com wrote:
> I was trying to build a GCC cross compiler with a target of "i686-coff".
> It failed with "Error: Alignment not a power of 2"
The problem here is that there is some historical confusion over whether
the argument to the .align directive is the number of bytes or the log
of the number of bytes. Gas changed a few times long ago, and
eventually settled on using number of bytes for all x86 targets except
aout and go32. The gcc i386-coff port defaults to using the log of the
number of bytes, and hence conflicts with gas.
Hoewver, if gcc is configured right, this shouldn't be a problem. gcc
will find the cross assembler, gas, and do a test to determine how to
emit assembler align directives. I know of at least 3 ways to get this
right.
1) Configure gcc and gas in a combined source tree.
2) Configure, build, and install gas using the same prefix as is used
for gcc, before configuring gcc.
3) Use the --with-as= option when configuring gcc to point at the cross
assembler.
If you don't do one of these things, then gcc won't build correctly
anyways, so you actually have to do something wrong to end up with this
problem. I noticed that if I configured gcc wrong, and then configured
it correctly, I ended up with this problem because bad data was read
from the config.cache file produced by the first configure run.
Anyways, this is easy enough to fix, so I will check in a patch for it.
Subject: Bug 15790 CVSROOT: /cvs/gcc Module name: gcc Changes by: wilson@gcc.gnu.org 2004-06-08 22:32:09 Modified files: gcc : ChangeLog gcc/config/i386: i386-coff.h Log message: PR target/15790 * config/i386/i386-coff.h (ASM_OUTPUT_ALIGN): Define. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.3881&r2=2.3882 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386-coff.h.diff?cvsroot=gcc&r1=1.14&r2=1.15 Fixed in mainline. Technically, this isn't a regression, so I don't think we need it fixed in gcc-3.3 or gcc-3.4. Also, I supplied info on how to work around the problem. Already fixed on mainline, will not be fixed in GCC 3.4.x. |