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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

apps/platform, os/binfmt: add exceptions support in loadable #6068

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions apps/platform/gnu/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ ifeq ($(CONFIG_HAVE_CXXINITIALIZE),y)
CSRCS += gnu_cxxinitialize.c
endif

ifeq ($(CONFIG_LIBCXX_EXCEPTION),y)
CSRCS += gnu_unwind_find_exidx.c
endif

# Add the gnu/ sub-directory to the build

VPATH += :gnu
Expand Down
50 changes: 50 additions & 0 deletions apps/platform/gnu/gnu_unwind_find_exidx.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/****************************************************************************
*
* Copyright 2024 Samsung Electronics All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the License.
*
****************************************************************************/

/****************************************************************************
* Included Files
****************************************************************************/

#include <unwind.h>
abhishek-samsung marked this conversation as resolved.
Show resolved Hide resolved

/****************************************************************************
* Private Data
****************************************************************************/

extern void *__exidx_start;
extern void *__exidx_end;

/****************************************************************************
* Public Functions
****************************************************************************/

/****************************************************************************
* Name: __gnu_Unwind_Find_exidx
*
* Description:
* This function is called (if exists) by the gcc generated unwind
* run-time in order to retrieve an alternative .ARM.exidx Exception
* index section.
*
****************************************************************************/

volatile _Unwind_Ptr __gnu_Unwind_Find_exidx(_Unwind_Ptr return_address, int *nrecp)
{
*nrecp = &__exidx_end - &__exidx_start;
return (_Unwind_Ptr)&__exidx_start;
}
12 changes: 10 additions & 2 deletions build/configs/rtl8721csm/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ else ifeq ($(CONFIG_CXX_VERSION_14),y)
else
CXXFLAGS += -std=c++11
endif
CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -ffunction-sections -fdata-sections -D__GLIBCXX__
CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -ffunction-sections -fdata-sections -D__GLIBCXX__ -DCONFIG_WCHAR_BUILTIN
endif

ifeq ($(CONFIG_EXTERNAL_TFMICRO),y)
Expand Down Expand Up @@ -249,7 +249,8 @@ ifeq ($(CONFIG_APP_BINARY_SEPARATION),y)
CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs

LDELFFLAGS = -r -e main
LDELFFLAGS = -r
LDELFENTRY = -e main

ifeq ($(WINTOOL),y)
LDELFFLAGS += -T "${shell cygpath -w $(TOPDIR)/userspace/userspace_apps.ld}"
Expand All @@ -258,6 +259,13 @@ else
endif
endif

ifeq ($(CONFIG_LIBCXX_EXCEPTION),y)
#this symbol __gnu_Unwind_Find_exidx should be present in all the cpp binaries (apps, common)
#as it is used to decide which exception table. Also, --force-group-allocation flag is required
#to not generate additional sections with group flag, as we dont support loading such sections.
LDELFFLAGS += --require-defined __gnu_Unwind_Find_exidx --force-group-allocation
abhishek-samsung marked this conversation as resolved.
Show resolved Hide resolved
endif

LDFLAGS += --gc-sections
LDFLAGS += --defsym=CONFIG_IDLETHREAD_STACKSIZE=$(CONFIG_IDLETHREAD_STACKSIZE)

Expand Down
45 changes: 34 additions & 11 deletions build/configs/rtl8721csm/cpp_loadable/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,20 @@ CONFIG_ARCH="arm"
# CONFIG_ARCH_CHIP_LM is not set
# CONFIG_ARCH_CHIP_S5J is not set
# CONFIG_ARCH_CHIP_BCM4390X is not set
# CONFIG_ARCH_CHIP_IMX6 is not set
# CONFIG_ARCH_CHIP_STM32 is not set
# CONFIG_ARCH_CHIP_IMXRT is not set
# CONFIG_ARCH_CHIP_STM32L4 is not set
CONFIG_ARCH_CHIP_AMEBAD=y
# CONFIG_ARCH_CHIP_STM32H745 is not set
# CONFIG_ARCH_CHIP_AMEBALITE is not set
# CONFIG_ARCH_CHIP_AMEBASMART is not set
CONFIG_ARCH_CHIP="amebad"
# CONFIG_ARM_THUMB is not set
# CONFIG_ARM_HAVE_DPFPU32 is not set
# CONFIG_ARM_HAVE_NEON is not set
# CONFIG_ARM_FPU_ABI_SOFT is not set
# CONFIG_ARM_HAVE_MPCORE is not set

