<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rt-thread.git/components/libc/posix/libdl, branch copilot/fix-dlopen-name-mismatch</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.</subtitle>
<id>http://cgit.235523.xyz/rt-thread.git/atom/components/libc/posix/libdl?h=copilot%2Ffix-dlopen-name-mismatch</id>
<link rel='self' href='http://cgit.235523.xyz/rt-thread.git/atom/components/libc/posix/libdl?h=copilot%2Ffix-dlopen-name-mismatch'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/'/>
<updated>2026-03-19T02:37:31Z</updated>
<entry>
<title>[libc][libdl] Improve documentation and comments for dlmodule_extract_name</title>
<updated>2026-03-19T02:37:31Z</updated>
<author>
<name>copilot-swe-agent[bot]</name>
<email>198982749+Copilot@users.noreply.github.com</email>
</author>
<published>2026-03-19T02:37:31Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=7683f3d7488f4fc6e58bebe1d96fc13bba6ac802'/>
<id>urn:sha1:7683f3d7488f4fc6e58bebe1d96fc13bba6ac802</id>
<content type='text'>
Clarify the behavior of edge cases in documentation:
- Added more examples to the function documentation
- Fixed misleading comment about dot handling
- Clarified the defensive check purpose

Co-authored-by: BernardXiong &lt;1241087+BernardXiong@users.noreply.github.com&gt;
</content>
</entry>
<entry>
<title>[libc][libdl] Extract name extraction to shared function and fix edge cases</title>
<updated>2026-03-19T02:36:09Z</updated>
<author>
<name>copilot-swe-agent[bot]</name>
<email>198982749+Copilot@users.noreply.github.com</email>
</author>
<published>2026-03-19T02:36:09Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=79d62050aaf21ab8b4de3dcb410ecb0e58235b64'/>
<id>urn:sha1:79d62050aaf21ab8b4de3dcb410ecb0e58235b64</id>
<content type='text'>
Address code review feedback:
1. Extract path stripping logic into shared dlmodule_extract_name() function
   to avoid code duplication between dlopen() and _dlmodule_set_name().
2. Fix edge case handling for filenames starting with dot (e.g., .hidden).
3. Add proper documentation for the new function.

This ensures consistent module name extraction across all code paths.

Co-authored-by: BernardXiong &lt;1241087+BernardXiong@users.noreply.github.com&gt;
</content>
</entry>
<entry>
<title>[libc][libdl] Fix dlopen() failing to find already-loaded modules</title>
<updated>2026-03-19T02:34:34Z</updated>
<author>
<name>copilot-swe-agent[bot]</name>
<email>198982749+Copilot@users.noreply.github.com</email>
</author>
<published>2026-03-19T02:34:34Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=8a99de17472a472ee46bbb7c795d09a2937e9177'/>
<id>urn:sha1:8a99de17472a472ee46bbb7c795d09a2937e9177</id>
<content type='text'>
Fix name mismatch between dlmodule_find() and _dlmodule_set_name() that
caused dlopen() to always reload modules instead of reusing them:

1. In dlopen(): Extract module name from full path before calling
   dlmodule_find(), matching the stripped name stored by _dlmodule_set_name().
   This allows dlopen() to properly find and reuse already-loaded modules.

2. In _dlmodule_set_name(): Fix bug where extension detection searched
   the entire path instead of just the filename portion. For paths like
   "/mnt/v1.2/app.so", it would incorrectly find "." in "v1.2" directory
   name instead of the ".so" extension.

Fixes: Module reloading on every dlopen() call, memory leaks from
duplicate module instances, and dlclose() cleanup issues.

Co-authored-by: BernardXiong &lt;1241087+BernardXiong@users.noreply.github.com&gt;
</content>
</entry>
<entry>
<title>components: libc: fix reset static variable unsolved in dlmodule_load_shared_object</title>
<updated>2026-03-12T05:59:15Z</updated>
<author>
<name>kenneth.liu</name>
<email>kenneth.liu@sophgo.com</email>
</author>
<published>2026-03-10T09:02:54Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=cffaa514e23778ea3700dbac1fbded9a4faeb775'/>
<id>urn:sha1:cffaa514e23778ea3700dbac1fbded9a4faeb775</id>
<content type='text'>
[Problem Description]
In the dlmodule_load_shared_object function,
if a module loading fails once due to an unresolved symbol,
all subsequent attempts to load any module will fail.
The system becomes unable to load modules correctly until a reboot.

[Problem Analysis]
The root cause is that the variable unsolved is defined as static.
Static variables retain their value between function calls.
If a relocation error occurs, unsolved is set to RT_TRUE.
However, when the function returns with an error, the value of unsolved is not reset.
Consequently, on the next function call, unsolved remains RT_TRUE from the previous execution.
This causes the check if (unsolved) to trigger immediately (or after the loop),
forcing the function to return an error regardless of whether the current module is valid or not.

[Solution]
Reset the unsolved variable to RT_FALSE before returning the error code -RT_ERROR.
This ensures the variable is in a clean state for the next function call, preventing state leakage between invocations.

Signed-off-by: Liu Gui &lt;kenneth.liu@sophgo.com&gt;
</content>
</entry>
<entry>
<title>[components][libc][posix][libdl] Optimization: Redundant calculations in a for loop</title>
<updated>2025-12-18T05:57:07Z</updated>
<author>
<name>laidene</name>
<email>228526434@qq.com</email>
</author>
<published>2025-12-15T06:04:50Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=d09135f76b1de9c170c6ccd69cd7aa5bc86957b1'/>
<id>urn:sha1:d09135f76b1de9c170c6ccd69cd7aa5bc86957b1</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Reorganize Group names in build system for clarity and IDE integration #10923</title>
<updated>2025-11-16T03:40:53Z</updated>
<author>
<name>Copilot</name>
<email>198982749+Copilot@users.noreply.github.com</email>
</author>
<published>2025-11-16T03:40:53Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=30e1e5e9dcdaff17258edf70b9f9783e08356288'/>
<id>urn:sha1:30e1e5e9dcdaff17258edf70b9f9783e08356288</id>
<content type='text'>
</content>
</entry>
<entry>
<title>components: libc: fix pointer-to-integer cast warnings and address truncation</title>
<updated>2025-02-22T19:16:00Z</updated>
<author>
<name>kenneth.liu</name>
<email>kenneth.liu@sophgo.com</email>
</author>
<published>2025-02-22T05:20:11Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=4940bb10515316791f1940a59bfeaeebee35ec87'/>
<id>urn:sha1:4940bb10515316791f1940a59bfeaeebee35ec87</id>
<content type='text'>
[Problem Description]
1. When enabling RT_USING_MODULE=y, compilation warnings occur:
   dlelf.c:386:27: warning: cast from pointer to integer of different size
   dlelf.c:398:25: warning: cast from pointer to integer of different size
   dlelf.c:408:24: warning: cast from pointer to integer of different size

2. On RV64 architectures (e.g. Sophgo SG2042 with RISC-V Sv39 and 40-bit physical addressing),
   dlsym may fail when accessing addresses beyond 32-bit range.

[Root Cause]
In dlmodule_load_relocated_object() and dlmodule_symbol_find(),
pointer is cast to rt_uint32_t which truncates:
| rt_ubase_t rodata_addr = (rt_uint32_t)ptr;
This causes:
- Warnings on 64-bit systems (pointer width &gt; 32-bit)
- Actual address truncation on RV64 when physical address exceeds 32-bit

[Solution]
Replace rt_uint32_t with architecture-adaptive rt_ubase_t:
| rt_ubase_t rodata_addr = (rt_ubase_t)ptr;
The rt_ubase_t is defined in include/rttypes.h as:
| #ifdef ARCH_CPU_64BIT
|   typedef rt_uint64_t rt_ubase_t;
| #else
|   typedef rt_uint32_t rt_ubase_t;
| #endif
This ensures correct width casting for both 32/64-bit architectures.

Signed-off-by: Liu Gui &lt;kenneth.liu@sophgo.com&gt;
</content>
</entry>
<entry>
<title>components: libc: fix array overflow in rt_object name assignment</title>
<updated>2025-02-21T03:38:06Z</updated>
<author>
<name>kenneth.liu</name>
<email>kenneth.liu@sophgo.com</email>
</author>
<published>2025-02-20T12:25:30Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=a5b26bb588303f7b503156d634e05d21d873a245'/>
<id>urn:sha1:a5b26bb588303f7b503156d634e05d21d873a245</id>
<content type='text'>
[Problem Description]
When assigning name to rt_object, strncpy() uses size equal to RT_NAME_MAX,
which causes missing null-terminator and overflows into adjacent 'type' field.
This corruption leads to unexpected system behavior.

[Problem Analysis]
The rt_object structure defines:
| char name[RT_NAME_MAX] | -&gt; buffer
| rt_uint8_t type        | -&gt; adjacent field

Original code calculates size as:
size = end - first + 1;
if (size &gt; RT_NAME_MAX) size = RT_NAME_MAX;

When size equals RT_NAME_MAX, strncpy() will copy exactly RT_NAME_MAX bytes
without adding terminating '\0', causing two issues:
1. name buffer is not null-terminated
2. The implicit null-byte writes beyond name[] into type field

[Solution]
Change boundary check from:
if (size &gt; RT_NAME_MAX) size = RT_NAME_MAX;
to:
if (size &gt;= RT_NAME_MAX) size = RT_NAME_MAX - 1;

This ensures:
1. Always leaves space for null-terminator
2. Prevents overflow into type field
3. Maintains maximum valid name length (RT_NAME_MAX-1 + '\0')

Signed-off-by: Liu Gui &lt;kenneth.liu@sophgo.com&gt;
</content>
</entry>
<entry>
<title>[libc] add comments for libdl APIs.</title>
<updated>2024-11-12T23:58:34Z</updated>
<author>
<name>ligr</name>
<email>liguorui1213@163.com</email>
</author>
<published>2024-11-12T07:38:28Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=f0934630c46a3111cf06ab2777e368fc04050292'/>
<id>urn:sha1:f0934630c46a3111cf06ab2777e368fc04050292</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix Compilation error in "driver.c", "completion_up.c", "syslog.c" and "dlmodule.c". (#9093)</title>
<updated>2024-06-26T15:25:23Z</updated>
<author>
<name>Rui</name>
<email>1413577909@qq.com</email>
</author>
<published>2024-06-26T15:25:23Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/rt-thread.git/commit/?id=3b1d4e9222f5a7f3f3d65f90d7fe8de4a9abaf4e'/>
<id>urn:sha1:3b1d4e9222f5a7f3f3d65f90d7fe8de4a9abaf4e</id>
<content type='text'>
</content>
</entry>
</feed>
