Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Google Breakpad #801

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

Conversation

koxu1996
Copy link

@koxu1996 koxu1996 commented May 3, 2023

This PR updates Google Breakpad to the latest version.

It should close ARM related issues: #303, #310, #456.


You can reproduce all changes with the following steps:

1. Prepare breakpad

$ git clone https://github.com/google/breakpad.git /tmp/breakpad
$ cd /tmp/breakpad
$ git checkout 3ea3af4

2. Prepare lss

$ git clone https://chromium.googlesource.com/linux-syscall-support /tmp/lss
$ cd /tmp/lss
$ git checkout 9719c1e

3. Clone MEGAsync repository

$ git clone --recursive https://github.com/meganz/MEGAsync.git /tmp/megasync
$ cd /tmp/megasync
$ git checkout c422ca2

4. Update breakpad files - 2751244

$ rm -r ./src/MEGASync/google_breakpad/client
$ cp -r /tmp/breakpad/src/client ./src/MEGASync/google_breakpad/client

$ rm -r ./src/MEGASync/google_breakpad/common
$ cp -r /tmp/breakpad/src/common ./src/MEGASync/google_breakpad/common

$ rm -r ./src/MEGASync/google_breakpad/google_breakpad
$ cp -r /tmp/breakpad/src/google_breakpad ./src/MEGASync/google_breakpad/google_breakpad

$ rm ./src/MEGASync/google_breakpad/third_party/lss/linux_syscall_support.h
$ cp /tmp/lss/linux_syscall_support.h ./src/MEGASync/google_breakpad/third_party/lss/linux_syscall_support.h

$ sed -ie "s/convert_UTF.c/convert_UTF.cc/g" ./src/MEGASync/google_breakpad/google_breakpad.pri

$ git add . && git commit -m "Update google breakpad to 3ea3af4"

5. Apply workaround for inttypes.h has already been included before this header file, but without __STDC_FORMAT_MACROS defined error - fbbe423

$ sed -i '44s|^|//|' ./src/MEGASync/google_breakpad/google_breakpad/common/breakpad_types.h
$ sed -i '45s|^|//|' ./src/MEGASync/google_breakpad/google_breakpad/common/breakpad_types.h

$ git add . && git commit -m "Workaround for inttypes.h error"

I am not sure about this step, maybe __STDC_FORMAT_MACROS should be defined somewhere in megasync SDK 馃

@koxu1996 koxu1996 marked this pull request as ready for review May 3, 2023 16:35
@koxu1996
Copy link
Author

koxu1996 commented May 5, 2023

I was getting unresolved reference error:

/usr/bin/ld: minidump_writer.o: in function `(anonymous namespace)::MinidumpWriter::FillRawModule(google_breakpad::MappingInfo const&, bool, unsigned int, MDRawModule*, unsigned char const*)':
/tmp/MEGAsync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:651: undefined reference to `google_breakpad::PEFile::TryGetDebugInfo(char const*, google_breakpad::_RSDS_DEBUG_FORMAT*)'

It was just matter of inculding new pe_file.cc in qmake - 588101d:

--- a/src/MEGASync/google_breakpad/google_breakpad.pri
+++ b/src/MEGASync/google_breakpad/google_breakpad.pri
@@ -31,6 +31,7 @@ unix:!macx {
   SOURCES += $$PWD/client/linux/handler/exception_handler.cc
   SOURCES += $$PWD/client/linux/handler/minidump_descriptor.cc
   SOURCES += $$PWD/client/linux/minidump_writer/minidump_writer.cc
+  SOURCES += $$PWD/client/linux/minidump_writer/pe_file.cc
   SOURCES += $$PWD/client/linux/minidump_writer/linux_dumper.cc
   SOURCES += $$PWD/client/linux/minidump_writer/linux_ptrace_dumper.cc
   SOURCES += $$PWD/client/linux/log/log.cc

Note, I also had some issues with freeimage library and its neon optimizations. I found out they should be disabled for ARM, however it seems to be already done in mega's SDK:

    # freeimage's LibPNG has a problem with deciding to use neon on 64 bit arm, resulting in a missing symbol
    if [ "$ARCH" == "aarch64" -o "$ARCH" == "arm64" ]; then
        export CFLAGS="$CFLAGS -DPNG_ARM_NEON_OPT=0"
    fi 

With that I was able to build everything:

$ cd /tmp/megasync/src/
$ ./configure -g -q -i
$ qmake MEGASync/MEGASync.pro
$ lrelease MEGASync/MEGASync.pro
$ make

@koxu1996
Copy link
Author

koxu1996 commented May 5, 2023

It works on Asahi Linux with M2 鉂わ笍

image

I am sharing compiled binary with you: megasync_v4.9.3_aarch64, virus total scan here.

@farid220
Copy link

farid220 commented Oct 6, 2023

Hi
Thanks for your concern about fixing this problem.
I'm using aarch64 and I want to compile it.
I encounterd the breakpad issue and I tried your solotuion step by step.
But now I get the following error while compiling.

I'd appreciate it if you could take a look and help.

root@Falkenstein:/tmp/megasync/src# make Makefile:4343: warning: overriding recipe for target 'qrc_Resources_linux.cpp' Makefile:3010: warning: ignoring old recipe for target 'qrc_Resources_linux.cpp' Makefile:5676: warning: overriding recipe for target 'qrc_Resources_linux.cpp' Makefile:4343: warning: ignoring old recipe for target 'qrc_Resources_linux.cpp' Makefile:7009: warning: overriding recipe for target 'qrc_Resources_linux.cpp' Makefile:5676: warning: ignoring old recipe for target 'qrc_Resources_linux.cpp' g++ -Wl,-O1 -Wl,-rpath-link,/usr/lib/aarch64-linux-gnu -o megasync SettingsDialog.o BalloonToolTip.o BlurredShadowEffect.o ButtonIconManager.o LowDiskSpaceDialog.o DateTimeFormatter.o EventHelper.o InfoDialog.o MegaDelegateHoverManager.o NotificationsSettings.o OverQuotaDialog.o ScanningWidget.o QtPositioningBugFixer.o PasswordLineEdit.o SetupWizard.o UploadToMegaDialog.o PasteMegaLinksDialog.o ImportMegaLinksDialog.o ImportListWidgetItem.o CrashReportDialog.o MultiQFileDialog.o MegaProxyStyle.o AccountDetailsDialog.o DownloadFromMegaDialog.o ChangeLogDialog.o GuestWidget.o StreamingFromMegaDialog.o MegaProgressCustomDialog.o UpgradeDialog.o PlanWidget.o InfoWizard.o QMegaMessageBox.o AvatarWidget.o MenuItemAction.o AddExclusionDialog.o StatusInfo.o ChangePassword.o PSAwidget.o ElidedLabel.o UpgradeOverStorage.o Login2FA.o QRWidget.o CircularUsageProgressBar.o HighDpiResize.o AlertItem.o QAlertsModel.o MegaAlertDelegate.o QFilterAlertsModel.o FilterAlertWidget.o AlertFilterType.o BugReportDialog.o VerifyLockMessage.o MegaInfoMessage.o WaitingSpinnerWidget.o ProxySettings.o BandwidthSettings.o SwitchButton.o GuiUtilities.o CancelConfirmWidget.o NodeNameSetterDialog.o NewFolderDialog.o RenameNodeDialog.o NodeSelectorDelegates.o NodeSelectorProxyModel.o NodeSelectorModel.o NodeSelectorModelSpecialised.o NodeSelectorModelItem.o NodeSelectorTreeView.o NodeSelectorTreeViewWidget.o NodeSelectorTreeViewWidgetSpecializations.o NodeSelector.o NodeSelectorLoadingDelegate.o SearchLineEdit.o NodeSelectorSpecializations.o LockedPopOver.o PermissionsDialog.o PermissionsWidget.o attrmap.o backofftimer.o base64.o command.o commands.o db.o gfx.o file.o fileattributefetch.o filefingerprint.o filesystem.o http.o json.o megaclient.o node.o pubkeyaction.o request.o serialize64.o nodemanager.o setandelement.o share.o sharenodekeys.o sync.o transfer.o transferslot.o treeproc.o user.o useralerts.o utils.o logging.o waiterbase.o proxy.o pendingcontactrequest.o textchat.o cryptopp.o sodium.o sqlite.o external.o mega_utf8proc.o mega_ccronexpr.o mega_evt_tls.o mega_zxcvbn.o mediafileattribute.o raid.o testhooks.o heartbeats.o megaapi.o megaapi_impl.o QTMegaRequestListener.o QTMegaTransferListener.o QTMegaGlobalListener.o QTMegaListener.o QTMegaEvent.o mega_http_parser.o net.o fs.o waiter.o posixthread.o freeimage.o drivenotify.o drivenotifyposix.o HTTPServer.o DialogOpener.o DownloadQueueController.o Preferences.o LinkProcessor.o MegaUploader.o TransferRemainingTime.o UpdateTask.o EncryptedSettings.o CrashHandler.o ExportProcessor.o UserAttributesManager.o Utilities.o ThreadPool.o MegaDownloader.o MegaSyncLogger.o ConnectivityChecker.o TransferBatch.o TextDecorator.o qrcodegen.o TransfersModel.o DuplicatedNodeDialog.o DuplicatedNodeInfo.o DuplicatedNodeItem.o DuplicatedUploadChecker.o InfoDialogTransferLoadingItem.o InfoDialogTransfersProxyModel.o TransfersManagerSortFilterProxyModel.o TransferMetaData.o InfoDialogTransferDelegateWidget.o InfoDialogTransfersWidget.o MegaTransferDelegate.o MegaTransferView.o TransferBaseDelegateWidget.o TransferItem.o TransferManager.o TransferManagerDelegateWidget.o TransferManagerLoadingItem.o TransfersStatusWidget.o TransfersSummaryWidget.o TransferScanCancelUi.o TransferWidgetHeaderItem.o TransfersWidget.o DesktopNotifications.o TransferNotificationBuilder.o NotificatorBase.o NotificationDelayer.o Notificator.o AddBackupDialog.o BackupNameConflictDialog.o BackupRenameWidget.o BackupTableView.o BackupTableViewTooltips.o BackupsWizard.o RemoveBackupDialog.o SyncTooltipCreator.o SyncsMenu.o BindFolderDialog.o FolderBinder.o SyncTableView.o SyncTableViewTooltips.o BackupItemModel.o SyncItemModel.o SyncInfo.o SyncController.o SyncSettings.o AbstractPlatform.o Platform.o ShellNotifier.o PlatformImplementation.o ExtServer.o NotifyServer.o PowerOptions.o PlatformStrings.o crash_generation_client.o exception_handler.o minidump_descriptor.o minidump_writer.o pe_file.o linux_dumper.o linux_ptrace_dumper.o log.o minidump_file_writer.o linux_libc_support.o file_id.o memory_mapped_file.o safe_readlink.o guid_creator.o elfutils.o string_conversion.o convert_UTF.o qtlockedfile.o qtlockedfile_unix.o main.o MegaApplication.o TransferQuota.o UserAlertTimedClustering.o ScaleFactorManager.o CommonMessages.o ScanStageController.o EventUpdater.o FolderTransferListener.o BlockingStageProgressController.o Avatar.o CameraUploadFolder.o DeviceName.o FullName.o MyBackupsHandle.o MyChatFilesFolder.o qrc_Resources_linux.o moc_SettingsDialog.o moc_AutoResizeStackedWidget.o moc_BalloonToolTip.o moc_ButtonIconManager.o moc_DateTimeFormatter.o moc_LowDiskSpaceDialog.o moc_EventHelper.o moc_InfoDialog.o moc_MegaDelegateHoverManager.o moc_MegaNodeNames.o moc_NotificationsSettings.o moc_OverQuotaDialog.o moc_ScanningWidget.o moc_QtPositioningBugFixer.o moc_PasswordLineEdit.o moc_SetupWizard.o moc_UploadToMegaDialog.o moc_PasteMegaLinksDialog.o moc_ImportMegaLinksDialog.o moc_ImportListWidgetItem.o moc_CrashReportDialog.o moc_MultiQFileDialog.o moc_MegaProxyStyle.o moc_AccountDetailsDialog.o moc_DownloadFromMegaDialog.o moc_ChangeLogDialog.o moc_GuestWidget.o moc_StreamingFromMegaDialog.o moc_MegaProgressCustomDialog.o moc_UpgradeDialog.o moc_PlanWidget.o moc_InfoWizard.o moc_AvatarWidget.o moc_AddExclusionDialog.o moc_StatusInfo.o moc_PSAwidget.o moc_ElidedLabel.o moc_UpgradeOverStorage.o moc_ChangePassword.o moc_Login2FA.o moc_QRWidget.o moc_CircularUsageProgressBar.o moc_HighDpiResize.o moc_AlertItem.o moc_QAlertsModel.o moc_MegaAlertDelegate.o moc_QFilterAlertsModel.o moc_FilterAlertWidget.o moc_AlertFilterType.o moc_BugReportDialog.o moc_VerifyLockMessage.o moc_ViewLoadingScene.o moc_MegaInfoMessage.o moc_WaitingSpinnerWidget.o moc_ProxySettings.o moc_BandwidthSettings.o moc_SwitchButton.o moc_CancelConfirmWidget.o moc_NodeNameSetterDialog.o moc_NewFolderDialog.o moc_RenameNodeDialog.o moc_NodeSelectorProxyModel.o moc_NodeSelectorModel.o moc_NodeSelectorModelSpecialised.o moc_NodeSelectorModelItem.o moc_NodeSelectorTreeView.o moc_NodeSelectorTreeViewWidget.o moc_NodeSelectorTreeViewWidgetSpecializations.o moc_NodeSelector.o moc_NodeSelectorLoadingDelegate.o moc_SearchLineEdit.o moc_NodeSelectorSpecializations.o moc_LockedPopOver.o moc_PermissionsDialog.o moc_PermissionsWidget.o moc_QTMegaRequestListener.o moc_QTMegaTransferListener.o moc_QTMegaGlobalListener.o moc_QTMegaListener.o moc_HTTPServer.o moc_DownloadQueueController.o moc_Preferences.o moc_LinkProcessor.o moc_MegaUploader.o moc_UpdateTask.o moc_EncryptedSettings.o moc_CrashHandler.o moc_ExportProcessor.o moc_UserAttributesManager.o moc_Utilities.o moc_MegaDownloader.o moc_MegaSyncLogger.o moc_ConnectivityChecker.o moc_TextDecorator.o moc_InfoDialogTransfersProxyModel.o moc_DuplicatedNodeDialog.o moc_DuplicatedNodeInfo.o moc_DuplicatedNodeItem.o moc_DuplicatedUploadChecker.o moc_InfoDialogTransferLoadingItem.o moc_TransfersManagerSortFilterProxyModel.o moc_TransfersSortFilterProxyBaseModel.o moc_TransfersModel.o moc_InfoDialogTransferDelegateWidget.o moc_InfoDialogTransfersWidget.o moc_MegaTransferDelegate.o moc_MegaTransferView.o moc_TransferBaseDelegateWidget.o moc_TransferManager.o moc_TransferManagerDelegateWidget.o moc_TransferManagerLoadingItem.o moc_TransfersStatusWidget.o moc_TransfersSummaryWidget.o moc_TransferScanCancelUi.o moc_TransferWidgetHeaderItem.o moc_TransfersWidget.o moc_DesktopNotifications.o moc_TransferNotificationBuilder.o moc_NotificatorBase.o moc_NotificationDelayer.o moc_Notificator.o moc_AddBackupDialog.o moc_BackupNameConflictDialog.o moc_BackupRenameWidget.o moc_BackupTableView.o moc_BackupTableViewTooltips.o moc_BackupsWizard.o moc_RemoveBackupDialog.o moc_SyncsMenu.o moc_BindFolderDialog.o moc_FolderBinder.o moc_SyncTableView.o moc_SyncTableViewTooltips.o moc_BackupItemModel.o moc_SyncItemModel.o moc_SyncController.o moc_SyncInfo.o moc_ShellNotifier.o moc_PlatformStrings.o moc_ExtServer.o moc_NotifyServer.o moc_MegaApplication.o moc_TransferQuota.o moc_UserAlertTimedClustering.o moc_ScanStageController.o moc_FolderTransferListener.o moc_BlockingStageProgressController.o moc_Avatar.o moc_CameraUploadFolder.o moc_DeviceName.o moc_FullName.o moc_MyBackupsHandle.o moc_MyChatFilesFolder.o -lstdc++fs /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libuv.a -lmediainfo -lzen -lraw -fopenmp -lavcodec -lavformat -lavutil -lswscale -lswresample /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libfreeimage.a -licuuc -licudata -lsqlite3 -lrt /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libcurl.a /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libz.a /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libcryptopp.a -lcares /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libsodium.a -ludev -lssl -lcrypto -ldl -lxcb /usr/lib/aarch64-linux-gnu/libQt5Svg.so /usr/lib/aarch64-linux-gnu/libQt5Widgets.so /usr/lib/aarch64-linux-gnu/libQt5X11Extras.so /usr/lib/aarch64-linux-gnu/libQt5Gui.so /usr/lib/aarch64-linux-gnu/libQt5Network.so /usr/lib/aarch64-linux-gnu/libQt5DBus.so /usr/lib/aarch64-linux-gnu/libQt5Core.so -lGL -lpthread /usr/bin/ld: /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libfreeimage.a(strenc.o): in function StrIOEncInit':
strenc.c:(.text+0x13a8): warning: the use of tmpnam' is dangerous, better use mkstemp'
/usr/bin/ld: exception_handler.o: in function google_breakpad::ExceptionHandler::SimulateSignalDelivery(int)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/handler/exception_handler.cc:493: undefined reference to breakpad_getcontext'
/usr/bin/ld: exception_handler.o: in function google_breakpad::ExceptionHandler::DoDump(int, void const*, unsigned long)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/handler/exception_handler.cc:609: undefined reference to google_breakpad::WriteMicrodump(int, void const*, unsigned long, std::__cxx11::list<google_breakpad::MappingEntry, std::allocator<google_breakpad::MappingEntry> > const&, bool, unsigned long, bool, google_breakpad::MicrodumpExtraInfo const&)'
/usr/bin/ld: exception_handler.o: in function google_breakpad::ExceptionHandler::WriteMinidump()': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/handler/exception_handler.cc:678: undefined reference to breakpad_getcontext'
/usr/bin/ld: minidump_writer.o: in function (anonymous namespace)::MinidumpWriter::Init()': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:204: undefined reference to google_breakpad::UContextReader::GetStackPointer(ucontext_t const*)'
/usr/bin/ld: minidump_writer.o: in function CrashingThreadReferencesPrincipalMapping': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:205: undefined reference to google_breakpad::UContextReader::GetInstructionPointer(ucontext_t const*)'
/usr/bin/ld: minidump_writer.o: in function (anonymous namespace)::MinidumpWriter::WriteThreadListStream(MDRawDirectory*)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:495: undefined reference to google_breakpad::ThreadInfo::GetInstructionPointer() const'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:504: undefined reference to google_breakpad::ThreadInfo::FillCPUContext(MDRawContextARM64_Old*) const' /usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:512: undefined reference to google_breakpad::ThreadInfo::GetInstructionPointer() const'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:426: undefined reference to google_breakpad::UContextReader::GetStackPointer(ucontext_t const*)' /usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:427: undefined reference to google_breakpad::UContextReader::GetInstructionPointer(ucontext_t const*)'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:434: undefined reference to google_breakpad::UContextReader::GetInstructionPointer(ucontext_t const*)' /usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/minidump_writer.cc:480: undefined reference to google_breakpad::UContextReader::FillCPUContext(MDRawContextARM64_Old*, ucontext_t const*, fpsimd_context const*)'
/usr/bin/ld: linux_ptrace_dumper.o: in function google_breakpad::LinuxPtraceDumper::ReadRegisterSet(google_breakpad::ThreadInfo*, int)': /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/linux_ptrace_dumper.cc:159: undefined reference to google_breakpad::ThreadInfo::GetGeneralPurposeRegisters(void**, unsigned long*)'
/usr/bin/ld: /tmp/megasync/src/MEGASync/google_breakpad/client/linux/minidump_writer/linux_ptrace_dumper.cc:164: undefined reference to google_breakpad::ThreadInfo::GetFloatingPointRegisters(void**, unsigned long*)' /usr/bin/ld: /tmp/megasync/src/MEGASync/mega/bindings/qt/../..//bindings/qt/3rdparty/libs/libfreeimage.a(pngrutil.o): in function png_read_filter_row':
pngrutil.c:(.text+0x69c4): undefined reference to png_init_filter_functions_neon' collect2: error: ld returned 1 exit status make: *** [Makefile:1446: megasync] Error 1

@ArchitektApx
Copy link

ArchitektApx commented May 18, 2024

Despite following the provided steps I was not able to build on a up to date install of asahi linux due to the breakpad issue.
This alternative removes the crashhandler to allow working builds and runs great on asahi:
https://github.com/zarandya/megasync-nocrashhandler

Screenshot from 2024-05-18 11-41-12

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants