Re: "base/binutils should not be pulling in any other ports at all"? (That confuses me.)

2018-10-12 Thread Mark Millard via freebsd-toolchain
[Top post going in a somewhat different direction.
Plus I listed the wrong version for bintils, not
6.4, but 2.30 .]

I probably should have referenced the line in
base/binutils/Makefile :

MASTERDIR=  ${.CURDIR}/../../devel/binutils

which in turn brings in references for all the
direct dependencies that devel/binutils normally
has, such as seen via freshports.

This is how things that are missing up front end
up with an attempt to build them. I do not see
anything that effectively would say "disable
the dependencies that devel/binutils indicates".


On 2018-Oct-12, at 5:48 PM, Mark Millard  wrote:

> On 2018-Oct-10, at 3:13 PM, John Baldwin  wrote:
> 
>> On 10/6/18 12:22 PM, Mark Millard via freebsd-toolchain wrote:
>>> [Actually devel/gettext-tools is a build time dependency: it should not be 
>>> using
>>> libtool: link: /usr/local/bin/powerpc64-unknown-freebsd12.0-gcc --sysroot=. 
>>> . .
>>> It looks like the /usr/local/lib references are correct but the wrong 
>>> linker was
>>> being used. About 5 other ports have a similar status for making 
>>> base/binutils
>>> as a cross build.]
>> 
>> base/binutils should not be pulling in any other ports at all.
> 
> That last quote confuses me still. May be it means
> it is all to be manually managed instead of automatic?
> (The actual build using things link devel/bison on
> the host if base/binutils is to build at all.)
> 
> All versions of binutils have direct build dependencies on:
> 
> math/gmp
> math/mpfr
> devel/bison
> devel/gmake
> 
> as far as I know. Some of those in turn have more
> build dependencies. Some of all that have Runtime
> dependencies and/or library dependencies as well.
> (Host context of usage.)
> 
> The following may not be complete but is suggestive.
> 
> 
> Build dependencies:
> 
> math/gmp: print/texinfo
> devel/bison: devel/m4 print/texinfo devel/gettext-tools lang/perl5.*
> devel/m4: print/texinfo
> misc/help2man: devel/p5-Locale-gettext devel/gmake devel/gettext-tools 
> lang/perl5.*
> devel/p5-Locale-gettext: devel/gettext-tools lang/perl5.*
> print/texinfo: misc/help2man devel/gmake devel/gettext-tools lang/perl5.*
> 
> So removing multiple listings:
> (some runtime and library dependencies not covered yet)
> 
> math/gmp
> math/mpfr
> devel/bison
> devel/gmake
> devel/m4
> misc/help2man
> devel/p5-Locale-gettext
> devel/gettext-tools
> print/texinfo
> lang/perl5.*
> 
> (I'm not explicit about which perl5 version.)
> 
> Runtime dependencies:
> 
> math/gmp: print/indexinfo
> math/mpfr: print/indexinfo
> devel/gmake: print/indexinfo
> devel/m4: print/indexinfo
> misc/help2man: devel/p5-Locale-gettext lang/perl5.* print/indexinfo
> devel/p5-Locale-gettext: lang/perl5.*
> devel/gettext-tools: print/indexinfo
> print/texinfo: lang/perl5.* print/indexinfo
> 
> So this adds, removing multiple listings:
> 
> print/indexinfo
> 
> 
> Library dependencies:
> 
> math/mpfr: math/gmp
> devel/bison: devel/m4 print/indexinfo
> devel/gmake: devel/gettext-runtime
> misc/help2man: devel/gettext-runtime
> devel/p5-Locale-gettext: devel/gettext-runtime
> devel/gettext-tools: devel/gettext-runtime converters/libiconv
> print/texinfo: converters/libiconv devel/gettext-runtime
> devel/gettext-runtime: converters/libiconv
> 
> So this adds, removing multiple listings:
> 
> devel/gettext-runtime
> converters/libiconv
> 
> 
> Putting the 3 lists together I get that all the following
> are used in building any 6.4 or so version of binutils
> that is in ports:

That "6.4" should have been: 2.30

(I inappropriately thought of the gcc version number
originally.)

> math/gmp
> math/mpfr
> devel/bison
> devel/gmake
> devel/m4
> misc/help2man
> devel/p5-Locale-gettext
> devel/gettext-tools
> print/texinfo
> lang/perl5.*
> print/indexinfo
> devel/gettext-runtime
> converters/libiconv
> 
> 
>>  Everytime I've
>> built it it has had no other dependencies beyond pkg.
> 
> I expect the dependencies were already satisfied at
> the time of the attempted build of make/binutils
> and so caused no additional build activity at the
> time.
> 
> My environment tends to have somewhat less than normal
> installed for development-environment type ports. The
> ones that I listed above that I did not have trouble
> with are exactly the ones that were in place beforehand.
> The ones I had trouble with are exactly the ones that
> were not in place beforehand.
> 
>>  As far as I'm aware, 
>> the only ports which work with CROSS_TOOLCHAIN and CROSS_SYSROOT are
>> ports-mgmt/pkg, base/gcc, and base/binutils.
> 
> Good to know.


===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"


"base/binutils should not be pulling in any other ports at all"? (That confuses me.)

2018-10-12 Thread Mark Millard via freebsd-toolchain
On 2018-Oct-10, at 3:13 PM, John Baldwin  wrote:

> On 10/6/18 12:22 PM, Mark Millard via freebsd-toolchain wrote:
>> [Actually devel/gettext-tools is a build time dependency: it should not be 
>> using
>> libtool: link: /usr/local/bin/powerpc64-unknown-freebsd12.0-gcc --sysroot=. 
>> . .
>> It looks like the /usr/local/lib references are correct but the wrong linker 
>> was
>> being used. About 5 other ports have a similar status for making 
>> base/binutils
>> as a cross build.]
> 
> base/binutils should not be pulling in any other ports at all.

That last quote confuses me still. May be it means
it is all to be manually managed instead of automatic?
(The actual build using things link devel/bison on
the host if base/binutils is to build at all.)

All versions of binutils have direct build dependencies on:

math/gmp
math/mpfr
devel/bison
devel/gmake

as far as I know. Some of those in turn have more
build dependencies. Some of all that have Runtime
dependencies and/or library dependencies as well.
(Host context of usage.)

The following may not be complete but is suggestive.


Build dependencies:

math/gmp: print/texinfo
devel/bison: devel/m4 print/texinfo devel/gettext-tools lang/perl5.*
devel/m4: print/texinfo
misc/help2man: devel/p5-Locale-gettext devel/gmake devel/gettext-tools 
lang/perl5.*
devel/p5-Locale-gettext: devel/gettext-tools lang/perl5.*
print/texinfo: misc/help2man devel/gmake devel/gettext-tools lang/perl5.*

So removing multiple listings:
(some runtime and library dependencies not covered yet)

math/gmp
math/mpfr
devel/bison
devel/gmake
devel/m4
misc/help2man
devel/p5-Locale-gettext
devel/gettext-tools
print/texinfo
lang/perl5.*

(I'm not explicit about which perl5 version.)

Runtime dependencies:

math/gmp: print/indexinfo
math/mpfr: print/indexinfo
devel/gmake: print/indexinfo
devel/m4: print/indexinfo
misc/help2man: devel/p5-Locale-gettext lang/perl5.* print/indexinfo
devel/p5-Locale-gettext: lang/perl5.*
devel/gettext-tools: print/indexinfo
print/texinfo: lang/perl5.* print/indexinfo

So this adds, removing multiple listings:

print/indexinfo


Library dependencies:

math/mpfr: math/gmp
devel/bison: devel/m4 print/indexinfo
devel/gmake: devel/gettext-runtime
misc/help2man: devel/gettext-runtime
devel/p5-Locale-gettext: devel/gettext-runtime
devel/gettext-tools: devel/gettext-runtime converters/libiconv
print/texinfo: converters/libiconv devel/gettext-runtime
devel/gettext-runtime: converters/libiconv

So this adds, removing multiple listings:

devel/gettext-runtime
converters/libiconv


Putting the 3 lists together I get that all the following
are used in building any 6.4 or so version of binutils
that is in ports:

math/gmp
math/mpfr
devel/bison
devel/gmake
devel/m4
misc/help2man
devel/p5-Locale-gettext
devel/gettext-tools
print/texinfo
lang/perl5.*
print/indexinfo
devel/gettext-runtime
converters/libiconv


>   Everytime I've
> built it it has had no other dependencies beyond pkg.

I expect the dependencies were already satisfied at
the time of the attempted build of make/binutils
and so caused no additional build activity at the
time.

My environment tends to have somewhat less than normal
installed for development-environment type ports. The
ones that I listed above that I did not have trouble
with are exactly the ones that were in place beforehand.
The ones I had trouble with are exactly the ones that
were not in place beforehand.

>   As far as I'm aware, 
> the only ports which work with CROSS_TOOLCHAIN and CROSS_SYSROOT are
> ports-mgmt/pkg, base/gcc, and base/binutils.

Good to know.

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"


Re: On a powerpc64, system-clang crashes on audio/alsa-lib 's control.lo : "error in backend: A @@ version cannot be undefined"

2018-10-12 Thread Jan Beich
Dimitry Andric  writes:

> http://git.alsa-project.org/?p=alsa-lib.git;a=commit;h=3bad0a21b4d13d8d10691f382c836897fa7a7cb9
>
> You might want to try if that also works for you.

Applied in r481945. Let's see what happens. ;)
___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"


Re: On a powerpc64, system-clang crashes on audio/alsa-lib 's control.lo : "error in backend: A @@ version cannot be undefined"

2018-10-12 Thread Dimitry Andric
On 12 Oct 2018, at 15:00, Jan Beich  wrote:
> 
> Mark Millard  writes:
>> The following is on a powerpc64 machine (old PowerMac G5 so-called
>> "Quad Core") running a personal build of head -r339076 that was
>> built via devel/powerpc64-xtoolchain-gcc and such (no gcc 4.2.1).
>> The compiler for the port build is system-clang (so clang 6 as cc),
>> not used for buildworld buildkernel. [I experiment with more modern
>> compilers and toolchains for some powerpc family members.]
> [...]
>> /bin/sh ../../libtool --tag=CC --mode=compile cc -DHAVE_CONFIG_H
>> -I. -I../../include -I../../include -I/usr/ports/audio/alsa-lib/files
>> -O2 -pipe -g -fno-strict-aliasing -MT control.lo -MD -MP -MF
>> .deps/control.Tpo -c -o control.lo control.c
> [...]
>> fatal error: error in backend: A @@ version cannot be undefined
...
> and can be further reduced to
> 
>  int main()
>  {
>__asm__ (".symver __foo,foo@@FOO");
>__asm__ (".symver .__foo,.foo@@FOO");
>  }

Submitted as https://bugs.llvm.org/show_bug.cgi?id=39270, though
upstream alsa-lib seems to have dropped this powerpc64 specific
workaround:

http://git.alsa-project.org/?p=alsa-lib.git;a=commit;h=3bad0a21b4d13d8d10691f382c836897fa7a7cb9

You might want to try if that also works for you.

-Dimitry



signature.asc
Description: Message signed with OpenPGP


FYI: powerpc64 headbuilt via devel/powerpc64-xtoolchain-gcc and C++ exceptions for user code built by system-clang or devel/powerpc64-gcc (as of head -r339076 and ports -r480180)

2018-10-12 Thread Mark Millard via freebsd-toolchain
I built a powerpc64 head -r339076 via devel/powerpc64-gcc
and the like that built clang as cc as well (and
WITHOUT_LIB32). This included use of base/binutils to
the the powerpc64 set up. The system and kernel are
non-debug builds (but with symbols). [system-clang is not
used for buildworld buildkernel because of known
issues (last I tried).]

booting, buildworld, buildkernel, poudriere building
what totaled to be somewhat under 400 ports all seem
to work. But . . .

It been a long time since I've done something analogous
and a significant item in the result is different than in
the past once I started testing the throwing of C++
exceptions in code produced by system-clang or by
devel/powerpc64-gcc :

Such code ends up stuck using around 100% of a CPU.
An example is the program:

# more exception_test.cpp
#include 

int main(void)
{
try { throw std::exception(); }
catch (std::exception& e) {}
return 0;
}

For system-clang it ended up with:

# ldd a.out
a.out:
libc++.so.1 => /usr/lib/libc++.so.1 (0x81006d000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x810184000)
libm.so.5 => /lib/libm.so.5 (0x8101ab000)
libc.so.7 => /lib/libc.so.7 (0x8101eb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x810554000)

That program goes into an possibly unbounded execution.
(Historically when this program had problems it would
stop and produce a core file.)

When compiled by devel/powerpc64-gcc the a.out that results
does the same thing. ( /usr/local/bin/powerpc64-unknown-freebsd12.0-c++ 
as the compiler path ) So this is not really clang specific
in any way. This ended up with:

# ldd a.out
a.out:
libc++.so.1 => /usr/lib/libc++.so.1 (0x81006d000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x810184000)
libm.so.5 => /lib/libm.so.5 (0x8101ab000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x8101eb000)
libc.so.7 => /lib/libc.so.7 (0x810211000)

(That should not have involved clang or llvm at all.)

But compiled by lang/gcc8's g++8 the a.out that results works
fine. This ends up with:

# ldd a.out
a.out:
libstdc++.so.6 => /usr/local/lib/gcc8/libstdc++.so.6 (0x81006e000)
libm.so.5 => /lib/libm.so.5 (0x8102c7000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x810307000)
libc.so.7 => /lib/libc.so.7 (0x81032d000)

It is not clear if using base/gcc as system cc
would do any better than using system-clang does
or than devel/powerpc64-gcc does: it is sort of
a variant of devel/powerpc64-gcc .

It will probably be some time before I figure out
much about what is going on.

Two things common to the problem cases are:

libc++.so.1 => /usr/lib/libc++.so.1 (0x81006d000)
libcxxrt.so.1 => /lib/libcxxrt.so.1 (0x810184000)

lang/gcc8 avoids those being involved.


Notes:

Some time ago I'd used system-clang to build such
programs in an environment built via devel/powerpc64-gcc
and devel/powerpc64-binutils and the programs worked.
The same for devel/powerpc64-gcc use: the code it
produced for the programs also worked. At this point
I've no clue what changed or when.

WITHOUT_LIB32= is because, for every post-gcc 4.2.1
that I've tried, the lib32 produced misuses R30 in
crtbeginS code (vs. the ABI for FreeBSD) and 32-bit
code just produces core files from the bad so-called
address dereference that results.

I'd rather have throwing C++ exceptions working and
lack of lib32 than have lib32 but not have throwing
C++ exceptions working. But at the moment how to have
such is not obvious when fairly modern compilers
and toolchains are involved. 

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"


Two example patches: enable powerpc64 builds of devel/powerpc64-gcc and lang/gcc8 via system-clang ( avoiding clang's reserving vec_step )

2018-10-12 Thread Mark Millard via freebsd-toolchain
[I experiment with using modern compilers on
powerpc64, here buildworld buildkernel was
via devel/powerpc64-xtoolchain-gcc but included
building clang and having clang as cc. clang's
problems are tied to aspects of buildworld
buildkernel but is otherwise usable.]

When clang is built with support for altivec
for powerpc* (powerpc64 here) and such it
reserves a name not from the C/C++ language
standards: vec_step .

system-clang has enough enabled for powerpc64
to have reserved vec_step.

If devel/llvm* ever enable enough powerpc64
support they would reserve vec_step too. (I've
not checked if this is already happening.)

Unfortunately, various devel/*gcc and lang/gcc*
use that name in gcc/tree-vect-loop.c and so on
powerpc64 those various *gcc* fail to build.

The below just avoids the extra reserved word
by renaming each non-comment vec_step in
gcc/tree-vect-loop.c to vec_step_renamed . This
has allowed me to build the example *gcc* 's in
poudriere-devel on powerpc64 (head -r339076
based).

One could imagine sed'ing or otherwise processing
gcc/tree-vect-loop.c instead of having patch files.
In the examples the original gcc/tree-vect-loop.c
files are not the same: one patch for all *gcc*
would not work.

# svnlite status /usr/ports/devel/powerpc64-gcc/files/ | more
?   /usr/ports/devel/powerpc64-gcc/files/patch-gcc_tree-vect-loop.c

# svnlite status /usr/ports/lang/gcc8/files/ | more
?   /usr/ports/lang/gcc8/files/patch-gcc_tree-vect-loop.c

# more /usr/ports/devel/powerpc64-gcc/files/patch-gcc_tree-vect-loop.c
--- gcc/tree-vect-loop.c.orig   2017-03-28 15:35:56 UTC
+++ gcc/tree-vect-loop.c
@@ -3832,7 +3832,7 @@ get_initial_def_for_induction (gimple *iv_phi)
   edge pe = loop_preheader_edge (loop);
   struct loop *iv_loop;
   basic_block new_bb;
-  tree new_vec, vec_init, vec_step, t;
+  tree new_vec, vec_init, vec_step_renamed, t;
   tree new_name;
   gimple *new_stmt;
   gphi *induction_phi;
@@ -3986,7 +3986,7 @@ get_initial_def_for_induction (gimple *iv_phi)
   stepvectype = get_vectype_for_scalar_type (TREE_TYPE (new_name));
   gcc_assert (stepvectype);
   new_vec = build_vector_from_val (stepvectype, t);
-  vec_step = vect_init_vector (iv_phi, new_vec, stepvectype, NULL);
+  vec_step_renamed = vect_init_vector (iv_phi, new_vec, stepvectype, NULL);
 
 
   /* Create the following def-use cycle:
@@ -4008,7 +4008,7 @@ get_initial_def_for_induction (gimple *iv_phi)
   induc_def = PHI_RESULT (induction_phi);
 
   /* Create the iv update inside the loop  */
-  new_stmt = gimple_build_assign (vec_dest, PLUS_EXPR, induc_def, vec_step);
+  new_stmt = gimple_build_assign (vec_dest, PLUS_EXPR, induc_def, 
vec_step_renamed);
   vec_def = make_ssa_name (vec_dest, new_stmt);
   gimple_assign_set_lhs (new_stmt, vec_def);
   gsi_insert_before (, new_stmt, GSI_SAME_STMT);
@@ -4049,7 +4049,7 @@ get_initial_def_for_induction (gimple *iv_phi)
   gcc_assert (CONSTANT_CLASS_P (new_name)
  || TREE_CODE (new_name) == SSA_NAME);
   new_vec = build_vector_from_val (stepvectype, t);
-  vec_step = vect_init_vector (iv_phi, new_vec, stepvectype, NULL);
+  vec_step_renamed = vect_init_vector (iv_phi, new_vec, stepvectype, NULL);
 
   vec_def = induc_def;
   prev_stmt_vinfo = vinfo_for_stmt (induction_phi);
@@ -4057,7 +4057,7 @@ get_initial_def_for_induction (gimple *iv_phi)
{
  /* vec_i = vec_prev + vec_step  */
  new_stmt = gimple_build_assign (vec_dest, PLUS_EXPR,
- vec_def, vec_step);
+ vec_def, vec_step_renamed);
  vec_def = make_ssa_name (vec_dest, new_stmt);
  gimple_assign_set_lhs (new_stmt, vec_def);
  
@@ -6324,13 +6324,13 @@ vectorizable_reduction (gimple *stmt, gimple_stmt_iter
 
  /* Create a vector of the step value.  */
  tree step = build_int_cst (cr_index_scalar_type, nunits_out);
- tree vec_step = build_vector_from_val (cr_index_vector_type, step);
+ tree vec_step_renamed = build_vector_from_val (cr_index_vector_type, 
step);
 
  /* Create an induction variable.  */
  gimple_stmt_iterator incr_gsi;
  bool insert_after;
  standard_iv_increment_position (loop, _gsi, _after);
- create_iv (series_vect, vec_step, NULL_TREE, loop, _gsi,
+ create_iv (series_vect, vec_step_renamed, NULL_TREE, loop, _gsi,
 insert_after, _before_incr, _after_incr);
 
  /* Next create a new phi node vector (NEW_PHI_TREE) which starts


# more /usr/ports/lang/gcc8/files/patch-gcc_tree-vect-loop.c
--- gcc/tree-vect-loop.c.orig   2018-10-10 22:41:40.295753000 -0700
+++ gcc/tree-vect-loop.c2018-10-10 22:57:44.698855000 -0700
@@ -4970,13 +4970,13 @@
 
   /* Create a vector of the step value.  */
   tree step = build_int_cst (cr_index_scalar_type, nunits_out);
-  tree vec_step = build_vector_from_val (cr_index_vector_type, step);
+  tree vec_step_renamed 

powerpc64 example, base/binutils presence vs. devel/powerpc64-gcc build failure: "phase: build-depends" confused then gcc config aborts build

2018-10-12 Thread Mark Millard via freebsd-toolchain
The following is from attempting to build devel/powerpc-gcc
via poudriere-devel on the powerpc64 system after having
bootstrapped via (in part) base/binutils and the .txz
produced on the host (amd64).

Looks like having both:

/usr/bin/powerpc64-unknown-freebsd12.0-*
and:
/usr/local/bin/powerpc64-unknown-freebsd12.0-*

in a powerpc64 environment confuses "phase: build-depends"
in poudriere for the devel/powerpc64-gcc build:

===
===>   powerpc64-gcc-6.4.0_2 depends on executable: 
powerpc64-unknown-freebsd12.0-as - found

I.e., poudriere finds /usr/bin/powerpc64-unknown-freebsd12.0-as
and concludes that devel/powerpc64-binutils does not need to be
installed for the devel/powerpc64-gcc to build.

Eventually this leads to aborting based on gcc's config noticing
an oddity:

. . .
checking for ld used by GCC... /usr/bin/powerpc64-unknown-freebsd12.0-ld
checking if the linker (/usr/bin/powerpc64-unknown-freebsd12.0-ld) is GNU ld... 
yes
configure: error: cannot execute: 
/usr/local/bin/powerpc64-unknown-freebsd12.0-ld: check --with-ld or env. var. 
DEFAULT_LINKER


This is associated with:

CONFIGURE_ARGS+=--target=${GCC_TARGET} --disable-nls --enable-languages=c,c++ \
--enable-gnu-indirect-function \
--without-headers \
--with-gmp=${LOCALBASE} \
--with-pkgversion="FreeBSD Ports Collection for 
${PKGNAMEPREFIX:C/-//g}" \
--with-system-zlib \
--with-gxx-include-dir=/usr/include/c++/v1/ \
--with-sysroot="/" \
--with-as=${LOCALBASE}/bin/${BU_PREFIX}-as \
--with-ld=${LOCALBASE}/bin/${BU_PREFIX}-ld

having the --with-ld not list the */bin/${BU_PREFIX}-ld it actually
finds and tests in config ( /usr used instead of ${LOCALBASE} ).


If any other port binds to devel/powerpc64-binutils it probably
has the same sort of issue. (Unlikely?)

This is not likely to be specific to powerpc64 as a base/binutils
target: powerpc64 is likely just an example.

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"


Re: On a powerpc64, system-clang crashes on audio/alsa-lib 's control.lo : "error in backend: A @@ version cannot be undefined"

2018-10-12 Thread Jan Beich
Mark Millard  writes:

> The following is on a powerpc64 machine (old PowerMac G5 so-called
> "Quad Core") running a personal build of head -r339076 that was
> built via devel/powerpc64-xtoolchain-gcc and such (no gcc 4.2.1).
> The compiler for the port build is system-clang (so clang 6 as cc),
> not used for buildworld buildkernel. [I experiment with more modern
> compilers and toolchains for some powerpc family members.]
[...]
> /bin/sh ../../libtool --tag=CC --mode=compile cc -DHAVE_CONFIG_H
> -I. -I../../include -I../../include -I/usr/ports/audio/alsa-lib/files
> -O2 -pipe -g -fno-strict-aliasing -MT control.lo -MD -MP -MF
> .deps/control.Tpo -c -o control.lo control.c
[...]
> fatal error: error in backend: A @@ version cannot be undefined
> cc: error: clang frontend command failed with exit code 70 (use -v to see 
> invocation)
> FreeBSD clang version 6.0.1 (tags/RELEASE_601/final 335540) (based on LLVM 
> 6.0.1)
> Target: powerpc64-unknown-freebsd12.0
> Thread model: posix
> InstalledDir: /usr/bin

Looks easy to reproduce on amd64 via -target e.g.,

  $ cd /usr/ports/audio/alsa-lib
  $ make clean configure
  $ cd $(make -V WRKSRC)/src/control
  $ ln -s ${SYSDIR:-/usr/src/sys}/powerpc/include /tmp/machine
  $ make control.lo CC='cc -target powerpc64-unknown-freebsd12.0 -isystem /tmp'
  [...]
  fatal error: error in backend: A @@ version cannot be undefined
  cc: error: clang frontend command failed with exit code 70 (use -v to see 
invocation)
  FreeBSD clang version 7.0.0 (tags/RELEASE_700/final 342383) (based on LLVM 
7.0.0)

which points to the following conditional

  #ifdef __powerpc64__
  # define symbol_version(real, name, version)  \
  __asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@" 
#version);\
  __asm__ (".symver ." ASM_NAME(#real) ",." ASM_NAME(#name) "@" 
#version)
  # define default_symbol_version(real, name, version)  \
  __asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@@" 
#version);   \
  __asm__ (".symver ." ASM_NAME(#real) ",." ASM_NAME(#name) "@@" 
#version)
  #else
  # define symbol_version(real, name, version) \
  __asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@" #version)
  # define default_symbol_version(real, name, version) \
  __asm__ (".symver " ASM_NAME(#real) "," ASM_NAME(#name) "@@" #version)
  #endif

and can be further reduced to

  int main()
  {
__asm__ (".symver __foo,foo@@FOO");
__asm__ (".symver .__foo,.foo@@FOO");
  }
___
freebsd-toolchain@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-toolchain
To unsubscribe, send any mail to "freebsd-toolchain-unsubscr...@freebsd.org"