Printable Version Enter a New Search
Bug ID 6478684
Synopsis isainfo/cpuid reports pause instruction not supported on amd64
State 3-Accepted (Yes, that is a problem)
Category:Subcategory kernel:amd64
Keywords
Responsible Engineer Kuriakose Kuruvilla
Reported Against
Duplicate Of
Introduced In
Commit to Fix
Fixed In
Release Fixed
Related Bugs
Submit Date 5-October-2006
Last Update Date 21-May-2007
Description
An application that sucessfully executed when built with Studio 10 fails to run when built with Studio 11. This is becuase Studio 11 sets the hwcap fields in the exuctable and ld.so.1 checks these before running the executable. This particular executable includes some assembler and makes use of the pause instruction, it fails with the following error

hardware capability unsupported: 0x2000 [ PAUSE ]

The system is a V40z with 4 x 2.4Ghz Opteron 850, running Solaris 10 1/06 with kernel patch 118844-30, on this system pargs -x reports

AT_SUN_HWCAP    0x00001ff7 SSE2 | SSE | FXSR | AMD_3DNowx | AMD_3DNow | AMD_MMX | MMX | CMOV | AMD_SYSC | CX8 | TSC | FPU

An X4200 with a similar level of patches reports the same (although it should report SSE3 support) while an Ultra with Solaris 10 6/06 and patch 118855-19 reports

AT_SUN_HWCAP    0x00005ff7 SSE3 | SSE2 | SSE | FXSR | AMD_3DNowx | AMD_3DNow | AMD_MMX | MMX | CMOV | AMD_SYSC | CX8 | TSC | FPU
 
None of them report support for the pause instruction. CR 6391358 shows the output from isainfo on an X4200 with Solaris 10 1/06 and patch 118844-26

isainfo -v
64-bit amd64 applications
        pause sse2 sse fxsr amd_3dnowx amd_3dnow amd_mmx mmx cmov amd_sysc cx8 
        tsc fpu 
32-bit i386 applications
        pause sse2 sse fxsr amd_3dnowx amd_3dnow amd_mmx mmx cmov amd_sysc cx8 
        tsc fp

Similarly CR 6375018 shows the following pargs -x output that indicates support for the pause instruction (but I can't easily determine the OS patch revision from it)

AT_SUN_HWCAP    0x00003ff7 PAUSE | SSE2 | SSE | FXSR | AMD_3DNowx | AMD_3DNow | AMD_MMX | MMX | CMOV | AMD_SYSC | CX8 | TSC | FPU

Somewhere between patch 118844-26 and 118844-30 the cpuid code stopped reporting support for the pause instruction on AMD64 platforms (and possibly others).
Work Around
Can use a ld and a mapfile to override (strip all the hwcap bits) in the executable or at least the object files that have assembler in them. Are there any unwanted side effects from doing this?
Comments
N/A