Closed
Bug 213313
Opened 21 years ago
Closed 21 years ago
shlibsign exception using VC++ 2003
Categories
(NSS :: Libraries, defect)
Tracking
(Not tracked)
RESOLVED
FIXED
3.9
People
(Reporter: julien.pierre, Assigned: julien.pierre)
Details
Attachments
(1 file, 1 obsolete file)
664 bytes,
patch
|
nelson
:
superreview+
|
Details | Diff | Splinter Review |
I installed MS Visual Studio .NET 2003 from MSDN on my system and tried to build NSS. I got the following error : gmake[3]: Leaving directory `C:/nss/39/mozilla/security/nss/cmd/shlibsign/mangl ' WIN954.0_DBG.OBJ/shlibsign -v -i ../../../../dist/WIN954.0_DBG.OBJ/lib/softokn3 dll Generating DSA Key Pair....[1] + Done(136) ? 2356 Floating point exception WIN954.0_DBG.OBJ/shlibsign gmake[2]: *** [../../../../dist/WIN954.0_DBG.OBJ/lib/softokn3.chk] Error 136 gmake[2]: Leaving directory `C:/nss/39/mozilla/security/nss/cmd/shlibsign' gmake[1]: *** [libs] Error 2 gmake[1]: Leaving directory `C:/nss/39/mozilla/security/nss/cmd' gmake: *** [libs] Error 2 The same tool works with the previous version of VC7 (2001).
Assignee | ||
Comment 1•21 years ago
|
||
Here is the stack :
softokn3.dll!_s_mpv_div_2dx1d() Line 339 Asm
softokn3.dll!mp_div(const mp_int * a=0x0012f934, const mp_int * b=0x0012f9d0,
mp_int * q=0x00000000, mp_int * r=0x0012f934) Line 1004 + 0x11 C
softokn3.dll!mp_mod(const mp_int * a=0x0012f934, const mp_int * m=0x0012f9d0,
mp_int * c=0x0012f934) Line 1188 + 0x13 C
> softokn3.dll!mpp_pprime(mp_int * a=0x0012f9d0, int nt=18) Line 331 + 0x11 C
softokn3.dll!PQG_ParamGenSeedLen(unsigned int j=8, unsigned int seedBytes=128,
PQGParamsStr * * pParams=0x0012fa38, PQGVerifyStr * * pVfy=0x0012fa3c) Line
474 + 0xb C
softokn3.dll!PQG_ParamGen(unsigned int j=8, PQGParamsStr * *
pParams=0x0012fa38, PQGVerifyStr * * pVfy=0x0012fa3c) Line 366 + 0x15 C
softokn3.dll!nsc_parameter_gen(unsigned long key_type=1, PK11ObjectStr *
key=0x00547f70) Line 2524 + 0x11 C
softokn3.dll!NSC_GenerateKey(unsigned long hSession=1, CK_MECHANISM *
pMechanism=0x0012fbbc, CK_ATTRIBUTE * pTemplate=0x0012fbd8, unsigned long
ulCount=1, unsigned long * phKey=0x0012fbd4) Line 2891 + 0x10 C
nss3.dll!PK11_PQG_ParamGenSeedLen(unsigned int j=8, unsigned int seedBytes=0,
PQGParamsStr * * pParams=0x0012fd00, PQGVerifyStr * * pVfy=0x0012fd20) Line
105 + 0x31 C
nss3.dll!PK11_PQG_ParamGen(unsigned int j=8, PQGParamsStr * *
pParams=0x0012fd00, PQGVerifyStr * * pVfy=0x0012fd20) Line 187 + 0x13 C
shlibsign.exe!main(int argc=4, char * * argv=0x00532dc0) Line 232 + 0x1a C
shlibsign.exe!mainCRTStartup() Line 398 + 0xe C
KERNEL32.DLL!77ea847c()
The failure is in the assembly code in mpi_x86.asm , on a "div ebx".
Perhaps the calling conventions changed in VC++ 2003 ?
Assignee | ||
Updated•21 years ago
|
Summary: shlibsign won't run using VC++ 2003 → shlibsign exception using VC++ 2003
Comment 2•21 years ago
|
||
I seem to recall that the floating point exception and the divide-by-zero exceptions are one and the same. Can you tell by looking at the caller whether it passed in a zero divisor or not? I'll be happy to come by and take a look if you want.
Assignee | ||
Comment 3•21 years ago
|
||
Had Nelson look at it. The problem was that mp_digit was considered to be a 64-bit integer rather than 32-bit using VC++ 2003 . Forcing it to 32-bits using a define worked and allowed the signing to pass, as well as all.sh .
Assignee | ||
Comment 4•21 years ago
|
||
Assignee | ||
Updated•21 years ago
|
Attachment #128190 -
Flags: superreview?(nelsonb)
Attachment #128190 -
Flags: review?(wtc)
Comment 5•21 years ago
|
||
Comment on attachment 128190 [details] [diff] [review] Patch to make mp_digit 32 bits with MS VC++ .net 2003 Julien, to review this patch I'd like to know why mp_digit becomes 64-bit in VC++ 2003. Looking at mpi.h, I think this is because VC++ 2003 adds the support of the long long type. Could you verify this? mpi.h has three possible typedefs for mp_digit. Could you find out which typedef is used if this patch is not applied? I guess it's the second one: typedef unsigned long long mp_digit; and it is because one of the following macros is defined in VC++ 2003's header file <limits.h>: ULONG_LONG_MAX ULLONG_MAX ULONGLONG_MAX Thanks.
Assignee | ||
Comment 6•21 years ago
|
||
Yes, indeed, without the patch, mp_digit is defined as typedef unsigned long long mp_digit; This is caused by ULLONG_MAX being defined in limits.h : C:\MSVSNET2003\Vc7\include>grep -i ullong_max *.* limits.h:#define ULLONG_MAX 0xffffffffffffffff /*maximum unsigned __int64 value */
Comment 7•21 years ago
|
||
Comment on attachment 128190 [details] [diff] [review] Patch to make mp_digit 32 bits with MS VC++ .net 2003 Thank you, Julien. r=wtc.
Attachment #128190 -
Flags: review?(wtc) → review+
Comment 8•21 years ago
|
||
Comment on attachment 128190 [details] [diff] [review] Patch to make mp_digit 32 bits with MS VC++ .net 2003 In addition to defining -DMP_USE_UINT_DIGIT we also need to define -DMP_NO_MP_WORD With both of those symbols defined, the same code is generated on both old and new MSVC compilers.
Attachment #128190 -
Flags: superreview?(nelsonb) → superreview-
Assignee | ||
Comment 9•21 years ago
|
||
Attachment #128190 -
Attachment is obsolete: true
Comment 10•21 years ago
|
||
Comment on attachment 128201 [details] [diff] [review] update sr=nelsonb
Attachment #128201 -
Flags: superreview+
Assignee | ||
Comment 11•21 years ago
|
||
Checking in Makefile; /cvsroot/mozilla/security/nss/lib/freebl/Makefile,v <-- Makefile new revision: 1.49; previous revision: 1.48 done
Assignee: wtc → jpierre
Assignee | ||
Comment 12•21 years ago
|
||
fixed
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Comment 13•21 years ago
|
||
Can a NSS person get this fix on the NSS_CLIENT_TAG?
Assignee | ||
Comment 14•21 years ago
|
||
Stephen, This bug was fixed on the tip of NSS - the yet unreleased NSS version 3.9. I have updated the target milestone to reflect this. The NSS_CLIENT_TAG is based on NSS version 3.8 . To get this patch into version 3.8 : - please open a separate bug with a target milestone of NSS 3.8 - attach the patch - cc me - send email to drivers@mozilla.org for approval about the new bug, since the Mozilla trunk is currently closed Closing this bug.
Status: REOPENED → RESOLVED
Closed: 21 years ago → 21 years ago
Resolution: --- → FIXED
Target Milestone: --- → 3.9
You need to log in
before you can comment on or make changes to this bug.
Description
•