Date: Wed, 4 Sep 2013 13:54:49 GMT From: Chie Taguchi <taguchi.ch@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/181811: [patch] security/libgcrypt inline assembler error at clang on ARM Message-ID: <201309041354.r84Dsnie032127@oldred.freebsd.org> Resent-Message-ID: <201309041400.r84E02uS077363@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 181811 >Category: ports >Synopsis: [patch] security/libgcrypt inline assembler error at clang on ARM >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Sep 04 14:00:02 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Chie Taguchi >Release: FreeBSD 10.0-CURRENT >Organization: >Environment: FreeBSD RPI 10.0-CURRENT FreeBSD 10.0-CURRENT #0 r255179: Wed Sep 4 01:26:29 JST 2013 user@arty:/usr/home/user/crochet-freebsd/work/obj/arm.armv6/usr/src.arm/sys/RPI-B-ELY arm >Description: security/libgcrypt have a compiling issue at clang on ARM. it already PRed ports/181365, and it works around to USE_GCC=4.2+ now. therefore i make a patch to fix inline assembler error at clang on ARM. and i test this patch to run tests/benchmark. error message is following: ===> Building for libgcrypt-1.5.2 make all-recursive Making all in compat Making all in mpi /bin/sh /usr/local/bin/libtool --tag=CC --mode=compile cc -DHAVE_CONFIG_H -I. -I.. -I../src -I../src -I/usr/local/include -O -pipe -std=gnu89 -fvisibility=hidden -Wall -MT mpih-div.lo -MD -MP -MF .deps/mpih-div.Tpo -c -o mpih-div.lo mpih-div.c libtool: compile: cc -DHAVE_CONFIG_H -I. -I.. -I../src -I../src -I/usr/local/include -O -pipe -std=gnu89 -fvisibility=hidden -Wall -MT mpih-div.lo -MD -MP -MF .deps/mpih-div.Tpo -c mpih-div.c -fPIC -DPIC -o .libs/mpih-div.o mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:150:13: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_q, _ql, (nh), (di)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ ./longlong.h:230:25: note: expanded from macro 'umul_ppmm' : "=&r" ((USItype)(xh)), ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:150:17: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_q, _ql, (nh), (di)); ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~ ./longlong.h:231:24: note: expanded from macro 'umul_ppmm' "=r" ((USItype)(xl)) ^ mpih-div.c:98:3: error: invalid % escape in inline assembly string UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:150:2: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_q, _ql, (nh), (di)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:228:14: note: expanded from macro 'umul_ppmm' __asm__ ("%@ Inlined umul_ppmm\n" ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:152:13: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_xh, _xl, _q, (d)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~ ./longlong.h:230:25: note: expanded from macro 'umul_ppmm' : "=&r" ((USItype)(xh)), ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:152:18: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_xh, _xl, _q, (d)); ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ ./longlong.h:231:24: note: expanded from macro 'umul_ppmm' "=r" ((USItype)(xl)) ^ mpih-div.c:98:3: error: invalid % escape in inline assembly string UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:152:2: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_xh, _xl, _q, (d)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:228:14: note: expanded from macro 'umul_ppmm' __asm__ ("%@ Inlined umul_ppmm\n" ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:153:14: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:200:23: note: expanded from macro 'sub_ddmmss' : "=r" ((USItype)(sh)), ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:153:19: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:201:24: note: expanded from macro 'sub_ddmmss' "=&r" ((USItype)(sl)) ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:155:18: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:200:23: note: expanded from macro 'sub_ddmmss' : "=r" ((USItype)(sh)), ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:155:23: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ ./longlong.h:201:24: note: expanded from macro 'sub_ddmmss' "=&r" ((USItype)(sl)) ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:158:15: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:200:23: note: expanded from macro 'sub_ddmmss' : "=r" ((USItype)(sh)), ^ mpih-div.c:98:3: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:158:20: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ ./longlong.h:201:24: note: expanded from macro 'sub_ddmmss' "=&r" ((USItype)(sl)) ^ mpih-div.c:104:6: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:150:13: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_q, _ql, (nh), (di)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ ./longlong.h:230:25: note: expanded from macro 'umul_ppmm' : "=&r" ((USItype)(xh)), ^ mpih-div.c:104:6: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:150:17: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_q, _ql, (nh), (di)); ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~ ./longlong.h:231:24: note: expanded from macro 'umul_ppmm' "=r" ((USItype)(xl)) ^ mpih-div.c:104:6: error: invalid % escape in inline assembly string UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:150:2: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_q, _ql, (nh), (di)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:228:14: note: expanded from macro 'umul_ppmm' __asm__ ("%@ Inlined umul_ppmm\n" mpih-div.c:104:6: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:152:13: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_xh, _xl, _q, (d)); ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~ ./longlong.h:230:25: note: expanded from macro 'umul_ppmm' : "=&r" ((USItype)(xh)), ^ mpih-div.c:104:6: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:152:18: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_xh, _xl, _q, (d)); ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~ ./longlong.h:231:24: note: expanded from macro 'umul_ppmm' "=r" ((USItype)(xl)) ^ mpih-div.c:104:6: error: invalid % escape in inline assembly string UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:152:2: note: expanded from macro 'UDIV_QRNND_PREINV' umul_ppmm (_xh, _xl, _q, (d)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:228:14: note: expanded from macro 'umul_ppmm' __asm__ ("%@ Inlined umul_ppmm\n" ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mpih-div.c:104:6: error: invalid use of a cast in a inline asm context requiring an l-value: remove the cast or build with -fheinous-gnu-extensions UDIV_QRNND_PREINV(dummy, r, r, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./mpi-internal.h:153:14: note: expanded from macro 'UDIV_QRNND_PREINV' sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ./longlong.h:200:23: note: expanded from macro 'sub_ddmmss' : "=r" ((USItype)(sh)), ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] 20 errors generated. *** [mpih-div.lo] Error code 1 make: stopped in /usr/ports/security/libgcrypt/work/libgcrypt-1.5.2/mpi 1 error make: stopped in /usr/ports/security/libgcrypt/work/libgcrypt-1.5.2/mpi *** [all-recursive] Error code 1 make: stopped in /usr/ports/security/libgcrypt/work/libgcrypt-1.5.2 1 error make: stopped in /usr/ports/security/libgcrypt/work/libgcrypt-1.5.2 *** [all] Error code 2 make: stopped in /usr/ports/security/libgcrypt/work/libgcrypt-1.5.2 1 error make: stopped in /usr/ports/security/libgcrypt/work/libgcrypt-1.5.2 ===> Compilation failed unexpectedly. Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to the maintainer. *** Error code 1 Stop. make: stopped in /usr/ports/security/libgcrypt *** Error code 1 >How-To-Repeat: comment out following lines in libgcrypt/Makefie: .elif ${ARCH} == "armv6" USE_GCC=4.2+ and run "make install" on ARM. >Fix: Patch attached with submission follows: diff -urN libgcrypt.orig/Makefile libgcrypt/Makefile --- libgcrypt.orig/Makefile 2013-09-03 21:38:02.000000000 +0900 +++ libgcrypt/Makefile 2013-09-03 21:39:46.000000000 +0900 @@ -36,9 +36,6 @@ BROKEN= will not compile. See pr ports/166388 .endif -.elif ${ARCH} == "armv6" -USE_GCC=4.2+ - .elif ${ARCH} == "i386" .if (${OSVERSION} < 900033) CONFIGURE_ARGS+= --disable-aesni-support diff -urN libgcrypt.orig/files/patch-mpi-longlong.h libgcrypt/files/patch-mpi-longlong.h --- libgcrypt.orig/files/patch-mpi-longlong.h 2013-09-03 21:35:50.000000000 +0900 +++ libgcrypt/files/patch-mpi-longlong.h 2013-09-03 20:51:48.000000000 +0900 @@ -1,5 +1,42 @@ ---- ./mpi/longlong.h.orig 2010-02-22 19:04:43.000000000 +0900 -+++ ./mpi/longlong.h 2010-11-01 18:25:34.000000000 +0900 +--- ./mpi/longlong.h.orig 2013-09-03 18:52:04.000000000 +0900 ++++ ./mpi/longlong.h 2013-09-03 20:46:40.000000000 +0900 +@@ -188,8 +188,8 @@ + #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ + __asm__ ("adds %1, %4, %5\n" \ + "adc %0, %2, %3" \ +- : "=r" ((USItype)(sh)), \ +- "=&r" ((USItype)(sl)) \ ++ : "=r" (sh), \ ++ "=&r" (sl) \ + : "%r" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "%r" ((USItype)(al)), \ +@@ -197,8 +197,8 @@ + #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ + __asm__ ("subs %1, %4, %5\n" \ + "sbc %0, %2, %3" \ +- : "=r" ((USItype)(sh)), \ +- "=&r" ((USItype)(sl)) \ ++ : "=r" (sh), \ ++ "=&r" (sl) \ + : "r" ((USItype)(ah)), \ + "rI" ((USItype)(bh)), \ + "r" ((USItype)(al)), \ +@@ -225,10 +225,10 @@ + : "r0", "r1", "r2") + #else + #define umul_ppmm(xh, xl, a, b) \ +- __asm__ ("%@ Inlined umul_ppmm\n" \ +- "umull %r1, %r0, %r2, %r3" \ +- : "=&r" ((USItype)(xh)), \ +- "=r" ((USItype)(xl)) \ ++ __asm__ ("@ Inlined umul_ppmm\n" \ ++ "umull %1, %0, %2, %3" \ ++ : "=&r" (xh), \ ++ "=r" (xl) \ + : "r" ((USItype)(a)), \ + "r" ((USItype)(b)) \ + : "r0", "r1") @@ -437,8 +437,8 @@ #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl %5,%1\n" \ >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309041354.r84Dsnie032127>