I got GnuPG 1.0.6 to compile on Solaris 2.7 Intel

Mark Pettit pettit at yahoo-inc.com
Fri Apr 12 14:19:02 CEST 2002

After quite a few hours of mucking around inside of the assembly code in
gnupg-1.0.6/mpi/*.S, I finally got GnuPG 1.0.6 to compile under Solaris 2.7

I thought this would be a good thing to post to the gnupg-devel list in case
anyone else ever needs to accomplish this.  All of the changes I came up
with resulted from comparing gmp-2.0.2 (which is apparently what the mpi/
directory in gnupg-1.0.6 was based on) to later revisions of gmp, which got
better and better as time went on.

I'd like to highly recommend that gmp-4.0.1 be integrated into the gnupg
tree again, to bring things up to modern standards.  This would require some
work, but I think it'd be worth it.  I'd be glad to help out if needed.

There are certain idiosyncracies to the Solaris x86 assembler, and the gmp
folks have apparently gone to great lengths to figure all of them out,
because gmp-4.0.1 compiles cleanly right out of the box on Solaris x86,
which couldn't be said for previous (3.x and before) versions of gmp.

Anyway, enough rambling.  Here's the patch.  I'll also include it as a
uuencoded file at the end of the email, so as to not lose the tabs (which
tend to get lost in email translation):

diff -ur gnupg-1.0.6.orig/mpi/i386/mpih-add1.S gnupg-1.0.6/mpi/i386/mpih-add1.S
--- gnupg-1.0.6.orig/mpi/i386/mpih-add1.S	Sun Apr 29 06:04:57 2001
+++ gnupg-1.0.6/mpi/i386/mpih-add1.S	Fri Apr 12 03:45:49 2002
@@ -75,7 +75,7 @@
 	addl	$4,%esp
 /* Calculate start address in loop for non-PIC.  */
-	leal	(Loop - 3)(%eax,%eax,8),%eax
+	leal	Loop-3(%eax,%eax,8),%eax
 	jmp	*%eax			/* jump into loop */
 	ALIGN (3)
diff -ur gnupg-1.0.6.orig/mpi/i386/mpih-lshift.S gnupg-1.0.6/mpi/i386/mpih-lshift.S
--- gnupg-1.0.6.orig/mpi/i386/mpih-lshift.S	Sun Apr 29 06:05:07 2001
+++ gnupg-1.0.6/mpi/i386/mpih-lshift.S	Fri Apr 12 03:48:55 2002
@@ -57,21 +57,21 @@
 	movl	(%esi,%edx,4),%ebx	/* read most significant limb */
 	xorl	%eax,%eax
-	shldl	%cl,%ebx,%eax		/* compute carry limb */
+	shldl	%ebx,%eax		/* compute carry limb */
 	decl	%edx
 	jz	Lend
 	pushl	%eax			/* push carry limb onto stack */
-	testb	$1,%edx
+	testb	$1,%dl
 	jnz	L1			/* enter loop in the middle */
 	movl	%ebx,%eax
 	ALIGN (3)
 Loop:	movl	(%esi,%edx,4),%ebx	/* load next lower limb */
-	shldl	%cl,%ebx,%eax		/* compute result limb */
+	shldl	%ebx,%eax		/* compute result limb */
 	movl	%eax,(%edi,%edx,4)	/* store it */
 	decl	%edx
 L1:	movl	(%esi,%edx,4),%eax
-	shldl	%cl,%eax,%ebx
+	shldl	%eax,%ebx
 	movl	%ebx,(%edi,%edx,4)
 	decl	%edx
 	jnz	Loop
diff -ur gnupg-1.0.6.orig/mpi/i386/mpih-rshift.S gnupg-1.0.6/mpi/i386/mpih-rshift.S
--- gnupg-1.0.6.orig/mpi/i386/mpih-rshift.S	Sun Apr 29 06:06:44 2001
+++ gnupg-1.0.6/mpi/i386/mpih-rshift.S	Fri Apr 12 03:49:09 2002
@@ -60,21 +60,21 @@
 	movl	(%esi,%edx,4),%ebx	/* read least significant limb */
 	xorl	%eax,%eax
-	shrdl	%cl,%ebx,%eax		/* compute carry limb */
+	shrdl	%ebx,%eax		/* compute carry limb */
 	incl	%edx
 	jz	Lend2
 	pushl	%eax			/* push carry limb onto stack */
-	testb	$1,%edx
+	testb	$1,%dl
 	jnz	L2			/* enter loop in the middle */
 	movl	%ebx,%eax
 	ALIGN (3)
 Loop2:	 movl	 (%esi,%edx,4),%ebx	 /* load next higher limb */
-	shrdl	%cl,%ebx,%eax		/* compute result limb */
+	shrdl	%ebx,%eax		/* compute result limb */
 	movl	%eax,(%edi,%edx,4)	/* store it */
 	incl	%edx
 L2:	movl	(%esi,%edx,4),%eax
-	shrdl	%cl,%eax,%ebx
+	shrdl	%eax,%ebx
 	movl	%ebx,(%edi,%edx,4)
 	incl	%edx
 	jnz	Loop2
diff -ur gnupg-1.0.6.orig/mpi/i386/mpih-sub1.S gnupg-1.0.6/mpi/i386/mpih-sub1.S
--- gnupg-1.0.6.orig/mpi/i386/mpih-sub1.S	Sun Apr 29 06:06:53 2001
+++ gnupg-1.0.6/mpi/i386/mpih-sub1.S	Fri Apr 12 03:45:59 2002
@@ -76,7 +76,7 @@
 	addl	$4,%esp
 /* Calculate start address in loop for non-PIC.  */
-	leal	(Loop - 3)(%eax,%eax,8),%eax
+	leal	Loop-3(%eax,%eax,8),%eax
 	jmp	*%eax			/* jump into loop */
 	ALIGN (3)
diff -ur gnupg-1.0.6.orig/mpi/i386/syntax.h gnupg-1.0.6/mpi/i386/syntax.h
--- gnupg-1.0.6.orig/mpi/i386/syntax.h	Tue May  1 10:40:53 2001
+++ gnupg-1.0.6/mpi/i386/syntax.h	Fri Apr 12 03:46:43 2002
@@ -45,7 +45,7 @@
 #define ALIGN(log) .align log
 #if defined (ELF_SYNTAX)
-#define ALIGN(log) .align 1<<(log)
+#define ALIGN(log) .align 1<<log
 #define GLOBL .globl

These patches, if applied *before* the configure is run, will allow
gnupg-1.0.6 to be compiled totally cleanly on a Solaris Intel system,
assuming you use the same compiler I use: gcc-3.0.4 (the latest 3.x version
of gcc).  I had a much harder time using gcc-2.95.3, but after I upgraded to
3.0.4, it wasn't too hard to figure out what to fix.

