Opened 15 years ago

Closed 15 years ago

Last modified 15 years ago

#18755 closed defect (fixed)

PPC problem on gmp 4.2.4_2

Reported by: garribald@… Owned by: MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)
Priority: Normal Milestone:
Component: ports Version: 1.7.0
Keywords: ppc Cc: aalorbe@…
Port: gmp

Description (last modified by ryandesign (Ryan Carsten Schmidt))

I am not sure how much this error is related to #9053 or simply the recurrence of #11800 so if this ticket is a dupe, i am sorry. Anyway, the revision 2 of gmp 4.2.4 stops with following error:

$ sudo port -vd upgrade gmp
Password:
DEBUG: Found port in file:///opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/gmp
DEBUG: epoch: in tree: 0 installed: 0
DEBUG: gmp 4.2.4_2 exists in the ports tree
DEBUG: gmp 4.2.4_1 is installed
DEBUG: variants to install {} ppc
DEBUG: available variants are : universal
DEBUG: new portvariants: 
DEBUG: Changing to port directory: /opt/local/var/macports/sources/rsync.macports.org/release/ports/devel/gmp
DEBUG: setting option os.universal_supported to yes
DEBUG: org.macports.load registered provides 'load', a pre-existing procedure. Target override will not be provided
DEBUG: org.macports.distfiles registered provides 'distfiles', a pre-existing procedure. Target override will not be provided
DEBUG: Using group file /opt/local/var/macports/sources/rsync.macports.org/release/ports/_resources/port1.0/group/muniversal-1.0.tcl
DEBUG: universal variant already exists, so not adding the default one
DEBUG: Requested variant powerpc is not provided by port gmp.
DEBUG: Requested variant darwin is not provided by port gmp.
DEBUG: Requested variant macosx is not provided by port gmp.
DEBUG: Executing org.macports.main (gmp)
DEBUG: Skipping completed org.macports.fetch (gmp)
DEBUG: Skipping completed org.macports.checksum (gmp)
DEBUG: setting option extract.cmd to /opt/local/bin/bzip2
DEBUG: Skipping completed org.macports.extract (gmp)
DEBUG: Skipping completed org.macports.patch (gmp)
DEBUG: Skipping completed org.macports.configure (gmp)
--->  Building gmp
DEBUG: Executing org.macports.build (gmp)
DEBUG: port allows a parallel build
DEBUG: Environment: MACOSX_DEPLOYMENT_TARGET='10.4'
DEBUG: Assembled command: 'cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/work/gmp-4.2.4" && nice -n 18 make all'
make  all-recursive
Making all in tests
Making all in .
make[3]: Nothing to be done for `all-am'.
Making all in devel
make[3]: Nothing to be done for `all'.
Making all in mpn
make[3]: Nothing to be done for `all'.
Making all in mpz
make[3]: Nothing to be done for `all'.
Making all in mpq
make[3]: Nothing to be done for `all'.
Making all in mpf
make[3]: Nothing to be done for `all'.
Making all in rand
make[3]: Nothing to be done for `all'.
Making all in misc
make[3]: Nothing to be done for `all'.
Making all in cxx
make[3]: Nothing to be done for `all'.
Making all in mpbsd
make[3]: Nothing to be done for `all'.
Making all in mpn
/bin/sh ../libtool --mode=compile --tag=CC ../mpn/m4-ccas --m4="m4" ccache /usr/bin/gcc-4.0 -c -DHAVE_CONFIG_H -I. -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_`echo popcount | sed 's/_$//'`  -I/opt/local/include  -pipe  `test -f 'popcount.asm' || echo './'`popcount.asm
 ../mpn/m4-ccas --m4=m4 ccache /usr/bin/gcc-4.0 -c -DHAVE_CONFIG_H -I. -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_popcount -I/opt/local/include -pipe popcount.asm  -fno-common -DPIC -o .libs/popcount.o
m4  -DHAVE_CONFIG_H -D__GMP_WITHIN_GMP -DOPERATION_popcount -DPIC popcount.asm >tmp-popcount.s
 ccache /usr/bin/gcc-4.0 -c -DHAVE_CONFIG_H -I. -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_popcount -I/opt/local/include -pipe tmp-popcount.s -fno-common -DPIC -o .libs/popcount.o
