summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormiod <>2023-01-13 17:11:41 +0000
committermiod <>2023-01-13 17:11:41 +0000
commit364fc1ecd2d96b869246574350c6925835b991ab (patch)
tree754902f7e6ad288b35b04ef817ed997460a00546
parentf80a4029bb2f43fe5f0270857d48bc9d41d3ea4e (diff)
downloadopenbsd-364fc1ecd2d96b869246574350c6925835b991ab.tar.gz
openbsd-364fc1ecd2d96b869246574350c6925835b991ab.tar.bz2
openbsd-364fc1ecd2d96b869246574350c6925835b991ab.zip
Move all data tables from .text section to .rodata, and update the code to
fetch them correctly when building PIC. Also drop unused data, and remove --no-execute-only from linker flags. ok jsing@ kettenis@
-rw-r--r--src/lib/libcrypto/aes/asm/aes-parisc.pl34
-rw-r--r--src/lib/libcrypto/arch/hppa/Makefile.inc4
-rw-r--r--src/lib/libcrypto/bn/asm/parisc-mont.pl10
-rw-r--r--src/lib/libcrypto/modes/asm/ghash-parisc.pl33
-rw-r--r--src/lib/libcrypto/rc4/asm/rc4-parisc.pl21
-rw-r--r--src/lib/libcrypto/sha/asm/sha1-parisc.pl8
-rwxr-xr-xsrc/lib/libcrypto/sha/asm/sha512-parisc.pl22
7 files changed, 54 insertions, 78 deletions
diff --git a/src/lib/libcrypto/aes/asm/aes-parisc.pl b/src/lib/libcrypto/aes/asm/aes-parisc.pl
index f12a1c18ec..43dbfc108d 100644
--- a/src/lib/libcrypto/aes/asm/aes-parisc.pl
+++ b/src/lib/libcrypto/aes/asm/aes-parisc.pl
@@ -64,12 +64,7 @@ $rounds="%r29";
64 64
65$code=<<___; 65$code=<<___;
66 .LEVEL $LEVEL 66 .LEVEL $LEVEL
67#if 0
68 .SPACE \$TEXT\$
69 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
70#else
71 .text 67 .text
72#endif
73 68
74 .EXPORT AES_encrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR 69 .EXPORT AES_encrypt,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
75 .ALIGN 64 70 .ALIGN 64
@@ -95,11 +90,14 @@ AES_encrypt
95 $PUSH %r17,`-$FRAME+14*$SIZE_T`(%sp) 90 $PUSH %r17,`-$FRAME+14*$SIZE_T`(%sp)
96 $PUSH %r18,`-$FRAME+15*$SIZE_T`(%sp) 91 $PUSH %r18,`-$FRAME+15*$SIZE_T`(%sp)
97 92
98 blr %r0,$tbl
99 ldi 3,$t0 93 ldi 3,$t0
100L\$enc_pic 94#ifdef __PIC__
101 andcm $tbl,$t0,$tbl 95 addil LT'L\$AES_Te, %r19
102 ldo L\$AES_Te-L\$enc_pic($tbl),$tbl 96 ldw RT'L\$AES_Te(%r1), $tbl
97#else
98 ldil L'L\$AES_Te, %t1
99 ldo R'L\$AES_Te(%t1), $tbl
100#endif
103 101
104 and $inp,$t0,$t0 102 and $inp,$t0,$t0
105 sub $inp,$t0,$inp 103 sub $inp,$t0,$inp
@@ -439,6 +437,7 @@ L\$enc_last
439 xor $acc15,$s3,$s3 437 xor $acc15,$s3,$s3
440 .PROCEND 438 .PROCEND
441 439
440 .section .rodata
442 .ALIGN 64 441 .ALIGN 64
443L\$AES_Te 442L\$AES_Te
444 .WORD 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 443 .WORD 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
@@ -537,6 +536,7 @@ L\$AES_Te
537 .BYTE 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 536 .BYTE 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
538 .BYTE 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 537 .BYTE 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
539 .BYTE 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 538 .BYTE 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
539 .previous
540___ 540___
541 541
542$code.=<<___; 542$code.=<<___;
@@ -564,11 +564,14 @@ AES_decrypt
564 $PUSH %r17,`-$FRAME+14*$SIZE_T`(%sp) 564 $PUSH %r17,`-$FRAME+14*$SIZE_T`(%sp)
565 $PUSH %r18,`-$FRAME+15*$SIZE_T`(%sp) 565 $PUSH %r18,`-$FRAME+15*$SIZE_T`(%sp)
566 566
567 blr %r0,$tbl
568 ldi 3,$t0 567 ldi 3,$t0
569L\$dec_pic 568#ifdef __PIC__
570 andcm $tbl,$t0,$tbl 569 addil LT'L\$AES_Td, %r19
571 ldo L\$AES_Td-L\$dec_pic($tbl),$tbl 570 ldw RT'L\$AES_Td(%r1), $tbl
571#else
572 ldil L'L\$AES_Td, %t1
573 ldo R'L\$AES_Td(%t1), $tbl
574#endif
572 575
573 and $inp,$t0,$t0 576 and $inp,$t0,$t0
574 sub $inp,$t0,$inp 577 sub $inp,$t0,$inp
@@ -908,6 +911,7 @@ L\$dec_last
908 xor $acc15,$s3,$s3 911 xor $acc15,$s3,$s3
909 .PROCEND 912 .PROCEND
910 913
914 .section .rodata
911 .ALIGN 64 915 .ALIGN 64
912L\$AES_Td 916L\$AES_Td
913 .WORD 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 917 .WORD 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
@@ -1006,9 +1010,7 @@ L\$AES_Td
1006 .BYTE 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 1010 .BYTE 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
1007 .BYTE 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 1011 .BYTE 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
1008 .BYTE 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 1012 .BYTE 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
1009 1013 .previous
1010 .data
1011 .STRINGZ "AES for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
1012___ 1014___
1013 1015
1014foreach (split("\n",$code)) { 1016foreach (split("\n",$code)) {
diff --git a/src/lib/libcrypto/arch/hppa/Makefile.inc b/src/lib/libcrypto/arch/hppa/Makefile.inc
index 8744a0bbb8..eb15810f38 100644
--- a/src/lib/libcrypto/arch/hppa/Makefile.inc
+++ b/src/lib/libcrypto/arch/hppa/Makefile.inc
@@ -1,9 +1,7 @@
1# $OpenBSD: Makefile.inc,v 1.11 2023/01/11 16:25:13 deraadt Exp $ 1# $OpenBSD: Makefile.inc,v 1.12 2023/01/13 17:11:41 miod Exp $
2 2
3# hppa-specific libcrypto build rules 3# hppa-specific libcrypto build rules
4 4
5LDADD+= -Wl,--no-execute-only
6
7# aes 5# aes
8SRCS+= aes_core.c aes_cbc.c 6SRCS+= aes_core.c aes_cbc.c
9CFLAGS+= -DAES_ASM 7CFLAGS+= -DAES_ASM
diff --git a/src/lib/libcrypto/bn/asm/parisc-mont.pl b/src/lib/libcrypto/bn/asm/parisc-mont.pl
index 6da9574adf..0c7aff93b9 100644
--- a/src/lib/libcrypto/bn/asm/parisc-mont.pl
+++ b/src/lib/libcrypto/bn/asm/parisc-mont.pl
@@ -126,12 +126,7 @@ $fni="%fr9"; $fnm0="%fr10"; $fnm1="%fr11";
126 126
127$code=<<___; 127$code=<<___;
128 .LEVEL $LEVEL 128 .LEVEL $LEVEL
129#if 0
130 .SPACE \$TEXT\$
131 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
132#else
133 .text 129 .text
134#endif
135 130
136 .EXPORT bn_mul_mont,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR 131 .EXPORT bn_mul_mont,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR
137 .ALIGN 64 132 .ALIGN 64
@@ -214,7 +209,7 @@ $code.=<<___;
214 flddx $idx($np),${fni} ; np[2,3] 209 flddx $idx($np),${fni} ; np[2,3]
215___ 210___
216$code.=<<___ if ($BN_SZ==4); 211$code.=<<___ if ($BN_SZ==4);
217#ifndef __OpenBSD__ 212#ifdef __LP64__
218 mtctl $hi0,%cr11 ; $hi0 still holds 31 213 mtctl $hi0,%cr11 ; $hi0 still holds 31
219 extrd,u,*= $hi0,%sar,1,$hi0 ; executes on PA-RISC 1.0 214 extrd,u,*= $hi0,%sar,1,$hi0 ; executes on PA-RISC 1.0
220 b L\$parisc11 215 b L\$parisc11
@@ -881,9 +876,6 @@ L\$abort
881 .EXIT 876 .EXIT
882 $POPMB -$FRAME(%sp),%r3 877 $POPMB -$FRAME(%sp),%r3
883 .PROCEND 878 .PROCEND
884
885 .data
886 .STRINGZ "Montgomery Multiplication for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
887___ 879___
888 880
889# Explicitly encode PA-RISC 2.0 instructions used in this module, so 881# Explicitly encode PA-RISC 2.0 instructions used in this module, so
diff --git a/src/lib/libcrypto/modes/asm/ghash-parisc.pl b/src/lib/libcrypto/modes/asm/ghash-parisc.pl
index 965802d3fa..3f98513105 100644
--- a/src/lib/libcrypto/modes/asm/ghash-parisc.pl
+++ b/src/lib/libcrypto/modes/asm/ghash-parisc.pl
@@ -81,12 +81,7 @@ $rem2="%r6"; # used in PA-RISC 2.0 code
81 81
82$code.=<<___; 82$code.=<<___;
83 .LEVEL $LEVEL 83 .LEVEL $LEVEL
84#if 0
85 .SPACE \$TEXT\$
86 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
87#else
88 .text 84 .text
89#endif
90 85
91 .EXPORT gcm_gmult_4bit,ENTRY,ARGW0=GR,ARGW1=GR 86 .EXPORT gcm_gmult_4bit,ENTRY,ARGW0=GR,ARGW1=GR
92 .ALIGN 64 87 .ALIGN 64
@@ -108,12 +103,14 @@ $code.=<<___ if ($SIZE_T==4);
108 $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp) 103 $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp)
109___ 104___
110$code.=<<___; 105$code.=<<___;
111 blr %r0,$rem_4bit
112 ldi 3,$rem
113L\$pic_gmult
114 andcm $rem_4bit,$rem,$rem_4bit
115 addl $inp,$len,$len 106 addl $inp,$len,$len
116 ldo L\$rem_4bit-L\$pic_gmult($rem_4bit),$rem_4bit 107#ifdef __PIC__
108 addil LT'L\$rem_4bit, %r19
109 ldw RT'L\$rem_4bit(%r1), $rem_4bit
110#else
111 ldil L'L\$rem_4bit, %t1
112 ldo R'L\$rem_4bit(%t1), $rem_4bit
113#endif
117 ldi 0xf0,$mask0xf0 114 ldi 0xf0,$mask0xf0
118___ 115___
119$code.=<<___ if ($SIZE_T==4); 116$code.=<<___ if ($SIZE_T==4);
@@ -363,12 +360,14 @@ $code.=<<___ if ($SIZE_T==4);
363 $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp) 360 $PUSH %r11,`-$FRAME+8*$SIZE_T`(%sp)
364___ 361___
365$code.=<<___; 362$code.=<<___;
366 blr %r0,$rem_4bit
367 ldi 3,$rem
368L\$pic_ghash
369 andcm $rem_4bit,$rem,$rem_4bit
370 addl $inp,$len,$len 363 addl $inp,$len,$len
371 ldo L\$rem_4bit-L\$pic_ghash($rem_4bit),$rem_4bit 364#ifdef __PIC__
365 addil LT'L\$rem_4bit, %r19
366 ldw RT'L\$rem_4bit(%r1), $rem_4bit
367#else
368 ldil L'L\$rem_4bit, %t1
369 ldo R'L\$rem_4bit(%t1), $rem_4bit
370#endif
372 ldi 0xf0,$mask0xf0 371 ldi 0xf0,$mask0xf0
373___ 372___
374$code.=<<___ if ($SIZE_T==4); 373$code.=<<___ if ($SIZE_T==4);
@@ -619,15 +618,15 @@ $code.=<<___;
619 $POPMB -$FRAME(%sp),%r3 618 $POPMB -$FRAME(%sp),%r3
620 .PROCEND 619 .PROCEND
621 620
621 .section .rodata
622 .ALIGN 64 622 .ALIGN 64
623L\$rem_4bit 623L\$rem_4bit
624 .WORD `0x0000<<16`,0,`0x1C20<<16`,0,`0x3840<<16`,0,`0x2460<<16`,0 624 .WORD `0x0000<<16`,0,`0x1C20<<16`,0,`0x3840<<16`,0,`0x2460<<16`,0
625 .WORD `0x7080<<16`,0,`0x6CA0<<16`,0,`0x48C0<<16`,0,`0x54E0<<16`,0 625 .WORD `0x7080<<16`,0,`0x6CA0<<16`,0,`0x48C0<<16`,0,`0x54E0<<16`,0
626 .WORD `0xE100<<16`,0,`0xFD20<<16`,0,`0xD940<<16`,0,`0xC560<<16`,0 626 .WORD `0xE100<<16`,0,`0xFD20<<16`,0,`0xD940<<16`,0,`0xC560<<16`,0
627 .WORD `0x9180<<16`,0,`0x8DA0<<16`,0,`0xA9C0<<16`,0,`0xB5E0<<16`,0 627 .WORD `0x9180<<16`,0,`0x8DA0<<16`,0,`0xA9C0<<16`,0,`0xB5E0<<16`,0
628 .previous
628 629
629 .data
630 .STRINGZ "GHASH for PA-RISC, GRYPTOGAMS by <appro\@openssl.org>"
631 .ALIGN 64 630 .ALIGN 64
632___ 631___
633 632
diff --git a/src/lib/libcrypto/rc4/asm/rc4-parisc.pl b/src/lib/libcrypto/rc4/asm/rc4-parisc.pl
index 7e7974430a..24e3e0c30b 100644
--- a/src/lib/libcrypto/rc4/asm/rc4-parisc.pl
+++ b/src/lib/libcrypto/rc4/asm/rc4-parisc.pl
@@ -137,12 +137,7 @@ ___
137 137
138$code=<<___; 138$code=<<___;
139 .LEVEL $LEVEL 139 .LEVEL $LEVEL
140#if 0
141 .SPACE \$TEXT\$
142 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
143#else
144 .text 140 .text
145#endif
146 141
147 .EXPORT RC4,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR 142 .EXPORT RC4,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR,ARGW3=GR
148RC4 143RC4
@@ -297,20 +292,22 @@ RC4_options
297 .PROC 292 .PROC
298 .CALLINFO NO_CALLS 293 .CALLINFO NO_CALLS
299 .ENTRY 294 .ENTRY
300 blr %r0,%r28 295#ifdef __PIC__
301 ldi 3,%r1 296 addil LT'L\$opts, %r19
302L\$pic 297 ldw RT'L\$opts(%r1), %r28
303 andcm %r28,%r1,%r28 298#else
299 ldil L'L\$opts, %t1
300 ldo R'L\$opts(%t1), %r28
301#endif
304 bv (%r2) 302 bv (%r2)
305 .EXIT 303 .EXIT
306 ldo L\$opts-L\$pic(%r28),%r28 304 nop
307 .PROCEND 305 .PROCEND
308 306
309 .data 307 .section .rodata
310 .ALIGN 8 308 .ALIGN 8
311L\$opts 309L\$opts
312 .STRINGZ "rc4(4x,`$SZ==1?"char":"int"`)" 310 .STRINGZ "rc4(4x,`$SZ==1?"char":"int"`)"
313 .STRINGZ "RC4 for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
314___ 311___
315$code =~ s/\`([^\`]*)\`/eval $1/gem; 312$code =~ s/\`([^\`]*)\`/eval $1/gem;
316$code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4); 313$code =~ s/cmpib,\*/comib,/gm if ($SIZE_T==4);
diff --git a/src/lib/libcrypto/sha/asm/sha1-parisc.pl b/src/lib/libcrypto/sha/asm/sha1-parisc.pl
index 6cb4656422..783c26272b 100644
--- a/src/lib/libcrypto/sha/asm/sha1-parisc.pl
+++ b/src/lib/libcrypto/sha/asm/sha1-parisc.pl
@@ -146,12 +146,7 @@ ___
146 146
147$code=<<___; 147$code=<<___;
148 .LEVEL $LEVEL 148 .LEVEL $LEVEL
149#if 0
150 .SPACE \$TEXT\$
151 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
152#else
153 .text 149 .text
154#endif
155 150
156 .EXPORT sha1_block_data_order,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR 151 .EXPORT sha1_block_data_order,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
157sha1_block_data_order 152sha1_block_data_order
@@ -254,9 +249,6 @@ $code.=<<___;
254 .EXIT 249 .EXIT
255 $POPMB -$FRAME(%sp),%r3 250 $POPMB -$FRAME(%sp),%r3
256 .PROCEND 251 .PROCEND
257
258 .data
259 .STRINGZ "SHA1 block transform for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
260___ 252___
261 253
262$code =~ s/\`([^\`]*)\`/eval $1/gem; 254$code =~ s/\`([^\`]*)\`/eval $1/gem;
diff --git a/src/lib/libcrypto/sha/asm/sha512-parisc.pl b/src/lib/libcrypto/sha/asm/sha512-parisc.pl
index 0704302d2a..42832e29f1 100755
--- a/src/lib/libcrypto/sha/asm/sha512-parisc.pl
+++ b/src/lib/libcrypto/sha/asm/sha512-parisc.pl
@@ -159,13 +159,9 @@ ___
159 159
160$code=<<___; 160$code=<<___;
161 .LEVEL $LEVEL 161 .LEVEL $LEVEL
162#if 0
163 .SPACE \$TEXT\$
164 .SUBSPA \$CODE\$,QUAD=0,ALIGN=8,ACCESS=0x2C,CODE_ONLY
165#else
166 .text 162 .text
167#endif
168 163
164 .section .rodata
169 .ALIGN 64 165 .ALIGN 64
170L\$table 166L\$table
171___ 167___
@@ -230,6 +226,7 @@ $code.=<<___ if ($SZ==4);
230 .WORD 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 226 .WORD 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
231___ 227___
232$code.=<<___; 228$code.=<<___;
229 .previous
233 230
234 .EXPORT $func,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR 231 .EXPORT $func,ENTRY,ARGW0=GR,ARGW1=GR,ARGW2=GR
235 .ALIGN 64 232 .ALIGN 64
@@ -262,11 +259,13 @@ $func
262 $PUSH $inp,`-$FRAME_MARKER-3*$SIZE_T`(%sp) 259 $PUSH $inp,`-$FRAME_MARKER-3*$SIZE_T`(%sp)
263 $PUSH $ctx,`-$FRAME_MARKER-2*$SIZE_T`(%sp) 260 $PUSH $ctx,`-$FRAME_MARKER-2*$SIZE_T`(%sp)
264 261
265 blr %r0,$Tbl 262#ifdef __PIC__
266 ldi 3,$t1 263 addil LT'L\$table, %r19
267L\$pic 264 ldw RT'L\$table(%r1), $Tbl
268 andcm $Tbl,$t1,$Tbl ; wipe privilege level 265#else
269 ldo L\$table-L\$pic($Tbl),$Tbl 266 ldil L'L\$table, %t1
267 ldo R'L\$table(%t1), $Tbl
268#endif
270___ 269___
271$code.=<<___ if ($SZ==8 && $SIZE_T==4); 270$code.=<<___ if ($SZ==8 && $SIZE_T==4);
272#ifndef __OpenBSD__ 271#ifndef __OpenBSD__
@@ -692,9 +691,6 @@ $code.=<<___;
692 .EXIT 691 .EXIT
693 $POPMB -$FRAME(%sp),%r3 692 $POPMB -$FRAME(%sp),%r3
694 .PROCEND 693 .PROCEND
695
696 .data
697 .STRINGZ "SHA`64*$SZ` block transform for PA-RISC, CRYPTOGAMS by <appro\@openssl.org>"
698___ 694___
699 695
700# Explicitly encode PA-RISC 2.0 instructions used in this module, so 696# Explicitly encode PA-RISC 2.0 instructions used in this module, so