hrydgard / ppsspp

A PSP emulator for Android, Windows, Mac and Linux, written in C++. Want to contribute? Join us on Discord at https://discord.gg/5NJB6dD or just send pull requests / issues. For discussion use the forums at forums.ppsspp.org.
https://www.ppsspp.org
Other
11.02k stars 2.15k forks source link

armhf linux: Build Fails at SavedataParam.cpp #13156

Open clort81 opened 4 years ago

clort81 commented 4 years ago

What happens?

Build fails.

hardware, Motorola Droid 4, armhf, cortex-a9

operating syste, devuan + maemo-leste

PPSSPP version, git master

gcc version 8.3.0 (Debian 8.3.0-6) cmake version 3.13.4

libsdl2-dev is already the newest version (2.0.9+dfsg1-1). libvulkan-dev is already the newest version (1.1.97-2). libgl1-mesa-dev is already the newest version (20.2.0-1+2m7.1)

uname -a, Linux ml1 5.7.0 #1 SMP PREEMPT Sun Jul 12 18:58:38 UTC 2020 armv7l GNU/Linux

a plain 'following instructions' build fails with

[ 57%] Building CXX object CMakeFiles/Core.dir/Core/Dialog/PSPPlaceholderDialog.cpp.o
[ 57%] Building CXX object CMakeFiles/Core.dir/Core/Dialog/PSPSaveDialog.cpp.o
[ 58%] Building CXX object CMakeFiles/Core.dir/Core/Dialog/PSPScreenshotDialog.cpp.o
[ 58%] Building CXX object CMakeFiles/Core.dir/Core/Dialog/SavedataParam.cpp.o
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp: In member function ‘int SavedataParam::DetermineCryptMode(const SceUtilitySavedataParam*) const’:
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp:653:35: error: ‘sceKernelGetCompiledSdkVersion’ was not declared in this scope
   decryptMode = GetSDKMainVersion(sceKernelGetCompiledSdkVersion()) >= 4 ? 5 : 1;
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp:653:35: note: suggested alternative: ‘sceKernelDevkitVersion’
   decryptMode = GetSDKMainVersion(sceKernelGetCompiledSdkVersion()) >= 4 ? 5 : 1;
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                   sceKernelDevkitVersion
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp:656:35: error: ‘sceKernelGetCompiledSdkVersion’ was not declared in this scope
   decryptMode = GetSDKMainVersion(sceKernelGetCompiledSdkVersion()) >= 4 ? 5 : 3;
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp:656:35: note: suggested alternative: ‘sceKernelDevkitVersion’
   decryptMode = GetSDKMainVersion(sceKernelGetCompiledSdkVersion()) >= 4 ? 5 : 3;
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                   sceKernelDevkitVersion
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp: In member function ‘int SavedataParam::GetFilesList(SceUtilitySavedataParam*)’:
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp:1185:6: error: ‘sceKernelGetCompiledSdkVersion’ was not declared in this scope
  if (sceKernelGetCompiledSdkVersion() >= 0x02060000) {
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/pr/emu/ppsspp/Core/Dialog/SavedataParam.cpp:1185:6: note: suggested alternative: ‘sceKernelDevkitVersion’
  if (sceKernelGetCompiledSdkVersion() >= 0x02060000) {
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      sceKernelDevkitVersion
At global scope:
cc1plus: warning: unrecognized command line option ‘-Wno-tautological-pointer-compare’
cc1plus: warning: unrecognized command line option ‘-Wno-deprecated-register’
make[2]: *** [CMakeFiles/Core.dir/build.make:1129: CMakeFiles/Core.dir/Core/Dialog/SavedataParam.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:410: CMakeFiles/Core.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
unknownbrackets commented 4 years ago

That's strange:

https://github.com/hrydgard/ppsspp/blob/c9c060fcdbd222f7c64fd47a3f70a54fefa3a874/Core/Dialog/SavedataParam.cpp#L30 https://github.com/hrydgard/ppsspp/blob/fe1807b2ecc2558ea951e81396a7e9e19d23d299/Core/HLE/sceKernelMemory.h#L61

sceKernelGetCompiledSdkVersion() should be perfectly well defined in scope. It's not using any floats so it ought not be affected by hard float or otherwise. Does git status show no differences?

-[Unknown]

clort81 commented 4 years ago

A fresh clone built fine up to final link!

On aarch64 (jetson nano)

[100%] Linking CXX executable PPSSPPSDL
/usr/bin/ld: ffmpeg/linux/aarch64/lib/libavformat.a(avienc.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `__stack_chk_guard@@GLIBC_2.17' which may bind externally can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: ffmpeg/linux/aarch64/lib/libavformat.a(avienc.o)(.text+0xc): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `__stack_chk_guard@@GLIBC_2.17'
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/PPSSPPSDL.dir/build.make:582: PPSSPPSDL] Error 1
make[2]: Leaving directory '/media/sd/pcbak2/Projects/Emulators/ppsspp'
make[1]: *** [CMakeFiles/Makefile2:680: CMakeFiles/PPSSPPSDL.dir/all] Error 2
make[1]: Leaving directory '/media/sd/pcbak2/Projects/Emulators/ppsspp'
make: *** [Makefile:130: all] Error 2

On aarch64 i solved by

On armhf it was just

the armhf build is using LIBGL by default and segfaulting with

user@ml1:/big/src/ppsspp$ ./PPSSPPSDL 
LIBGL: Initialising gl4es
LIBGL: v1.1.4 built on Jul  7 2020 21:45:49
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
PVR:(Warning): LoadWSModule: Window system module libpvrws_KMS.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Error): PVRSRVAllocDeviceMem: Error 1 returned [934, /bridged_pvr_glue.c]
PVR:(Error): ERROR - Failed to alloc mem for CCB! [114, /sgxutils_client.c]
PVR:(Error): Couldn't create render context [193, /srv_sgx.c]
PVR:(Error): SGXDestroyTransferContext: Called with NULL context.  Ignoring [1958, /sgxtransfer_context.c]
PVR:(Error): SGXDestroyRenderContext: NULL handle [52, /sgxrender_context.c]
PVR:(Error): Couldn't destroy render context [247, /srv_sgx.c]
LIBGL: Error while gathering supported extension (eglInitialize: EGL_BAD_ALLOC), default to none
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
Segmentation fault

Maybe i can force an opengl-es build, ignoring ptitseb's gl4es libraries? defaults

unknownbrackets commented 4 years ago

Do you have both USING_EGL and USING_GLES2? What was your full cmake command?

-[Unknown]

clort81 commented 4 years ago

managed to force the glesv2 by moving-out my libGL.so

USING_EGL and USING_GLES2 are both ON

cmake was cmake /big/src/ppsspp

Running gets me.

user@ml1:/big/src/ppsspp$ ./PPSSPPSDL 
I: VulkanLoader.cpp:268: VulkanMayBeAvailable: Device allowed ('SDL:Linux')
I: VulkanLoader.cpp:275: VulkanMayBeAvailable: Library loaded ('libvulkan.so')
I: VulkanLoader.cpp:328: VulkanMayBeAvailable: Enumerating instance extensions
I: VulkanLoader.cpp:339: VulkanMayBeAvailable: Instance extension count: 2
I: VulkanLoader.cpp:347: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_report (00000009)
I: VulkanLoader.cpp:347: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_utils (00000001)
E: VulkanLoader.cpp:365: Surface extension not found
DEBUG: Vulkan is not available, not using Vulkan.
LIBGL: Initialising gl4es
LIBGL: v1.1.4 built on Jul  7 2020 21:45:49
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
PVR:(Warning): LoadWSModule: Window system module libpvrws_KMS.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Error): PVRSRVAllocDeviceMem: Error 1 returned [934, /bridged_pvr_glue.c]
PVR:(Error): ERROR - Failed to alloc mem for CCB! [114, /sgxutils_client.c]
PVR:(Error): Couldn't create render context [193, /srv_sgx.c]
PVR:(Error): SGXDestroyTransferContext: Called with NULL context.  Ignoring [1958, /sgxtransfer_context.c]
PVR:(Error): SGXDestroyRenderContext: NULL handle [52, /sgxrender_context.c]
PVR:(Error): Couldn't destroy render context [247, /srv_sgx.c]
LIBGL: Error while gathering supported extension (eglInitialize: EGL_BAD_ALLOC), default to none
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
Segmentation fault

The ccmake settings now are:

                                                     Page 1 of 1
 ARM                              ON                                                                                     
 ARMIPS_REGEXP                    OFF                                                                                    
 ARMV7                            ON                                                                                     
 BUILD_EXTERNAL                   ON                                                                                     
 BUILD_SHARED_LIBS                OFF                                                                                    
 BUILD_TESTING                    ON                                                                                     
 CCACHE_FOUND                     /usr/bin/ccache                                                                        
 CMAKE_BUILD_TYPE                                                                                                        
 CMAKE_INSTALL_PREFIX             /usr/local                                                                             
 ENABLE_CTEST                     ON                                                                                     
 ENABLE_GLSLANG_BINARIES          OFF                                                                                    
 ENABLE_GLSLANG_JS                OFF                                                                                    
 ENABLE_HLSL                      ON                                                                                     
 ENABLE_OPT                       ON                                                                                     
 ENABLE_PCH                       ON                                                                                     
 ENABLE_RTTI                      OFF                                                                                    
 ENABLE_SPVREMAPPER               ON                                                                                     
 FFmpeg_INCLUDE_avcodec           /big/src/ppsspp/ffmpeg/linux/armv7/include                                             
 FFmpeg_INCLUDE_avdevice          FFmpeg_INCLUDE_avdevice-NOTFOUND                                                       
 FFmpeg_INCLUDE_avfilter          FFmpeg_INCLUDE_avfilter-NOTFOUND                                                       
 FFmpeg_INCLUDE_avformat          /big/src/ppsspp/ffmpeg/linux/armv7/include                                             
 FFmpeg_INCLUDE_avutil            /big/src/ppsspp/ffmpeg/linux/armv7/include                                             
 FFmpeg_INCLUDE_postproc          FFmpeg_INCLUDE_postproc-NOTFOUND                                                       
 FFmpeg_INCLUDE_swresample        /big/src/ppsspp/ffmpeg/linux/armv7/include                                             
 FFmpeg_INCLUDE_swscale           /big/src/ppsspp/ffmpeg/linux/armv7/include                                             
 FFmpeg_LIBRARY_avcodec           /big/src/ppsspp/ffmpeg/linux/armv7/lib/libavcodec.a                                    
 FFmpeg_LIBRARY_avdevice          FFmpeg_LIBRARY_avdevice-NOTFOUND                                                       
 FFmpeg_LIBRARY_avfilter          FFmpeg_LIBRARY_avfilter-NOTFOUND                                                       
 FFmpeg_LIBRARY_avformat          /big/src/ppsspp/ffmpeg/linux/armv7/lib/libavformat.a                                   
 FFmpeg_LIBRARY_avutil            /big/src/ppsspp/ffmpeg/linux/armv7/lib/libavutil.a                                     
 FFmpeg_LIBRARY_postproc          FFmpeg_LIBRARY_postproc-NOTFOUND                                                       
 FFmpeg_LIBRARY_swresample        /big/src/ppsspp/ffmpeg/linux/armv7/lib/libswresample.a                                 
 FFmpeg_LIBRARY_swscale           /big/src/ppsspp/ffmpeg/linux/armv7/lib/libswscale.a                                    
 HEADLESS                         OFF                                                                                    
 LIBRETRO                         OFF                                                                                    
 LIBZIP_INCLUDE_DIR               /usr/include                                                                           
 LIBZIP_LIBRARY                   /usr/lib/arm-linux-gnueabihf/libzip.so                                                 
 MIPS                             OFF                                                                                    
 MOBILE_DEVICE                    OFF                                                                                    
 SIMULATOR                        OFF                                                                                    
 SKIP_GLSLANG_INSTALL             OFF                                                                                    
 SPIRV_CROSS_EXCEPTIONS_TO_ASSE   ON                                                                                     
 UNITTEST                         OFF                                                                                    
 USE_ADDRESS_SANITIZER            OFF                                                                                    
 USE_CCACHE                       OFF                                                                                    
 USE_DISCORD                      ON                                                                                     
 USE_FFMPEG                       ON                                                                                     
 USE_SYSTEM_FFMPEG                OFF                                                                                    
 USE_SYSTEM_LIBZIP                OFF                                                                                    
 USE_SYSTEM_SNAPPY                OFF                                                                                    
 USE_WAYLAND_WSI                  OFF                                                                                    
 USING_EGL                        ON                                                                                     
 USING_FBDEV                      OFF                                                                                    
 USING_GLES2                      ON                                                                                     
 USING_QT_UI                      OFF                                                                                    
 USING_X11_VULKAN                 OFF                                                                                    
 X86                              OFF                                                                                    
 X86_64                           OFF                                                                                    
 pkgcfg_lib_SDL2PC_SDL2           /usr/lib/arm-linux-gnueabihf/libSDL2.so 

running in GDB gets me following backtrace:

(gdb) run
Starting program: /big/src/ppsspp/PPSSPPSDL 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
I: VulkanLoader.cpp:268: VulkanMayBeAvailable: Device allowed ('SDL:Linux')
I: VulkanLoader.cpp:275: VulkanMayBeAvailable: Library loaded ('libvulkan.so')
I: VulkanLoader.cpp:328: VulkanMayBeAvailable: Enumerating instance extensions
I: VulkanLoader.cpp:339: VulkanMayBeAvailable: Instance extension count: 2
I: VulkanLoader.cpp:347: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_report (00000009)
I: VulkanLoader.cpp:347: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_utils (00000001)
E: VulkanLoader.cpp:365: Surface extension not found
DEBUG: Vulkan is not available, not using Vulkan.
LIBGL: Initialising gl4es
LIBGL: v1.1.4 built on Jul  7 2020 21:45:49
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
PVR:(Warning): LoadWSModule: Window system module libpvrws_KMS.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Error): PVRSRVAllocDeviceMem: Error 1 returned [934, /bridged_pvr_glue.c]
PVR:(Error): ERROR - Failed to alloc mem for CCB! [114, /sgxutils_client.c]
PVR:(Error): Couldn't create render context [193, /srv_sgx.c]
PVR:(Error): SGXDestroyTransferContext: Called with NULL context.  Ignoring [1958, /sgxtransfer_context.c]
PVR:(Error): SGXDestroyRenderContext: NULL handle [52, /sgxrender_context.c]
PVR:(Error): Couldn't destroy render context [247, /srv_sgx.c]
LIBGL: Error while gathering supported extension (eglInitialize: EGL_BAD_ALLOC), default to none
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]