tmp-popcount.s:127:vspltisb vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:128:vspltisb vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:129:vspltisb vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:130:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:131:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:132:vspltisb vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:137:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:140:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:141:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:147:vxor vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:150:vxor vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:172:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:174:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:176:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:177:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:179:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:180:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:181:vsububm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:182:vsububm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:183:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:184:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:185:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:186:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:187:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:188:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:189:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:190:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:191:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:192:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:193:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:194:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:195:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:196:vsum4ubs vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:202:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:203:vxor vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:207:vor vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:208:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:213:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:214:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:216:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:217:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:218:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:219:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:220:vsububm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:221:vsububm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:222:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:223:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:224:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:225:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:226:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:227:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:228:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:229:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:230:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:231:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:232:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:233:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:234:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:235:vsum4ubs vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:239:stvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
make[2]: *** [popcount.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/work/gmp-4.2.4" && nice -n 18 make all " returned error 2
Command output: tmp-popcount.s:202:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:203:vxor vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:207:vor vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:208:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:213:lvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:214:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:216:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:217:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:218:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:219:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:220:vsububm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:221:vsububm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:222:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:223:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:224:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:225:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:226:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:227:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:228:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:229:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:230:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:231:vsr vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:232:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:233:vand vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:234:vaddubm vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:235:vsum4ubs vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
tmp-popcount.s:239:stvx vector instruction is optional for the PowerPC (not allowed without -force_cpusubtype_ALL option)
make[2]: *** [popcount.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Warning: the following items did not execute (for gmp): org.macports.destroot org.macports.build
DEBUG: invalid command name "::ui_init"
    while executing
"::ui_init $priority $prefix $channels $message"
    ("uplevel" body line 2)
    invoked from within
"uplevel 1 $body"
Error: Unable to upgrade port: 1

The log is from a re-run of install with -vd flag - should show the problem. But i can do a full run as well, if needed. Haven't tried it again without ccache, I don't think it has anything to do with the problem.

MacPorts 1.7.0, OS X 10.4.11, PPC

Attachments (2)

gmp_log.txt (58.5 KB) - added by garribald@… 15 years ago.
gmp.log (59.9 KB) - added by yaseppochi (Stephen J. Turnbull) 15 years ago.

Download all attachments as: .zip

Change History (14)

comment:1 Changed 15 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Owner: changed from macports-tickets@… to mcalhoun@…
Status: newassigned

In your output, I do not see the configure phase.
The configure phase is where -force_cpusubtype_ALL should be set.
The fact that it is not seems to be the problem.

Could you please post the results of

sudo port clean gmp && sudo port -vd upgrade gmp

so the configure phase is included in the output.

comment:2 Changed 15 years ago by vinc17@…

As documented, I'd say that -force_cpusubtype_ALL fixes the symptom, not the bug. Indeed here the problem concerns the asm file, and the as(1) man page says:

       -force_cpusubtype_ALL
              By default, the assembler will produce the CPU subtype  ALL  for
              the  object file it is assembling if it finds no implementation-
              specific instructions.  Also  by  default,  the  assembler  will
              allow  implementation-specific instructions and will combine the
              CPU subtype for those specific implementations.   The  combining
              of  specific  implementations is architecture-dependent; if some
              combination of instructions is not allowed, an error  is  gener-
              ated.    With   the  optional  -force_cpusubtype_ALL  flag,  all
              instructions are allowed and the object file's CPU subtype  will
              be  the  ALL subtype.  If the target architecture specified is a
              machine-specific  implementation  (e.g.,  -arch  ppc603,   -arch
              i486),  the  assembler will flag as errors instructions that are
              not supported on that  architecture,  and  it  will  produce  an
              object  file  with the CPU subtype for that specific implementa-
              tion (even if no implementation-specific instructions are used).
              The  -force_cpusubtype_ALL  flag  is the default for all x86 and
              x86_64 architectures.

So, basically -force_cpusubtype_ALL tells the assembler not to report any error if a non-generic instruction (optional instruction, extension...) is used. This means that the programmer needs to make sure that such instructions are (dynamically) executed only when they exist. By adding -force_cpusubtype_ALL, you hide a potential error made by upstream.

comment:3 in reply to:  2 Changed 15 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Replying to vinc17@…:

So, basically -force_cpusubtype_ALL tells the assembler not to report any error if a non-generic instruction (optional instruction, extension...) is used. This means that the programmer needs to make sure that such instructions are (dynamically) executed only when they exist. By adding -force_cpusubtype_ALL, you hide a potential error made by upstream.

I take your point, but GMP claims that its test suite is quite comprehensive, so this would be a mechanism to find errors made upstream.
As far as I know, nobody has found any.

I do not claim to be an expert on the PowerPC architecture, but -force_cpusubtype_ALL can't be that bad if it is the default for x86 and x86_64.

In any event, this ticket concerns more the fact that -force_cpusubtype_ALL is not being set correctly.

Changed 15 years ago by garribald@…

Attachment: gmp_log.txt added

comment:4 in reply to:  1 Changed 15 years ago by garribald@…

Replying to mcalhoun@…:

Could you please post the results of

sudo port clean gmp && sudo port -vd upgrade gmp

so the configure phase is included in the output.

Sorry for the delay, finally came around to make that full re-run - I have attached the log (gmp_log.txt). If there is anything else (running without ccache or whatever else log you need), no problem :)

comment:5 Changed 15 years ago by garribald@…

It works now! Having noticed the changeset here
http://trac.macports.org/changeset/47853
I have applied the small change manually to the portfile (didn't want to wait for the next portindex-run of the site ;) ) and gmp ran through all the phases fine. Thanks :)

PS: The configure.log also confirmed the success, changing the now unset (-pipe free) C/CXXFLAGS to
'-O2 -mpowerpc -no-cpp-precomp -force_cpusubtype_ALL -Wa,-maltivec -mcpu=7400'
for this old (but quite nice) Powerbook.

comment:6 Changed 15 years ago by MarcusCalhoun-Lopez (Marcus Calhoun-Lopez)

Resolution: fixed
Status: assignedclosed

Glad it is working.
Thanks for the report and testing.

comment:7 Changed 15 years ago by (none)

Milestone: Port Bugs

Milestone Port Bugs deleted

Changed 15 years ago by yaseppochi (Stephen J. Turnbull)

Attachment: gmp.log added

comment:8 Changed 15 years ago by yaseppochi (Stephen J. Turnbull)

It's back!

gmp 4.3.1_1.
powerpc-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5370).
MacPorts from svn; tree is up to date to r56622.
Mac OS X 10.4.11, iBook G4 (PPC).

Log attached (gmp.log).

comment:9 Changed 15 years ago by ryandesign (Ryan Carsten Schmidt)

Description: modified (diff)

comment:10 Changed 15 years ago by aalorbe@…

Note that this bug keeps coreutils from building on PowerPC macs.

Not knowing anything about how MacPorts builds things, here is a really nasty hack I used to get through this bug so I could install coreutils:

Build gmp via
port install gmp
and wait for it to fail.

Then
cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/work/gmp-4.3.1
In all files with the regular expression
"-arch ppc$"
(note, the "$" is used to indicate the end of the line)
replace all occurrences of "-arch ppc$" with
"-arch ppc -force_cpusubtype_ALL"
then do a make -j1 all then rerun
port install gmp

Here is a list of the files I modified:

tests/rand/Makefile
tests/mpz/Makefile
tests/mpq/Makefile
tests/mpn/Makefile
tests/mpf/Makefile
tests/mpbsd/Makefile
tests/misc/Makefile
tests/devel/Makefile
tests/cxx/Makefile
demos/expr/Makefile
demos/calc/Makefile
tune/Makefile
tests/Makefile
scanf/Makefile
printf/Makefile
mpz/Makefile
mpq/Makefile
mpn/Makefile
mpf/Makefile
mpbsd/Makefile
doc/Makefile
demos/Makefile
cxx/Makefile
config.log

The following command lines *should* make the changes for you and run make in the directory gmp-4.3.1

cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/work/gmp-4.3.1
find . -type f -name \* -exec sed -i -e 's#-arch ppc *$#-arch ppc -force_cpusubtype_ALL#' {} \;
make -j1 all

but I only tested the find/sed line on some test files I created, not the real thing.

You may want to backup the directory first, doing something like

cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/work
tar -zcvf /tmp/gmp-4.3.1.tgz gmp-4.3.1

Then to restore you can do
cd /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_devel_gmp/work
rm -fr gmp-4.3.1
tar -zxvf /tmp/gmp-4.3.1.tgz

Again, the above was not tested but *should* work.

comment:11 Changed 15 years ago by aalorbe@…

Cc: aalorbe@… added

Cc Me!

comment:12 Changed 15 years ago by blb@…

The new ticket is #20985.

Note: See TracTickets for help on using tickets.