From: Jan Engelhardt Date: 2018-01-10 23:56:12.245827883 +0100 Should-this-be-upstream: yes Is-it-upstream: not submitted yet The SDL project adds new functions over time, but they completely fail to do the required ABI upkeep - which involves either bumping the SO number or adding symvers. As a result of their lack of ABI upkeep, the ELF system has no way to prohibit a too-modern program being ran against a too-old SDL library, and that leads to bad user experience, because symbols are resolved lazily and can crash the program in the middle. Also note: Leap 15.x has this patch too (in shorter version), so we need to keep all the individual symvers elements even for games/SDL2. --- Makefile.in | 2 sdl2.sym | 319 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 320 insertions(+), 1 deletion(-) Index: SDL2-2.26.0/Makefile.in =================================================================== --- SDL2-2.26.0.orig/Makefile.in +++ SDL2-2.26.0/Makefile.in @@ -136,7 +136,7 @@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_RELEASE = @LT_RELEASE@ LT_REVISION = @LT_REVISION@ -LT_LDFLAGS = -no-undefined -rpath $(libdir) -release $(LT_RELEASE) -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) +LT_LDFLAGS = -no-undefined -rpath $(libdir) -release $(LT_RELEASE) -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) -Wl,--version-script=sdl2.sym all: $(srcdir)/configure Makefile $(objects)/$(TARGET) $(objects)/$(SDLMAIN_TARGET) $(objects)/$(SDLTEST_TARGET) Index: SDL2-2.26.0/sdl2.sym =================================================================== --- /dev/null +++ SDL2-2.26.0/sdl2.sym @@ -0,0 +1,319 @@ +SUSE_2.0.5 { +global: + SDL_DequeueAudio; + SDL_GetHintBoolean; + SDL_RenderSetIntegerScale; + SDL_CreateRGBSurfaceWithFormat; + SDL_CreateRGBSurfaceWithFormatFrom; + SDL_GetDisplayUsableBounds; + SDL_GetWindowBordersSize; + SDL_SetWindowResizable; + SDL_SetWindowOpacity; + SDL_SetWindowModalFor; +}; +SUSE_2.0.6 { +global: + SDL_Vulkan_LoadLibrary; + SDL_Vulkan_GetVkGetInstanceProcAddr; + SDL_Vulkan_GetInstanceExtensions; + SDL_Vulkan_CreateSurface; + SDL_Vulkan_GetDrawableSize; + SDL_Vulkan_UnloadLibrary; + SDL_ComposeCustomBlendMode; + SDL_HasNEON; + SDL_JoystickGetDeviceVendor; + SDL_JoystickGetDeviceProduct; + SDL_JoystickGetDeviceProductVersion; + SDL_JoystickGetDeviceType; + SDL_JoystickGetDeviceInstanceID; + SDL_JoystickGetVendor; + SDL_JoystickGetProduct; + SDL_JoystickGetProductVersion; + SDL_JoystickGetType; + SDL_JoystickGetAxisInitialState; + SDL_GameControllerGetVendor; + SDL_GameControllerGetProduct; + SDL_GameControllerGetProductVersion; + SDL_GameControllerNumMappings; + SDL_GameControllerMappingForIndex; + SDL_LoadFile; + SDL_LoadFile_RW; + SDL_DuplicateSurface; +} SUSE_2.0.5; +SUSE_2.0.7 { +global: + SDL_NewAudioStream; + SDL_AudioStreamPut; + SDL_AudioStreamGet; + SDL_AudioStreamAvailable; + SDL_AudioStreamFlush; + SDL_AudioStreamClear; + SDL_FreeAudioStream; + SDL_GetMemoryFunctions; + SDL_SetMemoryFunctions; + SDL_GetNumAllocations; + SDL_LockJoystick; + SDL_UnlockJoystick; + SDL_SetEventFilter; + SDL_GetEventFilter; + SDL_AddEventWatch; + SDL_DelEventWatch; +} SUSE_2.0.6; +SUSE_2.0.8 { +global: + SDL_fmod; + SDL_log10; + SDL_SetYUVConversionMode; + SDL_GetYUVConversionMode; +} SUSE_2.0.7; +SUSE_2.0.9 { +global: + SDL_CreateThreadWithStackSize; + SDL_GameControllerGetPlayerIndex; + SDL_GameControllerMappingForDeviceIndex; + SDL_GameControllerRumble; + SDL_GetDisplayOrientation; + SDL_HasAVX512F; + SDL_HasColorKey; + SDL_IsTablet; + SDL_JoystickGetDevicePlayerIndex; + SDL_JoystickGetPlayerIndex; + SDL_JoystickRumble; + SDL_LinuxSetThreadPriority; + SDL_NumSensors; + SDL_SensorClose; + SDL_SensorFromInstanceID; + SDL_SensorGetData; + SDL_SensorGetDeviceInstanceID; + SDL_SensorGetDeviceName; + SDL_SensorGetDeviceNonPortableType; + SDL_SensorGetDeviceType; + SDL_SensorGetInstanceID; + SDL_SensorGetName; + SDL_SensorGetNonPortableType; + SDL_SensorGetType; + SDL_SensorOpen; + SDL_SensorUpdate; + SDL_exp; + SDL_expf; + SDL_wcsdup; +} SUSE_2.0.8; +SUSE_2.0.10 { +global: + SDL_GetTouchDeviceType; + SDL_RWclose; + SDL_RWread; + SDL_RWseek; + SDL_RWsize; + SDL_RWtell; + SDL_RWwrite; + SDL_RenderCopyExF; + SDL_RenderCopyF; + SDL_RenderDrawLineF; + SDL_RenderDrawLinesF; + SDL_RenderDrawPointF; + SDL_RenderDrawPointsF; + SDL_RenderDrawRectF; + SDL_RenderDrawRectsF; + SDL_RenderFillRectF; + SDL_RenderFillRectsF; + SDL_RenderFlush; + SDL_SIMDAlloc; + SDL_SIMDFree; + SDL_SIMDGetAlignment; +} SUSE_2.0.9; +SUSE_2.0.12 { + SDL_HasARMSIMD; + SDL_GameControllerTypeForIndex; + SDL_GameControllerFromPlayerIndex; + SDL_GameControllerGetType; + SDL_GameControllerSetPlayerIndex; + SDL_JoystickFromPlayerIndex; + SDL_JoystickSetPlayerIndex; + SDL_Metal_CreateView; + SDL_Metal_DestroyView; + SDL_SetTextureScaleMode; + SDL_GetTextureScaleMode; + SDL_LockTextureToSurface; + SDL_wcsdup; + SDL_wcsstr; + SDL_wcsncmp; + SDL_strtokr; + SDL_GetAndroidSDKVersion; + SDL_OnApplicationWillTerminate; + SDL_OnApplicationDidReceiveMemoryWarning; + SDL_OnApplicationWillResignActive; + SDL_OnApplicationDidEnterBackground; + SDL_OnApplicationWillEnterForeground; + SDL_OnApplicationDidBecomeActive; + SDL_OnApplicationDidChangeStatusBarOrientation; + SDLTest_CommonUsage; +} SUSE_2.0.10; +SUSE_2.0.14 { + SDL_SIMDRealloc; + SDL_GetErrorMsg; + SDL_GameControllerGetSerial; + SDL_GameControllerHasAxis; + SDL_GameControllerHasButton; + SDL_GameControllerGetNumTouchpads; + SDL_GameControllerGetNumTouchpadFingers; + SDL_GameControllerGetTouchpadFinger; + SDL_GameControllerHasSensor; + SDL_GameControllerSetSensorEnabled; + SDL_GameControllerIsSensorEnabled; + SDL_GameControllerGetSensorData; + SDL_GameControllerRumbleTriggers; + SDL_GameControllerHasLED; + SDL_GameControllerSetLED; + SDL_JoystickAttachVirtual; + SDL_JoystickDetachVirtual; + SDL_JoystickDetachVirtual; + SDL_JoystickSetVirtualAxis; + SDL_JoystickSetVirtualButton; + SDL_JoystickSetVirtualHat; + SDL_JoystickGetSerial; + SDL_JoystickRumbleTriggers; + SDL_JoystickHasLED; + SDL_JoystickSetLED; + SDL_GetPreferredLocales; + SDL_Metal_GetLayer; + SDL_Metal_GetDrawableSize; + SDL_OpenURL; + SDL_LockSensors; + SDL_UnlockSensors; + SDL_crc32; + SDL_wcscasecmp; + SDL_wcsncasecmp; + SDL_trunc; + SDL_truncf; + SDL_HasSurfaceRLE; + SDL_AndroidRequestPermission; +} SUSE_2.0.12; +SUSE_2.0.16 { + SDL_GetAudioDeviceSpec; + SDL_GameControllerGetSensorDataRate; + SDL_GameControllerSendEffect; + SDL_JoystickSendEffect; + SDL_UpdateNVTexture; + SDL_isalpha; + SDL_isalnum; + SDL_isblank; + SDL_iscntrl; + SDL_isxdigit; + SDL_ispunct; + SDL_isprint; + SDL_isgraph; + SDL_round; + SDL_roundf; + SDL_lround; + SDL_lroundf; + SDL_SoftStretchLinear; + SDL_RenderGetD3D11Device; + SDL_AndroidShowToast; + SDL_TLSCleanup; + SDL_SetWindowAlwaysOnTop; + SDL_SetWindowKeyboardGrab; + SDL_SetWindowMouseGrab; + SDL_GetWindowKeyboardGrab; + SDL_GetWindowMouseGrab; + SDL_FlashWindow; +} SUSE_2.0.14; +SUSE_2.0.18 { + SDL_GameControllerHasRumble; + SDL_GameControllerHasRumbleTriggers; + SDL_GameControllerGetAppleSFSymbolsNameForButton; + SDL_GameControllerGetAppleSFSymbolsNameForAxis; + SDL_hid_init; + SDL_hid_exit; + SDL_hid_device_change_count; + SDL_hid_enumerate; + SDL_hid_free_enumeration; + SDL_hid_open; + SDL_hid_open_path; + SDL_hid_write; + SDL_hid_read_timeout; + SDL_hid_read; + SDL_hid_set_nonblocking; + SDL_hid_send_feature_report; + SDL_hid_get_feature_report; + SDL_hid_close; + SDL_hid_get_manufacturer_string; + SDL_hid_get_product_string; + SDL_hid_get_serial_number_string; + SDL_hid_get_indexed_string; + SDL_hid_ble_scan; + SDL_JoystickHasRumble; + SDL_JoystickHasRumbleTriggers; + SDL_RegisterApp; + SDL_SetTextureUserData; + SDL_GetTextureUserData; + SDL_RenderWindowToLogical; + SDL_RenderLogicalToWindow; + SDL_RenderGeometry; + SDL_RenderGeometryRaw; + SDL_RenderSetVSync; + SDL_RWFromFP; + SDL_asprintf; + SDL_vasprintf; + SDL_atan2; + SDL_atan2f; + SDL_PremultiplyAlpha; + SDL_LinuxSetThreadPriorityAndPolicy; + SDL_GetTicks64; + SDL_GetWindowICCProfile; + SDL_SetWindowMouseRect; + SDL_GetWindowMouseRect; +} SUSE_2.0.16; +SUSE_2.0.22 { + SDL_ClearComposition; + SDL_IsTextInputShown; + SDL_HasIntersectionF; + SDL_IntersectFRect; + SDL_UnionFRect; + SDL_EncloseFPoints; + SDL_IntersectFRectAndLine; + SDL_RenderGetWindow; + SDL_AndroidSendMessage; + SDL_GetTouchName; +} SUSE_2.0.18; +SUSE_2.24.0 { + SDL_GetDefaultAudioInfo; + SDL_HasLSX; + SDL_HasLASX; + SDL_GameControllerPathForIndex; + SDL_GameControllerPath; + SDL_GameControllerGetFirmwareVersion; + SDL_GUIDToString; + SDL_GUIDFromString; + SDL_ResetHint; + SDL_JoystickPathForIndex; + SDL_JoystickAttachVirtualEx; + SDL_JoystickPath; + SDL_JoystickGetFirmwareVersion; + SDL_ResetKeyboard; + SDL_SetTextInputRect; + SDL_GDKRunApp; + SDL_GetOriginalMemoryFunctions; + SDL_qsort; + SDL_bsearch; + SDL_crc16; + SDL_utf8strnlen; + SDL_RenderGetD3D12Device; + SDL_iPhoneSetAnimationCallback; + SDL_GDKGetTaskQueue; + SDL_GetPointDisplayIndex; + SDL_GetRectDisplayIndex; +} SUSE_2.0.22; +SUSE_2.26.0 { + SDL_SetPrimarySelectionText; + SDL_GetPrimarySelectionText; + SDL_HasPrimarySelectionText; + SDL_GameControllerGetSensorDataWithTimestamp; + SDL_ResetHints; + SDL_GetJoystickGUIDInfo; + SDL_SensorGetData; + SDL_SensorGetDataWithTimestamp; + SDL_SensorClose; + SDL_strcasestr; + SDL_GetWindowSizeInPixels; +} SUSE_2.24.0;