Program received signal SIGSEGV, Segmentation fault.
0xb660eca4 in omap_device_del () from /usr/lib/arm-linux-gnueabihf/libdrm_omap.so.1
(gdb) bt
#0  0xb660eca4 in omap_device_del () from /usr/lib/arm-linux-gnueabihf/libdrm_omap.so.1
#1  0xb67cd016 in IMGeglTerminate () from /usr/lib/arm-linux-gnueabihf/libIMGegl.so
#2  0xb55b0d32 in ?? () from /usr/lib/arm-linux-gnueabihf/libGL.so.1
#3  0xb54edc74 in ?? () from /usr/lib/arm-linux-gnueabihf/libGL.so.1
#4  0xb6fe1580 in call_init (l=<optimized out>, argc=1, argv=0xbefff294, env=0x1107ce0) at dl-init.c:72
#5  0xb6fe1632 in call_init (env=<optimized out>, argv=<optimized out>, argc=<optimized out>, l=<optimized out>)
    at dl-init.c:30
#6  _dl_init (main_map=main_map@entry=0x1135548, argc=1, argv=0xbefff294, env=0x1107ce0) at dl-init.c:119
#7  0xb6fe3ff8 in dl_open_worker (a=<optimized out>) at dl-open.c:517
#8  0xb6af2dbc in __GI__dl_catch_exception (exception=0xbeffcf84, operate=0xb6fe3d8d <dl_open_worker>, args=0xbeffcf90)
    at dl-error-skeleton.c:196