#
# ARM Options
Expand All @@ -81,10 +88,13 @@ CONFIG_ARCH_CHIP="amebad"
# CONFIG_ARCH_CORTEXM7 is not set
CONFIG_ARCH_CORTEXM33=y
# CONFIG_ARCH_CORTEXM55 is not set
# CONFIG_ARCH_CORTEXA9 is not set
# CONFIG_ARCH_CORTEXR4 is not set
# CONFIG_ARCH_CORTEXA32 is not set
# CONFIG_ARCH_ARMV7M_FAMILY is not set
CONFIG_ARCH_ARMV8M_FAMILY=y
# CONFIG_ARCH_ARMV7R_FAMILY is not set
# CONFIG_ARCH_ARMV7A_FAMILY is not set
CONFIG_ARCH_FAMILY="armv8-m"
CONFIG_ARCH_HAVE_CMNVECTOR=y
CONFIG_ARM_CMNVECTOR=y
Expand Down Expand Up @@ -124,7 +134,7 @@ CONFIG_ARMV8M_DCACHE=y
# CONFIG_ARMV8M_TOOLCHAIN_CODESOURCERYL is not set
CONFIG_ARMV8M_TOOLCHAIN_GNU_EABIL=y
# CONFIG_ARMV8M_TOOLCHAIN_CLANGL is not set
# CONFIG_ARMV8M_TARGET2_PREL is not set
CONFIG_ARMV8M_TARGET2_PREL=y
# CONFIG_ARMV8M_HAVE_STACKCHECK is not set
# CONFIG_ARMV8M_ITMSYSLOG is not set

Expand All @@ -146,11 +156,7 @@ CONFIG_RTL8721D_UART2=y
CONFIG_AMEBAD_I2CTIMEOSEC=0
CONFIG_AMEBAD_I2CTIMEOMS=500
CONFIG_AMEBAD_I2CTIMEOTICKS=500
CONFIG_RTL8721D_SPI=y
CONFIG_SPI1_MASTER=y
# CONFIG_CONFIG_SPI_CS is not set
CONFIG_CONFIG_SPI_EXCHANGE=y
CONFIG_CONFIG_SPI_CMDDATA=y
# CONFIG_AMEBAD_SPI is not set

#
# Realtek RTL8721D WIFI Support
Expand All @@ -168,6 +174,11 @@ CONFIG_AMEBAD_WIFI=y
CONFIG_AMEBAD_TRUSTZONE=y
# CONFIG_AMEBAD_RDP is not set

#
# Realtek RTL8721D CMSIS_NN Support
#
# CONFIG_AMEBAD_CMSIS_NN is not set

#
# Architecture Options
#
Expand All @@ -179,16 +190,21 @@ CONFIG_ARCH_HAVE_IRQPRIO=y
# CONFIG_ARCH_HAVE_COHERENT_DCACHE is not set
# CONFIG_ARCH_HAVE_ADDRENV is not set
# CONFIG_ARCH_NEED_ADDRENV_MAPPING is not set
# CONFIG_ARCH_HAVE_MULTICPU is not set
# CONFIG_ARCH_HAVE_TESTSET is not set
CONFIG_ARCH_HAVE_VFORK=y
# CONFIG_ARCH_HAVE_MMU is not set
CONFIG_ARCH_HAVE_MPU=y
# CONFIG_ARCH_NAND_HWECC is not set
# CONFIG_ARCH_HAVE_EXTCLK is not set
# CONFIG_ARCH_HAVE_POWEROFF is not set
CONFIG_ARCH_HAVE_RESET=y
# CONFIG_ARCH_HAVE_FETCHADD is not set
CONFIG_ARCH_USE_MPU=y
CONFIG_ARCH_IRQPRIO=y
# CONFIG_ARCH_TASKDUMP is not set
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0
# CONFIG_ENDIAN_BIG is not set
# CONFIG_ARCH_IDLE_CUSTOM is not set
# CONFIG_ARCH_HAVE_RAMFUNCS is not set
Expand Down Expand Up @@ -225,6 +241,8 @@ CONFIG_BOOT_RUNFROMFLASH=y
#
# Boot Memory Configuration
#
CONFIG_RAM_START=0x0
CONFIG_RAM_SIZE=0
CONFIG_RAM_KREGIONx_START="0x10005000,0x02000000,0x02100000"
CONFIG_RAM_KREGIONx_SIZE="466944,1048576,2859008,"
CONFIG_RAM_KREGIONx_HEAP_INDEX="0,0,1,"
Expand Down Expand Up @@ -285,6 +303,7 @@ CONFIG_FLASH_PART_NAME="bl1,bl2,reserved,ss,system_data,kernel,kernel,common,com
# CONFIG_ARCH_BOARD_HAVE_SECOND_FLASH is not set
CONFIG_AUTOMOUNT=y
CONFIG_AUTOMOUNT_USERFS=y
# CONFIG_BOARD_USBDEV_SERIALSTR is not set

#
# SE Selection
Expand Down Expand Up @@ -339,7 +358,10 @@ CONFIG_PREALLOC_TIMERS=8
#
# Tasks and Scheduling
#
# CONFIG_SPINLOCK is not set
CONFIG_INIT_ENTRYPOINT=y
# CONFIG_IRQCOUNT is not set
# CONFIG_SCHED_RESUMESCHEDULER is not set
CONFIG_RR_INTERVAL=10
CONFIG_TASK_NAME_SIZE=31
CONFIG_MAX_TASKS=32
Expand Down Expand Up @@ -977,9 +999,9 @@ CONFIG_MTD_SMART_JOURNALING=y
# CONFIG_ARASTORAGE is not set

#
# Light Weight AI Framework
# AI Framework
#
# CONFIG_LW_AIFW is not set
# CONFIG_AIFW is not set

#
# AraUI Framework
Expand Down Expand Up @@ -1181,7 +1203,7 @@ CONFIG_CXX_VERSION_11=y
# LLVM C++ Library (libcxx)
#
CONFIG_LIBCXX=y
# CONFIG_LIBCXX_EXCEPTION is not set
CONFIG_LIBCXX_EXCEPTION=y
CONFIG_LIBCXX_IOSTREAM_BUFSIZE=32
CONFIG_LIBCXX_HAVE_LIBSUPCXX=y

Expand Down Expand Up @@ -1225,6 +1247,7 @@ CONFIG_ELF_ALIGN_LOG2=2
CONFIG_ELF_STACKSIZE=2048
CONFIG_ELF_BUFFERSIZE=32
CONFIG_ELF_BUFFERINCR=32
CONFIG_ELF_EXIDX_SECTNAME=".ARM.exidx"
CONFIG_ELF_EXCLUDE_SYMBOLS=y
CONFIG_ELF_CACHE_READ=y
CONFIG_ELF_CACHE_BLOCK_SIZE=2048
Expand Down Expand Up @@ -1268,6 +1291,7 @@ CONFIG_BUILTIN_APPS=y
#
# Board Specific Demos
#
# CONFIG_EXAMPLES_AMEBA_MIPI is not set
# CONFIG_EXAMPLES_SSTORAGE is not set
# CONFIG_EXAMPLES_SECURE_WORLD is not set
# CONFIG_EXAMPLES_WIFICSI is not set
Expand Down Expand Up @@ -1301,8 +1325,8 @@ CONFIG_EXAMPLES_HELLOXX=y
#
# CONFIG_EXAMPLES_LIBTUV is not set
# CONFIG_EXAMPLES_LWNL_SAMPLE is not set
# CONFIG_EXAMPLES_MEMORY_FRAGMENTATION_TEST is not set
CONFIG_EXAMPLES_MEM_PROTECT_TEST=y
# CONFIG_EXAMPLES_MEMORY_FRAGMENTATION_TEST is not set
# CONFIG_EXAMPLES_NETTEST is not set

#
Expand Down Expand Up @@ -1462,7 +1486,6 @@ CONFIG_EXAMPLES_WIFIMANAGER_AP_LIST_ITEMS_COUNT=10
# Platform-specific Support
#
# CONFIG_PLATFORM_CONFIGDATA is not set
# CONFIG_HAVE_CXXINITIALIZE is not set

#
# Shell
Expand Down
12 changes: 10 additions & 2 deletions build/configs/rtl8730e/Make.defs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ else ifeq ($(CONFIG_CXX_VERSION_14),y)
else
CXXFLAGS += -std=c++11
endif
CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -ffunction-sections -fdata-sections -D__GLIBCXX__
CXXFLAGS += -pedantic -D_DEBUG -D_LIBCPP_BUILD_STATIC -ffunction-sections -fdata-sections -D__GLIBCXX__ -DCONFIG_WCHAR_BUILTIN
endif

ifeq ($(CONFIG_LIBCXX_EXCEPTION),y)
Expand Down Expand Up @@ -241,7 +241,8 @@ ifeq ($(CONFIG_APP_BINARY_SEPARATION),y)
CELFFLAGS = $(CFLAGS) -mlong-calls # --target1-abs
CXXELFFLAGS = $(CXXFLAGS) -mlong-calls # --target1-abs

LDELFFLAGS = -r -e main
LDELFFLAGS = -r
LDELFENTRY = -e main

ifeq ($(WINTOOL),y)
LDELFFLAGS += -T "${shell cygpath -w $(TOPDIR)/userspace/userspace_apps.ld}"
Expand All @@ -250,6 +251,13 @@ else
endif
endif

ifeq ($(CONFIG_LIBCXX_EXCEPTION),y)
#this symbol __gnu_Unwind_Find_exidx should be present in all the cpp binaries (apps, common)
#as it is used to decide which exception table. Also, --force-group-allocation flag is required
#to not generate additional sections with group flag, as we dont support loading such sections.
LDELFFLAGS += --require-defined __gnu_Unwind_Find_exidx --force-group-allocation
endif

LDFLAGS += --gc-sections
LDFLAGS += --defsym=CONFIG_IDLETHREAD_STACKSIZE=$(CONFIG_IDLETHREAD_STACKSIZE)

Expand Down
14 changes: 11 additions & 3 deletions build/configs/rtl8730e/loadable_apps/defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@ CONFIG_ARMV7A_WAYSIZE_16KB=y
# CONFIG_ARMV7A_TOOLCHAIN_BUILDROOT is not set
CONFIG_ARMV7A_TOOLCHAIN_GNU_EABI=y
# CONFIG_ARMV7A_TOOLCHAIN_GNU_OABI is not set
CONFIG_ARMV7A_TARGET2_PREL=y
# CONFIG_ARMV7A_DECODEFIQ is not set

#
Expand All @@ -161,6 +162,7 @@ CONFIG_AMEBASMART_SPI=y
CONFIG_AMEBASMART_SPI0=y
CONFIG_AMEBASMART_SPI1=y
CONFIG_AMEBASMART_SPI_EXCHANGE=y
# CONFIG_SPI_CS is not set
# CONFIG_AMEBASMART_MIPI is not set
# CONFIG_AMEBASMART_I2C is not set
# CONFIG_AMEBASMART_I2S is not set
Expand Down Expand Up @@ -216,6 +218,7 @@ CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0
# CONFIG_ENDIAN_BIG is not set
# CONFIG_ARCH_IDLE_CUSTOM is not set
# CONFIG_ARCH_CUSTOM_PMINIT is not set
# CONFIG_ARCH_HAVE_RAMFUNCS is not set
# CONFIG_ARCH_HAVE_RAMVECTORS is not set
# CONFIG_SUPPRESS_INTERRUPTS is not set
Expand Down Expand Up @@ -968,6 +971,7 @@ CONFIG_FS_AUTOMOUNT_PROCFS=y
# CONFIG_FS_PROCFS_EXCLUDE_MTD is not set
# CONFIG_FS_PROCFS_EXCLUDE_PARTITIONS is not set
# CONFIG_FS_PROCFS_EXCLUDE_SMARTFS is not set
# CONFIG_FS_PROCFS_EXCLUDE_POWER is not set
# CONFIG_FS_ROMFS is not set
# CONFIG_FS_TMPFS is not set

Expand Down Expand Up @@ -1082,7 +1086,7 @@ CONFIG_PM_DEVNAME_LEN=32
CONFIG_PM_SLICEMS=100
CONFIG_PM_NDOMAINS=1
CONFIG_PM_MEMORY=2
# CONFIG_PM_DVFS is not set
CONFIG_PM_DVFS=y
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ritesh55555 Is it ok to enable this now?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will only enable an api for now. No other effect on working of the system.

CONFIG_PM_COEFN=1
CONFIG_PM_COEF1=1
CONFIG_PM_COEF2=1
Expand Down Expand Up @@ -1123,6 +1127,7 @@ CONFIG_DEBUG_FS_ERROR=y
CONFIG_DEBUG_BLE=y
CONFIG_DEBUG_BLE_ERROR=y
CONFIG_DEBUG_PM=y
# CONFIG_DEBUG_PM_ERROR is not set
# CONFIG_DEBUG_SCHED is not set
# CONFIG_DEBUG_SYSCALL is not set
# CONFIG_DEBUG_TASH is not set
Expand Down Expand Up @@ -1199,7 +1204,7 @@ CONFIG_LIBC_SCANSET=y
# CONFIG_NOPRINTF_LONGLONG_TO_ASCII is not set
CONFIG_LIBC_IOCTL_VARIADIC=y
CONFIG_LIBC_WCHAR=y
# CONFIG_LIBC_LOCALE is not set
CONFIG_LIBC_LOCALE=y
CONFIG_LIB_RAND_ORDER=1
# CONFIG_EOL_IS_CR is not set
# CONFIG_EOL_IS_LF is not set
Expand Down Expand Up @@ -1260,7 +1265,7 @@ CONFIG_CXX_NEWLONG=y
# LLVM C++ Library (libcxx)
#
CONFIG_LIBCXX=y
# CONFIG_LIBCXX_EXCEPTION is not set
CONFIG_LIBCXX_EXCEPTION=y
CONFIG_LIBCXX_IOSTREAM_BUFSIZE=32
CONFIG_LIBCXX_HAVE_LIBSUPCXX=y

Expand Down Expand Up @@ -1319,6 +1324,7 @@ CONFIG_ELF_ALIGN_LOG2=2
CONFIG_ELF_STACKSIZE=8192
CONFIG_ELF_BUFFERSIZE=32
CONFIG_ELF_BUFFERINCR=32
CONFIG_ELF_EXIDX_SECTNAME=".ARM.exidx"
CONFIG_ELF_EXCLUDE_SYMBOLS=y
CONFIG_ELF_CACHE_READ=y
CONFIG_ELF_CACHE_BLOCK_SIZE=2048
Expand Down Expand Up @@ -1387,6 +1393,7 @@ CONFIG_EXAMPLES_HELLO=y
# CONFIG_EXAMPLES_IOTJS_STARTUP is not set
# CONFIG_EXAMPLES_KERNEL_SAMPLE is not set
# CONFIG_EXAMPLES_KERNEL_UPDATE is not set
# CONFIG_EXAMPLES_LCD is not set

#
# Libcoap
Expand All @@ -1407,6 +1414,7 @@ CONFIG_EXAMPLES_HELLO=y
# CONFIG_EXAMPLES_TLS_BENCHMARK is not set
# CONFIG_EXAMPLES_TLS_HANDSHAKE is not set
# CONFIG_EXAMPLES_TLS_SECLINK is not set
# CONFIG_EXAMPLES_POWER is not set

#
# Protocol Buffer
Expand Down