This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Despite the fact that bootstrap is restored, there remain problems with this
patch and some more work is needed.
(a) [trivial] the option 'mx32' is in i386.opt, which means it is exposed to
all sub-targets, even if they don't support it.
$ ./gcc/xgcc -Bgcc ../tests/hello.c -mx32 -o hc /var/folders/OW/OW-PGOtgHbKakssxFpJpkU++-0E/-Tmp-//ccIP9e4Z.s:10:bad register name `%rbp' /var/folders/OW/OW-PGOtgHbKakssxFpJpkU++-0E/-Tmp-//ccIP9e4Z.s:14:bad register name `%rsi' etc. etc.
It is useful for bootstrap and allows you check out what X32 code looks like even if your OS doesn't support it.
(b) [serious] the m64 ObjC multi-lib is broken on i?86-darwin* (and likely
there are other more subtle effects).
This is because the code in config/darwin.c that Joseph pointed out (earlier
in this thread) is called for SUBSUBTARGET_OVERRIDE_OPTIONS.
That code sets defaults for, and checks errors for, flags that apply to
*-*-darwin* (and are needed for LTO as well as c-family).
In the case of the ObjC ABI (fobjc-abi-version=) we need to default it to
"2" @ m64 (and default it to 0 or 1 depending on the darwin version @ m32).
I accept that some of this could possibly be done in driver-self- specs;
however, we allow m32/m64 to be unspecified on the c/l and to default for
the target. I'm also not yet sure whether %:version-compare() would be
applicable to fobjc-abi-version.
Thus, the current trunk implementation is broken by your patch and we need
to address that pending other solutions (I'm also very short of free time
for Darwin right now - to experiment with the specs solution).
Please try this
It is possible that there is an options handling issue, (although I might
also have misunderstood) viz:
========= (current) i386.opt:
;; ISA support
m32 Target RejectNegative Negative(m64) Report InverseMask(ISA_64BIT) Var(ix86_isa_flags) Save Generate 32bit i386 code
m64
Target RejectNegative Negative(mx32) Report Mask(ABI_64) Var(ix86_isa_flags)
Save
Generate 64bit x86-64 code
mx32
Target RejectNegative Negative(m32) Report Mask(ABI_X32) Var(ix86_isa_flags)
Save
Generate 32bit x86-64 code
======= from gccint.pdf (section 8.2):
Negative(othername )
The option will turn oï another option othername, which is the option name
with the leading â-â removed. This chain action will propagate through the
Negative property of the option to be turned oï.
As a consequence, if you have a group of mutually-exclusive options, their
Negative properties should form a circular chain. For example, if options
â-a â, â-b â and â-c â are mutually exclusive, their respective Negative
properties
should be âNegative(b )â, âNegative(c )â and âNegative(a )â.
======
I read this as "if the User specifies -a on the command line the inverse of
-b *and* the inverse of -c will be applied".
so that when -m64 is issued, the *inverse* of Mask(ABI_X32) should be
applied and then the *inverse* of InverseMask(ISA_64BIT) - which would
(correctly, for the case we're considering) set MASK_ISA_64BIT.
However, in the example above this does NOT happen - if I set a breakpoint
at the entry of x86_internal_override_options - ISA_64BIT ends up as 0 when
-m64 is specified on the c/l for i?86-darwin*.
The x86_isa_explicit stuff doesn't appear to get set either, although
global_options_set.x_x86_isa... does, which I've used in the attached patch.
so is this an options bug or misunderstanding on my part?
There is no problem here. ISA_64BIT is turned on by ABI_64:
thanks Iain
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |