Ville Juven
fb12b6e3a9
libelf/elf_addrenv_free(): Don't instantiate address environment prior to destroying it
...
Same as with group_free(), there is no need to instantiate the address
environment to destroy it.
The only problem was the ARM implementation modified the L1 mappings
in up_addrenv_destroy(), which it no longer does.
2023-01-18 11:02:19 +08:00
Xiang Xiao
69575975f4
binfmt: elf_addrenv_free select addrenv before up_addrenv_destroy
...
to avoid up_addrenv_destroy delete the current task page table
this patch fix the below panic due to elf contain the unresolved symbol:
qemu-system-arm -s -S -semihosting -M sabrelite -m 1024 -smp 4 -kernel nuttx -nographic -net nic -net user,hostfwd=tcp:127.0.0.1:10023-10.0.2.15:23,hostfwd=tcp:127.0.0.1:10021-10.0.2.15:21,hostfwd=tcp:127.0.0.1:15001-10.0.2.15:5001,hostfwd=tcp:127.0.0.1:15555-10.0.2.15:5555
ABDGHIJKNOPQ
[ 0.470000] elf_relocate: Section 2 reloc 163: Failed to get value of symbol[1505]: -2
[ 0.530000] arm_dataabort: Data abort. PC: 108323de DFAR: 80202778 DFSR: 00000005
[ 0.530000] up_assert: Assertion failed at file:armv7-a/arm_dataabort.c line: 161 task: /system/bin/init
[ 0.530000] arm_registerdump: R0: 10845820 R1: 80202778 R2: 00000001 R3: 80202778
[ 0.530000] arm_registerdump: R4: 80202624 R5: 80202634 R6: 80200330 FP: 80202628
[ 0.530000] arm_registerdump: R8: 802026b4 SB: 00000000 SL: 8000dbfe R11: 00000000
[ 0.530000] arm_registerdump: IP: 108453e0 SP: 108456b0 LR: 1082b091 PC: 108323de
[ 0.530000] arm_registerdump: CPSR: a000007f
[ 0.530000] arm_dump_stack: IRQ Stack:
[ 0.530000] arm_dump_stack: sp: 10845510
[ 0.530000] arm_dump_stack: base: 108397c0
[ 0.530000] arm_dump_stack: size: 00000800
[ 0.530000] arm_dump_stack: ERROR: IRQ Stack pointer is not within the stack
[ 0.530000] arm_stackdump: 10839f00: deadbeef 00adbeef 00000001 10844990 00000000 00000000 80300000 1082f2ef
[ 0.530000] arm_stackdump: 10839f20: deadbeef 00000000 deadbeef 10844990 80200000 1082f2ff 1083d980 1082f311
[ 0.530000] arm_stackdump: 10839f40: 00000002 10814659 00000004 00000002 deadbeef 1081469b 00000001 00000000
[ 0.530000] arm_stackdump: 10839f60: 10845460 00000057 10844a90 00000002 deadbeef 10808d1b 10845460 00000057
[ 0.530000] arm_stackdump: 10839f80: 00dfbeef 00000057 00000000 00000002 deadbeef 10801d1f 10845460 00000057
[ 0.530000] arm_stackdump: 10839fa0: 00000000 10800fc5 deadbeef 10845460 00000057 00000057 deadbeef 108000a0
[ 0.530000] arm_dump_stack: User Stack:
[ 0.530000] arm_dump_stack: sp: 108456b0
[ 0.530000] arm_dump_stack: base: 80202038
[ 0.530000] arm_dump_stack: size: 000007c8
[ 0.530000] arm_dump_stack: ERROR: User Stack pointer is not within the stack
[ 0.530000] arm_dump_stack: Kernel Stack:
[ 0.530000] arm_dump_stack: sp: 108456b0
[ 0.530000] arm_dump_stack: base: 10844c10
[ 0.530000] arm_dump_stack: size: 00000c00
[ 0.530000] arm_stackdump: 108456a0: 00000000 108453e0 108323de a000007f 80202778 10845820 00000000 10812aa9
[ 0.530000] arm_stackdump: 108456c0: 00000000 1083ff90 10845838 00000000 001f001e 10812b2f 10840008 1083ff90
[ 0.530000] arm_stackdump: 108456e0: 10845840 10812fab 10845840 1083ff90 005f0000 10844990 10845818 10845ff8
[ 0.530000] arm_stackdump: 10845700: 10845ff8 10845838 10845840 10812017 fffffffe 10845820 80202624 1082b091
[ 0.530000] arm_stackdump: 10845720: 00000000 00000000 80202778 10841d40 00000000 10845840 10845820 fffffffe
[ 0.530000] arm_stackdump: 10845740: 00000000 1082998b 00000000 80200330 802026b4 80202778 10845788 0084578c
[ 0.530000] arm_stackdump: 10845760: 10841d40 10844990 00000000 108306fb 00000000 80202634 802026b4 80202634
[ 0.530000] arm_stackdump: 10845780: 80202778 80202628 00000000 00000000 00000000 00000000 00000000 1083085f
[ 0.530000] arm_stackdump: 108457a0: 80200330 00000000 00000000 00000000 80202634 80202624 80202778 80202628
[ 0.530000] arm_stackdump: 108457c0: 00000000 00000000 00000000 80202614 80202624 1080f26b 802026b4 80200330
[ 0.530000] arm_stackdump: 108457e0: 80202624 80202778 80202628 0000001f 00000000 80202634 802026b4 108012c3
[ 0.530000] arm_showtasks: PID PRI STACK USED FILLED COMMAND
[ 0.530000] arm_showtasks: ---- ---- 2048 188 9.1% irq
[ 0.530000] arm_dump_task: 0 0 2024 1240 61.2% Idle Task
[ 0.530000] arm_dump_task: 1 224 1992 504 25.3% hpwork 0x1083e0f8
[ 0.530000] arm_dump_task: 2 100 1992 504 25.3% lpwork 0x1083e110
after apply this patch, nsh report error instead of crash:
qemu-system-arm -s -S -semihosting -M sabrelite -m 1024 -smp 4 -kernel nuttx -nographic -net nic -net user,hostfwd=tcp:127.0.0.1:10023-10.0.2.15:23,hostfwd=tcp:127.0.0.1:10021-10.0.2.15:21,hostfwd=tcp:127.0.0.1:15001-10.0.2.15:5001,hostfwd=tcp:127.0.0.1:15555-10.0.2.15:5555
ABDGHIJKNOPQ
[ 0.440000] elf_relocate: Section 2 reloc 163: Failed to get value of symbol[1505]: -2
telnetd [4:100]
NuttShell (NSH) NuttX-11.0.0
nsh> nsh: telnetd: command not found
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
2022-11-03 00:08:12 +01:00
Ville Juven
47e85b68fe
arch/addrenv: Change text write enable/disable to generic mprot
...
Implement a generic access rights modification procedure instead
of the procedures that only do one thing (enable/disable write)
to one section (text).
2022-05-12 22:28:31 +08:00
Ville Juven
fdef3a7b92
binfmt/libelf: Fix function description field
...
Copy&paste error, wrong description field used
2022-05-04 10:34:24 +03:00
Ville Juven
9af8b740e6
Elf loader: give temporary write access to user .text memory
...
When the .elf file is loaded from disk, the kernel must be given write
access to the allocated .text section in the task's address environment.
The access is removed after the elf is loaded and relocations are done.
NOTE:
The reason this works for the ARM implementation, is that the ARM MMU
can be configured to give write access for the privileged mode, but
revoke write access for the user mode.
Regardless, it would be smart to revoke write access even for the
kernel, when the kernel does not need it. This framework allows doing
that, if someone wishes to take up the task.
2022-05-03 21:25:25 +09:00
YAMAMOTO Takashi
e596d5bd5e
binfmt/libelf: Implement sh_addralign handling
...
Basically, mirror the following two commits from modlib.
It's shame we have two copies of elf loaders.
```
commit 51490bad55
Author: YAMAMOTO Takashi <yamamoto@midokura.com>
Date: Wed Apr 14 17:07:39 2021 +0900
modlib: Implement sh_addralign handling
I've seen a module with 16 bytes .rodata alignment for xmm operations.
It was getting SEGV on sim/Linux because of the alignment issue.
The same module binary seems working fine after applying this patch.
Also, tested on sim/macOS and esp32 on qemu,
using a module with an artificially large alignment. (64 bytes)
```
```
commit 418e11b8b3
Author: YAMAMOTO Takashi <yamamoto@midokura.com>
Date: Thu Apr 15 11:33:48 2021 +0900
modlib: Always use separate allocation for text and data
Pros:
* Reduce code differences
* Smaller allocations for !CONFIG_ARCH_USE_MODULE_TEXT
Cons:
* Likely to use more memory for !CONFIG_ARCH_USE_MODULE_TEXT in total
Tested with:
* sim:module on macOS
* esp32-devkit:nsh + CONFIG_MODULE on qemu
* lm3s6965-ek:qemu-protected + CONFIG_EXAMPLES_SOTEST on qemu
```
2022-01-28 16:23:23 +08:00
Abdelatif Guettouche
af5e0c620f
Rename MODULE_TEXT to TEXT_HEAP as the latter is more generic.
...
Signed-off-by: Abdelatif Guettouche <abdelatif.guettouche@espressif.com>
2021-06-18 07:14:17 -05:00
Masayuki Ishikawa
4d492104a7
binfmt: Introduce a separate text memory for ELF
...
Summary:
- This commit introduces a separate text memory for ELF
- The logic is similar to modlib
Impact:
- None
Testing:
- Tested with spresense:elf
- NOTE: needs separate commits
Signed-off-by: Masayuki Ishikawa <Masayuki.Ishikawa@jp.sony.com>
2021-06-02 02:27:04 -05:00
Alin Jerpelea
f9fb182809
Author: Gregory Nutt: update licenses to Apache
...
Update files from Gregory Nutt to Apache 2.0 license.
Signed-off-by: Alin Jerpelea <alin.jerpelea@sony.com>
2021-02-05 12:15:56 -03:00
YAMAMOTO Takashi
8ad9d1e0b4
libelf: Appease nxstyle complaints
...
Also, fix a minor typo.
2020-03-26 02:51:34 -05:00
Xiang Xiao
0edcd6b85e
binfmt/libelf, libs/libc/modlib: Optimize elf load speed: (1) Don't zero out memory, (2) Reduce the initial buffer size to 32 bytes.
2019-01-26 11:34:40 -06:00
Xiang Xiao
095e28d45e
binfmt/, binfmt/libelf/, include/nuttx, libs/libc/machine, libs/libc/modlib, and others: Move elf related arch function to include/nuttx/elf.h because the implementation is located in libs/libc/machine and in order to avoid the conflict with the 3rd party libraries and clean up the file inclusion: (1) Remove redundant elf32.h, (2) Remove nuttx/binfmt/elf.h in libs/libc/machine, (2) Remove nuttx/binfmt/elf.h in modlib, and (4) Rmove nuttx/module.h in modlib.
2019-01-26 11:18:45 -06:00
Gregory Nutt
a1469a3e95
Add CONFIG_DEBUG_ERROR. Change names of *dbg() * *err()
2016-06-11 15:50:49 -06:00
Gregory Nutt
48271cca05
Make some file section headers more consistent with standard
2015-04-08 08:29:03 -06:00
Gregory Nutt
205c23b9d6
Add logic to initialize the per-process user heap when each user process is started
2014-09-10 15:55:36 -06:00
Gregory Nutt
205260d5e2
Reanem kzalloc to kmm_zalloc for consistency
2014-08-31 17:34:44 -06:00
Gregory Nutt
9aca0c1c84
Rename kumalloc to kumm_malloc and kuzalloc to kumm_zalloc for consistency with other naming
2014-08-31 16:24:24 -06:00
Gregory Nutt
9ad7dae4c1
Rename kufree to kumm_free for consistency with other naming
2014-08-31 16:15:11 -06:00
Gregory Nutt
1725946447
Misc changed to get the SAMA5 ELF configuration with address environments working
2014-08-25 13:28:13 -06:00
Gregory Nutt
241a7e17bd
addrenv interface changes: up_addrenv_create() may need to create .text and .bss/.data separately because of differing access privileges (read/execute vs read/write). And, as a consequence, up_addrenv_vaddr() needs to be split into up_addrenv_vtext(0 and up_addrenv_vdata().
2014-08-24 11:54:14 -06:00
Gregory Nutt
1624e2fbcf
Change CONFIG_ADDRENV to CONFIG_ARCH_ADDRENV; change how it is selected -- the architecure must first declare support
2014-08-24 06:42:11 -06:00
Gregory Nutt
bc46b447dc
Fix all occurrences of "the the" in documentation and comments
2013-08-27 09:40:19 -06:00
patacongo
1c52dce216
More changes for a kernel-mode allocator (more to be done)
...
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5724 42af7a65-404d-4744-a932-0658087f49c3
2013-03-09 21:12:20 +00:00
patacongo
2545f5c1a9
Verify PATH variable in apps/examples/elf
...
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5445 42af7a65-404d-4744-a932-0658087f49c3
2012-12-19 22:18:30 +00:00
patacongo
a160442b78
Incorporate address environment interfaces in binfmt/ logic
...
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5443 42af7a65-404d-4744-a932-0658087f49c3
2012-12-19 17:54:26 +00:00