Skip to content

Commit 036a067

Browse files
cuiziweizwxiaoxiang781216
authored andcommitted
nuttx/libc:Add _dl_find_object and dl_iterate_phdr function.
Add _dl_find_object() function, because when cxx_exception configuration is enabled, a link error occurs and that function cannot be found. ld: /usr/lib/gcc/x86_64-linux-gnu/13/libgcc_eh.a(unwind-dw2-fde-dip.o): in function `_Unwind_Find_FDE': (.text+0x250c): undefined reference to `_dl_find_object' Signed-off-by: cuiziwei <cuiziwei@xiaomi.com>
1 parent 8d7ee79 commit 036a067

File tree

4 files changed

+64
-3
lines changed

4 files changed

+64
-3
lines changed

arch/x86_64/src/cmake/platform.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ if(CONFIG_SCHED_GCOV)
7070
list(APPEND EXTRA_LIB ${extra_library})
7171
endif()
7272

73+
if(CONFIG_CXX_EXCEPTION)
74+
execute_process(
75+
COMMAND ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} ${NUTTX_EXTRA_FLAGS}
76+
--print-file-name=libgcc_eh.a
77+
OUTPUT_STRIP_TRAILING_WHITESPACE
78+
OUTPUT_VARIABLE extra_library)
79+
list(APPEND EXTRA_LIB ${extra_library})
80+
endif()
81+
7382
nuttx_add_extra_library(${EXTRA_LIB})
7483

7584
set(PREPROCESS ${CMAKE_C_COMPILER} ${CMAKE_C_FLAG_ARGS} -E -P -x c)

libs/libc/dlfcn/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
# ##############################################################################
2222
if(CONFIG_LIBC_DLFCN)
2323
target_sources(c PRIVATE lib_dlopen.c lib_dlclose.c lib_dlsym.c lib_dlerror.c
24-
lib_dlsymtab.c lib_dladdr.c)
24+
lib_dlsymtab.c)
2525
endif()
26+
target_sources(c PRIVATE lib_dlfind_object.c)

libs/libc/dlfcn/Make.defs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@ ifeq ($(CONFIG_LIBC_DLFCN),y)
2727
CSRCS += lib_dlopen.c lib_dlclose.c lib_dlsym.c lib_dlerror.c lib_dlsymtab.c
2828
CSRCS += lib_dladdr.c
2929

30+
endif
31+
32+
CSRCS += lib_dlfind_object.c
33+
3034
# Add the dlfcn.h directory to the build
3135

3236
DEPPATH += --dep-path dlfcn
3337
VPATH += :dlfcn
34-
35-
endif

libs/libc/dlfcn/lib_dlfind_object.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/****************************************************************************
2+
* libs/libc/dlfcn/lib_dlfind_object.c
3+
*
4+
* Licensed to the Apache Software Foundation (ASF) under one or more
5+
* contributor license agreements. See the NOTICE file distributed with
6+
* this work for additional information regarding copyright ownership. The
7+
* ASF licenses this file to you under the Apache License, Version 2.0 (the
8+
* "License"); you may not use this file except in compliance with the
9+
* License. You may obtain a copy of the License at
10+
*
11+
* http://www.apache.org/licenses/LICENSE-2.0
12+
*
13+
* Unless required by applicable law or agreed to in writing, software
14+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
16+
* License for the specific language governing permissions and limitations
17+
* under the License.
18+
*
19+
****************************************************************************/
20+
21+
/****************************************************************************
22+
* Included Files
23+
****************************************************************************/
24+
25+
#include <nuttx/compiler.h>
26+
#include <stddef.h>
27+
28+
/****************************************************************************
29+
* Private Type Declarations
30+
****************************************************************************/
31+
32+
struct dl_find_object;
33+
struct dl_phdr_info;
34+
35+
/****************************************************************************
36+
* Public Functions
37+
****************************************************************************/
38+
39+
int _dl_find_object(FAR void *address, FAR struct dl_find_object *result)
40+
{
41+
return -1;
42+
}
43+
44+
int dl_iterate_phdr(CODE int (*callback)(FAR struct dl_phdr_info *info,
45+
size_t size, FAR void *data),
46+
FAR void *data)
47+
{
48+
return 0;
49+
}

0 commit comments

Comments
 (0)