#9  0xb6fe3afc in _dl_open (file=0xb6f9033c "libGL.so.1", mode=-2147483390, caller_dlopen=0xb6f67d95, 
    nsid=<optimized out>, argc=1, argv=0xbefff294, env=0x1107ce0) at dl-open.c:599
#10 0xb6cffb58 in dlopen_doit (a=0xbeffd20c) at dlopen.c:66
#11 0xb6af2dbc in __GI__dl_catch_exception (exception=exception@entry=0xbeffd1c0, operate=0xb6cffb09 <dlopen_doit>, 
    args=args@entry=0xbeffd20c) at dl-error-skeleton.c:196
#12 0xb6af2e34 in __GI__dl_catch_error (objname=0x11081dc, errstring=0x11081e0, mallocedp=0x11081d8, 
    operate=<optimized out>, args=0xbeffd20c) at dl-error-skeleton.c:215
#13 0xb6d000b8 in _dlerror_run (operate=0xb6cffb09 <dlopen_doit>, args=args@entry=0xbeffd20c) at dlerror.c:163
#14 0xb6cffbd4 in __dlopen (file=0xb6f9033c "libGL.so.1", mode=<optimized out>) at dlopen.c:87
#15 0xb6f67d94 in ?? () from /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) 
clort81 commented 4 years ago

I rebuilt libSDL2 entirely without OpenGL support (only opengles1 and opengles2) and am getting rather interesting results now

user@ml1:/big/src/ppsspp$ ./PPSSPPSDL 
I: VulkanLoader.cpp:268: VulkanMayBeAvailable: Device allowed ('SDL:Linux')
I: VulkanLoader.cpp:275: VulkanMayBeAvailable: Library loaded ('libvulkan.so')
I: VulkanLoader.cpp:328: VulkanMayBeAvailable: Enumerating instance extensions
I: VulkanLoader.cpp:339: VulkanMayBeAvailable: Instance extension count: 2
I: VulkanLoader.cpp:347: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_report (00000009)
I: VulkanLoader.cpp:347: VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_utils (00000001)
E: VulkanLoader.cpp:365: Surface extension not found
DEBUG: Vulkan is not available, not using Vulkan.
Info: We compiled against SDL version 2.0.9 and we are linking against SDL version 2.0.9. :)
I: Config.cpp:527: Longest display side: -1 pixels. Choosing scale 1
28:26:098 UI/NativeApp.cpp:402 E[LOADER]: Failed graphics backends: OPENGL,ALL,ALL,ALL,ALL
28:26:098 Core/Config.cpp:609 E[LOADER]: Graphics backend failed for 0, trying another
28:26:099 Core/Config.cpp:634 E[LOADER]: All graphics backends failed
Pixels: 960 x 544
Virtual pixels: 960 x 544
PVR:(Warning): LoadWSModule: Window system module libpvrws_KMS.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Error): PVRSRVAllocDeviceMem: Error 1 returned [934, /bridged_pvr_glue.c]
PVR:(Error): ERROR - Failed to alloc mem for CCB! [114, /sgxutils_client.c]
PVR:(Error): Couldn't create render context [193, /srv_sgx.c]
PVR:(Error): SGXDestroyTransferContext: Called with NULL context.  Ignoring [1958, /sgxtransfer_context.c]
PVR:(Error): SGXDestroyRenderContext: NULL handle [52, /sgxrender_context.c]
PVR:(Error): Couldn't destroy render context [247, /srv_sgx.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
Segmentation fault

screen resolution is 960x540, not 544, so maybe i could set things to single scaled 480x272 ? My

clort81 commented 4 years ago

/var/log/messages also indicates driver issues:

Jul 18 12:30:49 ml1 kernel: [214102.065460] PVR_K:(Error): PVRSRVOpenDCDeviceKM: no devnode matching index 0 [837, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/common/deviceclass.c]
Jul 18 12:30:50 ml1 kernel: [214102.133392] PVR_K:(Error): MMU_Alloc: RA_Alloc of VMArena failed [3111, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/devices/sgx/mmu.c]
Jul 18 12:30:50 ml1 kernel: [214102.133453] PVR_K:(Error): MMU_Alloc: Alloc of DevVAddr failed from heap KernelData ID117440515 [3114, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/devices/sgx/mmu.c]
Jul 18 12:30:50 ml1 kernel: [214102.133453] PVR_K:(Error): DevMemoryAlloc ERROR MMU_Alloc [2304, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/common/buffer_manager.c]
Jul 18 12:30:50 ml1 kernel: [214102.133483] PVR_K:(Error): BM_ImportMemory: DevMemoryAlloc(0x11000) failed [3128, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/common/buffer_manager.c]
Jul 18 12:30:50 ml1 kernel: [214102.133483] PVR_K:(Error): AllocMemory: RA_Alloc(0x10674) FAILED [245, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/common/buffer_manager.c]
Jul 18 12:30:50 ml1 kernel: [214102.133483] PVR_K:(Error): BM_Alloc: AllocMemory FAILED [1616, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/common/buffer_manager.c]
Jul 18 12:30:50 ml1 kernel: [214102.133544] PVR_K:(Error): AllocDeviceMem: BM_Alloc Failed [537, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/common/devicemem.c]
unknownbrackets commented 3 years ago

Has this gotten any better with updated drivers?

-[Unknown]

clort81 commented 3 years ago

Sorry for lack of reply unknownbrackets: better drivers not forthcoming. We have no active driver development. Amazingly i did get a build that runs - sometimes. My brain has turned to mush though - I should have really gotten a d-dimer clotting test.

video proof! playable fps (for rpg)!!

https://user-images.githubusercontent.com/51511737/126049821-7b9f364d-8356-4fce-b5b8-7001dbd8360e.mp4

I'll try to figure it out - maybe this patch will help. force sdl2 to use gles Perhaps someone with another omap4 device could give it a shot? Cheers!

clort81 commented 3 years ago

so that build above which did run, and my latest compile with is RelWithDebInfo, fail as follows

 ./PPSSPPSDL 
VulkanMayBeAvailable: Device allowed ('SDL:Linux')
VulkanMayBeAvailable: Library loaded ('libvulkan.so.1')
VulkanMayBeAvailable: Enumerating instance extensions
VulkanMayBeAvailable: Instance extension count: 2
VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_report (00000009)
VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_utils (00000001)
Surface extension not found
DEBUG: Vulkan is not available, not using Vulkan.
Info: We compiled against SDL version 2.0.9, but we are linking against SDL version 2.0.14., be aware that this can lead to unexpected behaviors
25:05:072 Core/Config.cpp:615 I[G3D]: Longest display side: -1 pixels. Choosing scale 1
25:05:151 UI/NativeApp.cpp:405 E[LOADER]: Failed graphics backends: OPENGL
25:05:152 Core/Config.cpp:697 E[LOADER]: Graphics backend failed for 0, trying another
25:05:153 Core/Config.cpp:722 E[LOADER]: All graphics backends failed
Pixels: 960 x 544
Virtual pixels: 960 x 544
PVR:(Warning): LoadWSModule: Window system module libpvrws_KMS.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
PVR:(Error): PVRSRVUnloadLibrary, invalid hExtDrv [182, /osfunc_um.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
malloc(): smallbin double linked list corrupted

And under gdb

gdb ./PPSSPPSDL 
GNU gdb (Debian 8.2.1-2+b3) 8.2.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./PPSSPPSDL...done.
(gdb) 
(gdb) run
Starting program: /data/psp/ppsspp/build/PPSSPPSDL 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".

Program received signal SIGILL, Illegal instruction.
0xb5fea966 in ?? () from /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.1
(gdb) bt
#0  0xb5fea966 in ?? () from /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.1
#1  0xb5fe50ee in ?? () from /usr/lib/arm-linux-gnueabihf/libcrypto.so.1.1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb)

internet says 'this is normal' so i apply handle SIGILL nostop

(gdb) handle SIGILL nostop
Signal        Stop      Print   Pass to program Description
SIGILL        No        Yes     Yes             Illegal instruction
(gdb) cont
Continuing.
VulkanMayBeAvailable: Device allowed ('SDL:Linux')
VulkanMayBeAvailable: Library loaded ('libvulkan.so.1')
VulkanMayBeAvailable: Enumerating instance extensions
VulkanMayBeAvailable: Instance extension count: 2
VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_report (00000009)
VulkanMaybeAvailable: Instance extension found: VK_EXT_debug_utils (00000001)
Surface extension not found
DEBUG: Vulkan is not available, not using Vulkan.
[New Thread 0xb4e533a0 (LWP 729)]
Info: We compiled against SDL version 2.0.9, but we are linking against SDL version 2.0.14., be aware that this can lead to unexpected behaviors
**30:32:549 Core/Config.cpp:615 I[G3D]: Longest display side: -1 pixels. Choosing scale 1**
[New Thread 0xb0ba23a0 (LWP 730)]
[New Thread 0xb03a13a0 (LWP 731)]
[New Thread 0xafba03a0 (LWP 732)]
[New Thread 0xaf39f3a0 (LWP 733)]
[New Thread 0xaeb9e3a0 (LWP 734)]
[New Thread 0xae39d3a0 (LWP 735)]
30:32:605 UI/NativeApp.cpp:405 E[LOADER]: Failed graphics backends: OPENGL,ALL
30:32:605 Core/Config.cpp:697 E[LOADER]: Graphics backend failed for 0, trying another
30:32:605 Core/Config.cpp:722 E[LOADER]: All graphics backends failed
Pixels: 960 x 544
Virtual pixels: 960 x 544
PVR:(Warning): LoadWSModule: Window system module libpvrws_KMS.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
PVR:(Error): PVRSRVUnloadLibrary, invalid hExtDrv [182, /osfunc_um.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
malloc(): smallbin double linked list corrupted

Thread 1 "PPSSPPSDL" received signal SIGABRT, Aborted.
__libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
47      ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S: No such file or directory.
  1. The screen has 960x540 so idk why it's asking for 960x544 despite FullScreen = True in ppsspp.ini. Maybe i can address that first?
  2. E[LOADER] fails opening OPENGL, ALL - but i specified opengl-es. Is this just a misleading error message?

[EDIT] Forcing pixel_xres and pixel_yres to 960x540 results in Pixels: 960 x 540, Virtual pixels: 960 x 544 and same

I seem to recall getting this intermittently in previous OS revisions, now it's consistent. The backtrace shows

3639    malloc.c: No such file or directory.
(gdb) bt
#0  _int_malloc (av=av@entry=0xb64447f4 <main_arena>, bytes=bytes@entry=8) at malloc.c:3639
#1  0xb63a42d0 in __GI___libc_malloc (bytes=8) at malloc.c:3057
#2  0xb5ef1acc in ?? () from /usr/lib/arm-linux-gnueabihf/libxcb.so.1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

At this point, would i want to see what parameters libxcb is being invoked with? Corrupt stack prevents introspection with gdb?

[EDIT2] This doesn't look right: 30:32:549 Core/Config.cpp:615 I[G3D]: Longest display side: -1 pixels. Choosing scale 1 This gets set in Config.cpp

        int longestDisplaySide = std::max(System_GetPropertyInt(SYSPROP_DISPLAY_XRES), System_GetPropertyInt(SYSPROP_DISPLAY_YRES));
        int scale = longestDisplaySide >= 1000 ? 2 : 1; 

I'll try force setting SYSPROP_DISPLAY_XRES and YRES now. As an aside.. Seems to me that a Display of 960 would be enough for scale=2

[EDIT3] Forcing int longestDisplaySide = std::max(960, 540); still results in malloc(): smallbin double linked list corrupted

clort81 commented 3 years ago

After installing gnulib (containing maloc.c) gdb backtrace shows more output:

malloc(): smallbin double linked list corrupted

Thread 1 "PPSSPPSDL" received signal SIGABRT, Aborted.
__libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
47      ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S: No such file or directory.
(gdb) bt
#0  __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
#1  0xb63730ae in __libc_signal_restore_set (set=0xbeffcd54) at ../sysdeps/unix/sysv/linux/internal-signals.h:84
#2  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:48
#3  0xb63651f2 in __GI_abort () at abort.c:79
#4  0xb639c494 in __libc_message (action=action@entry=do_abort, fmt=<optimized out>) at ../sysdeps/posix/libc_fatal.c:181
#5  0xb63a09c2 in malloc_printerr (str=<optimized out>) at malloc.c:5341
#6  0xb63a3290 in _int_malloc (av=av@entry=0xb64447f4 <main_arena>, bytes=bytes@entry=8) at malloc.c:3640
#7  0xb63a4bd0 in __libc_calloc (n=<optimized out>, elem_size=<optimized out>) at malloc.c:3428
#8  0xb6cf3544 in _XlcOpenConverter () from /usr/lib/arm-linux-gnueabihf/libX11.so.6
#9  0xb6cf798c in ?? () from /usr/lib/arm-linux-gnueabihf/libX11.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Oh hm dmesg shows:

[23592.937622] PVR_K:(Error): OSFreePages(ui32AllocFlags=0x02014200, ui32Bytes=10342400, pvCpuVAddr=00000000, hOSMemHandle=a2defd5d) FAILED! [327, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/env/linux/osfunc.c]
[23592.937652] PVR_K:(Error): PVRMMapRemoveRegisteredArea: psOffsetStruct 0x1469965d for memory area 0x0x6fdec8bd is still mapped; psOffsetStruct->ui32Mapped 1 [1754, rivers/gpu/drm/pvrsgx/1.9.2253347/services4/srvkm/env/linux/mmap.c]
[23592.940246] [<bf383e3c>] (PVRSRV_BridgeDispatchKM [pvrsrvkm_omap4_sgx540_120]) from [<bf24be58>] (drm_ioctl_kernel+0xa4/0xe8 [drm])
[23592.940612] [<bf24be58>] (drm_ioctl_kernel [drm]) from [<bf24c078>] (drm_ioctl+0x1dc/0x3bc [drm])
[23592.940887] [<bf24c078>] (drm_ioctl [drm]) from [<c02eed58>] (sys_ioctl+0x19c/0xa54)
æ1 /data/psp/ppsspp# 

Another run under gdb yields:

PVR:(Warning): LoadWSModule: Window system module libpvrws_WAYLAND.so did not validate native display [98, /generic_ws.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
PVR:(Warning): PVRSRVOpenDCDevice: Warning - 138 returned [80, /bridged_pvr_dc_glue.c]
PVR:(Warning): PVRDRMSetFD: DRM fd already set [57, /pvr_bridge_u.c]
malloc(): smallbin double linked list corrupted

Thread 1 "PPSSPPSDL" received signal SIGABRT, Aborted.
__libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
47      ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S: No such file or directory.
(gdb) bt
#0  __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
#1  0xb63730ae in __libc_signal_restore_set (set=0xbeffccf4) at ../sysdeps/unix/sysv/linux/internal-signals.h:84
#2  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:48
#3  0xb63651f2 in __GI_abort () at abort.c:79
#4  0xb639c494 in __libc_message (action=action@entry=do_abort, fmt=<optimized out>) at ../sysdeps/posix/libc_fatal.c:181
#5  0xb63a09c2 in malloc_printerr (str=<optimized out>) at malloc.c:5341
#6  0xb63a3290 in _int_malloc (av=av@entry=0xb64447f4 <main_arena>, bytes=bytes@entry=12) at malloc.c:3640
#7  0xb63a4bd0 in __libc_calloc (n=<optimized out>, elem_size=<optimized out>) at malloc.c:3428
#8  0xb5dbf428 in drmHashInsert () from /usr/lib/arm-linux-gnueabihf/libdrm.so.2
#9  0xb5dbc4f2 in drmGetEntry () from /usr/lib/arm-linux-gnueabihf/libdrm.so.2
#10 0xb5dbcb0a in drmClose () from /usr/lib/arm-linux-gnueabihf/libdrm.so.2
#11 0xb5f6b7e2 in ?? () from /usr/lib/arm-linux-gnueabihf/libsrv_um.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

This is looking like a driver issue that I cannot work around playing with ppsspp itself.

unknownbrackets commented 1 year ago

Has this gotten any better in the latest git build? We fixed a bug that was causing another GL driver to crash, so it's possible it could be related.

-[Unknown]