I make no claim about applying this patch to any other OS (Linux, FreeBSD,

Hope this is helpful to someone.  The uuencoded patch is at the end of this

Mark K. Pettit          "Ragged lines of ragged grey
pettit at yahoo-inc.com     Skeletons they shuffle away"
Technical Yahoo
Yahoo!, Inc., 701 First Avenue, Sunnyvale, CA 94089


begin 644 gnupg-1.0.6-solaris27-intel.patch
M4R!G;G5P9RTQ+C`N-B]M<&DO:3,X-B]M<&EH+6%D9#$N4PHM+2T at 9VYU<&<M
M,2XP+C8N;W)I9R]M<&DO:3,X-B]M<&EH+6%D9#$N4PE3=6X at 07!R(#(Y(#`V
M.C`T.C4W(#(P,#$**RLK(&=N=7!G+3$N,"XV+VUP:2]I,S at V+VUP:6 at M861D
M,2Y3"49R:2!!<'(@,3(@,#,Z-#4Z-#D@,C`P, at I`0"`M-S4L-R`K-S4L-R!`
M+2`S*2 at E96%X+"5E87 at L."DL)65A>`HK"6QE86P)3&]O<"TS*"5E87 at L)65A
M+VUP:2]I,S at V+VUP:6 at M;'-H:69T+E, at 9VYU<&<M,2XP+C8O;7!I+VDS.#8O
M;7!I:"UL<VAI9G0N4PHM+2T at 9VYU<&<M,2XP+C8N;W)I9R]M<&DO:3,X-B]M
M<&EH+6QS:&EF="Y3"5-U;B!!<'(@,CD@,#8Z,#4Z,#<@,C`P,0HK*RL at 9VYU
M<&<M,2XP+C8O;7!I+VDS.#8O;7!I:"UL<VAI9G0N4PE&<FD at 07!R(#$R(#`S
M*B\*(`EX;W)L"25E87 at L)65A>`HM"7-H;&1L"25C;"PE96)X+"5E87@)"2\J
M(&-O;7!U=&4 at 8V%R<GD@;&EM8B`J+PHK"7-H;&1L"25E8G at L)65A>`D)+RH@
M+PHM"71E<W1B"20Q+"5E9'@**PET97-T8 at DD,2PE9&P*(`EJ;GH)3#$)"0DO
M*B!E;G1E<B!L;V]P(&EN('1H92!M:61D;&4@*B\*(`EM;W9L"25E8G at L)65A
M>`H@"B`)04Q)1TX@*#,I"B!,;V]P. at EM;W9L"2 at E97-I+"5E9'@L-"DL)65B
M+"5E87@)"2\J(&-O;7!U=&4@<F5S=6QT(&QI;6(@*B\*(`EM;W9L"25E87 at L
M*"5E9&DL)65D>"PT*0DO*B!S=&]R92!I="`J+PH@"61E8VP))65D>`H at 3#$Z
M"6UO=FP)*"5E<VDL)65D>"PT*2PE96%X"BT)<VAL9&P))6-L+"5E87 at L)65B
M>`HK"7-H;&1L"25E87 at L)65B>`H@"6UO=FP))65B>"PH)65D:2PE961X+#0I
M,S at V+VUP:6 at M<G-H:69T+E,*+2TM(&=N=7!G+3$N,"XV+F]R:6<O;7!I+VDS
M.#8O;7!I:"UR<VAI9G0N4PE3=6X at 07!R(#(Y(#`V.C`V.C0T(#(P,#$**RLK
M(&=N=7!G+3$N,"XV+VUP:2]I,S at V+VUP:6 at M<G-H:69T+E,)1G)I($%P<B`Q
M;&EM8B`J+PH@"7AO<FP))65A>"PE96%X"BT)<VAR9&P))6-L+"5E8G at L)65A
M>`D)+RH at 8V]M<'5T92!C87)R>2!L:6UB("HO"BL)<VAR9&P))65B>"PE96%X
M96YD, at H@"7!U<VAL"25E87@)"0DO*B!P=7-H(&-A<G)Y(&QI;6(@;VYT;R!S
M=&%C:R`J+PHM"71E<W1B"20Q+"5E9'@**PET97-T8 at DD,2PE9&P*(`EJ;GH)
M8G at L)65A>`H@"B`)04Q)1TX@*#,I"B!,;V]P,CH)(&UO=FP)("@E97-I+"5E
M9'@L-"DL)65B>`D at +RH@;&]A9"!N97AT(&AI9VAE<B!L:6UB("HO"BT)<VAR
M9&P))6-L+"5E8G at L)65A>`D)+RH at 8V]M<'5T92!R97-U;'0@;&EM8B`J+PHK
M"7-H<F1L"25E8G at L)65A>`D)+RH at 8V]M<'5T92!R97-U;'0@;&EM8B`J+PH@
M+C`N-B]M<&DO:3,X-B]M<&EH+7-U8C$N4PHM+2T at 9VYU<&<M,2XP+C8N;W)I
M9R]M<&DO:3,X-B]M<&EH+7-U8C$N4PE3=6X at 07!R(#(Y(#`V.C`V.C4S(#(P
M,#$**RLK(&=N=7!G+3$N,"XV+VUP:2]I,S at V+VUP:6 at M<W5B,2Y3"49R:2!!
M<'(@,3(@,#,Z-#4Z-3D@,C`P, at I`0"`M-S8L-R`K-S8L-R!`0`H@"6%D9&P)
M(&QO;W`@9F]R(&YO;BU024,N("`J+PHM"6QE86P)*$QO;W`@+2`S*2 at E96%X
M+"5E87 at L."DL)65A>`HK"6QE86P)3&]O<"TS*"5E87 at L)65A>"PX*2PE96%X
M"4%,24=.("@S*0ID:69F("UU<B!G;G5P9RTQ+C`N-BYO<FEG+VUP:2]I,S at V
M+W-Y;G1A>"YH(&=N=7!G+3$N,"XV+VUP:2]I,S at V+W-Y;G1A>"YH"BTM+2!G
M;G5P9RTQ+C`N-BYO<FEG+VUP:2]I,S at V+W-Y;G1A>"YH"51U92!-87D@(#$@
M,3`Z-#`Z-3,@,C`P,0HK*RL at 9VYU<&<M,2XP+C8O;7!I+VDS.#8O<WEN=&%X
M"B`C9&5F:6YE($%,24=.*&QO9RD at +F%L:6=N(&QO9PH@(V5N9&EF"B`C:68@
M9&5F:6YE9"`H14Q&7U-93E1!6"D*+2-D969I;F4 at 04Q)1TXH;&]G*2`N86QI
M9VX@,3P\*&QO9RD**R-D969I;F4 at 04Q)1TXH;&]G*2`N86QI9VX@,3P\;&]G
G"B`C96YD:68*("-D969I;F4 at 1TQ/0DP at +F=L;V)L"B`C96YD:68*

More information about the Gnupg-devel mailing list