|
Revision tags: release/12.4.0, release/13.1.0, release/12.3.0, release/13.0.0, release/12.2.0 |
|
| #
1e2521ff |
| 27-Sep-2020 |
Edward Tomasz Napierala <[email protected]> |
Get rid of sa->narg. It serves no purpose; use sa->callp->sy_narg instead.
Reviewed by: kib Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D26458
|
|
Revision tags: release/11.4.0 |
|
| #
31174518 |
| 03-Dec-2019 |
John Baldwin <[email protected]> |
Use uintptr_t instead of register_t * for the stack base.
- Use ustringp for the location of the argv and environment strings and allow destp to travel further down the stack for the stackgap an
Use uintptr_t instead of register_t * for the stack base.
- Use ustringp for the location of the argv and environment strings and allow destp to travel further down the stack for the stackgap and auxv regions. - Update the Linux copyout_strings variants to move destp down the stack as was done for the native ABIs in r263349. - Stop allocating a space for a stack gap in the Linux ABIs. This used to hold translated system call arguments, but hasn't been used since r159992.
Reviewed by: kib Tested on: md64 (amd64, i386, linux64), i386 (i386, linux) Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D22501
show more ...
|
|
Revision tags: release/12.1.0, release/11.3.0 |
|
| #
1699546d |
| 01-Mar-2019 |
Edward Tomasz Napierala <[email protected]> |
Remove sv_pagesize, originally introduced with r100384.
In all of the architectures we have today, we always use PAGE_SIZE. While in theory one could define different things, none of the current arc
Remove sv_pagesize, originally introduced with r100384.
In all of the architectures we have today, we always use PAGE_SIZE. While in theory one could define different things, none of the current architectures do, even the ones that have transitioned from 32-bit to 64-bit like i386 and arm. Some ancient mips binaries on other systems used 8k instead of 4k, but we don't support running those and likely never will due to their age and obscurity.
Reviewed by: imp (who also contributed the commit message) Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D19280
show more ...
|
|
Revision tags: release/12.0.0, release/11.2.0 |
|
| #
2d19a20d |
| 26-Nov-2017 |
Ed Schouten <[email protected]> |
Correct some more places where TO_PTR() should be used.
These were missed in r326228.
MFC after: 2 weeks
|
| #
ee13ffbe |
| 26-Nov-2017 |
Ed Schouten <[email protected]> |
Use TO_PTR() to convert integers to pointers.
For FreeBSD/arm64's cloudabi32 support, I'm going to need a TO_PTR() in this place. Also use it for all of the other source files, so that the differenc
Use TO_PTR() to convert integers to pointers.
For FreeBSD/arm64's cloudabi32 support, I'm going to need a TO_PTR() in this place. Also use it for all of the other source files, so that the difference remains as minimal as possible.
MFC after: 2 weeks
show more ...
|
| #
814629dd |
| 24-Nov-2017 |
Ed Schouten <[email protected]> |
Don't let cpu_set_syscall_retval() clobber exec_setregs().
Upon successful completion, the execve() system call invokes exec_setregs() to initialize the registers of the initial thread of the newly
Don't let cpu_set_syscall_retval() clobber exec_setregs().
Upon successful completion, the execve() system call invokes exec_setregs() to initialize the registers of the initial thread of the newly executed process. What is weird is that when execve() returns, it still goes through the normal system call return path, clobbering the registers with the system call's return value (td->td_retval).
Though this doesn't seem to be problematic for x86 most of the times (as the value of eax/rax doesn't matter upon startup), this can be pretty frustrating for architectures where function argument and return registers overlap (e.g., ARM). On these systems, exec_setregs() also needs to initialize td_retval.
Even worse are architectures where cpu_set_syscall_retval() sets registers to values not derived from td_retval. On these architectures, there is no way cpu_set_syscall_retval() can set registers to the way it wants them to be upon the start of execution.
To get rid of this madness, let sys_execve() return EJUSTRETURN. This will cause cpu_set_syscall_retval() to leave registers intact. This makes process execution easier to understand. It also eliminates the difference between execution of the initial process and successive ones. The initial call to sys_execve() is not performed through a system call context.
Reviewed by: kib, jhibbits Differential Revision: https://reviews.freebsd.org/D13180
show more ...
|
|
Revision tags: release/10.4.0, release/11.1.0 |
|
| #
2d88da2f |
| 12-Jun-2017 |
Konstantin Belousov <[email protected]> |
Move struct syscall_args syscall arguments parameters container into struct thread.
For all architectures, the syscall trap handlers have to allocate the structure on the stack. The structure takes
Move struct syscall_args syscall arguments parameters container into struct thread.
For all architectures, the syscall trap handlers have to allocate the structure on the stack. The structure takes 88 bytes on 64bit arches which is not negligible. Also, it cannot be easily found by other code, which e.g. caused duplication of some members of the structure to struct thread already. The change removes td_dbg_sc_code and td_dbg_sc_nargs which were directly copied from syscall_args.
The structure is put into the copied on fork part of the struct thread to make the syscall arguments information correct in the child after fork.
This move will also allow several more uses shortly.
Reviewed by: jhb (previous version) Sponsored by: The FreeBSD Foundation MFC after: 3 weeks X-Differential revision: https://reviews.freebsd.org/D11080
show more ...
|
| #
ebfc2808 |
| 23-Mar-2017 |
Ed Schouten <[email protected]> |
Stop providing the compat_3_brand.
As of r315860, the ELF image activator works fine for CloudABI without it.
Reviewed by: kib MFC after: 2 weeks
|
| #
2274ab3d |
| 22-Mar-2017 |
Konstantin Belousov <[email protected]> |
Update r315753 with the proper flag name.
Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
| #
1438fe3c |
| 22-Mar-2017 |
Konstantin Belousov <[email protected]> |
Add a flag BI_BRAND_ONLY_STATIC to specify that the brand only matches static binaries.
Interpretation of the 'static' there is that the binary must not specify an interpreter. In particular, share
Add a flag BI_BRAND_ONLY_STATIC to specify that the brand only matches static binaries.
Interpretation of the 'static' there is that the binary must not specify an interpreter. In particular, shared objects are matched by the brand if BI_CAN_EXEC_DYN is also set.
This improves precision of the brand matching, which should eliminate surprises due to brand ordering.
Revert r315701.
Discussed with and tested by: ed (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
| #
ae2373da |
| 22-Mar-2017 |
Ed Schouten <[email protected]> |
Set the interpreter path to /nonexistent.
CloudABI executables are statically linked and don't have an interpreter. Setting the interpreter path to NULL used to work previously, but r314851 introduc
Set the interpreter path to /nonexistent.
CloudABI executables are statically linked and don't have an interpreter. Setting the interpreter path to NULL used to work previously, but r314851 introduced code that checks the string unconditionally. Running CloudABI executables now causes a null pointer dereference.
Looking at the rest of imgact_elf.c, it seems various other codepaths already leaned on the fact that the interpreter path is set. Let's just go ahead and pick an obviously incorrect interpreter path to appease imgact_elf.c.
MFC after: 1 week
show more ...
|
| #
44232440 |
| 17-Jan-2017 |
Ed Schouten <[email protected]> |
Catch up with changes to structure member names.
Pointer/length pairs are now always named ${name} and ${name}_len.
|
|
Revision tags: release/11.0.1, release/11.0.0 |
|
| #
48734c99 |
| 24-Aug-2016 |
Ed Schouten <[email protected]> |
Convert pointers obtained from the threadattr_t structure with TO_PTR().
In all of these source files, the userspace pointer size corresponds with the kernelspace pointer size, meaning that casting
Convert pointers obtained from the threadattr_t structure with TO_PTR().
In all of these source files, the userspace pointer size corresponds with the kernelspace pointer size, meaning that casting directly works. As I'm planning on making 32-bit execution on 64-bit systems work as well, use TO_PTR() here as well, so that the changes between source files remain minimal.
show more ...
|
| #
13b4b4df |
| 10-Aug-2016 |
Ed Schouten <[email protected]> |
Provide the CloudABI vDSO to its executables.
CloudABI executables already provide support for passing in vDSOs. This functionality is used by the emulator for OS X to inject system call handlers. O
Provide the CloudABI vDSO to its executables.
CloudABI executables already provide support for passing in vDSOs. This functionality is used by the emulator for OS X to inject system call handlers. On FreeBSD, we could use it to optimize calls to gettimeofday(), etc.
Though I don't have any plans to optimize any system calls right now, let's go ahead and already pass in a vDSO. This will allow us to simplify the executables, as the traditional "syscall" shims can be removed entirely. It also means that we gain more flexibility with regards to adding and removing system calls.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D7438
show more ...
|
| #
d96aeddf |
| 08-Jul-2016 |
Ed Schouten <[email protected]> |
Don't forget to set sa->narg for CloudABI system calls.
It turns out that this value is not used within the system call code under normal conditions, except when using tracing tools like ktrace. If
Don't forget to set sa->narg for CloudABI system calls.
It turns out that this value is not used within the system call code under normal conditions, except when using tracing tools like ktrace. If we forget to set this value, it is set to random garbage. This may cause ktrace to hang indefinitely, making it impossible to kill.
Reported by: Michael Plass PR: 210800 MFC before: 11.0-RELEASE
show more ...
|
| #
5c2cf818 |
| 16-Jun-2016 |
Konstantin Belousov <[email protected]> |
Update comments for the MD functions managing contexts for new threads, to make it less confusing and using modern kernel terms.
Rename the functions to reflect current use of the functions, instead
Update comments for the MD functions managing contexts for new threads, to make it less confusing and using modern kernel terms.
Rename the functions to reflect current use of the functions, instead of the historic KSE conventions: cpu_set_fork_handler -> cpu_fork_kthread_handler (for kthreads) cpu_set_upcall -> cpu_copy_thread (for forks) cpu_set_upcall_kse -> cpu_set_upcall (for new threads creation)
Reviewed by: jhb (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week Approved by: re (hrs) Differential revision: https://reviews.freebsd.org/D6731
show more ...
|
| #
ab835750 |
| 06-Apr-2016 |
Ed Schouten <[email protected]> |
Make CloudABI's way of doing TLS more friendly to userspace emulators.
We're currently seeing how hard it would be to run CloudABI binaries on operating systems cannot be modified easily (Windows, M
Make CloudABI's way of doing TLS more friendly to userspace emulators.
We're currently seeing how hard it would be to run CloudABI binaries on operating systems cannot be modified easily (Windows, Mac OS X). The idea is that we want to just run them without any sandboxing. Now that CloudABI executables are PIE, this is already a bit easier, but TLS is still problematic:
- CloudABI executables want to write to the %fs, which typically requires extra system calls by the emulator every time it needs to switch between CloudABI's and its own TLS.
- If CloudABI executables overwrite the %fs base unconditionally, it also becomes harder for the emulator to store a backup of the old value of %fs. To solve this, let's no longer overwrite %fs, but just %fs:0.
As CloudABI's C library does not use a TCB, this space can now be used by an emulator to keep track of its internal state. The executable can now safely overwrite %fs:0, as long as it makes sure that the TCB is copied over to the new TLS area.
Ensure that there is an initial TLS area set up when the process starts, only containing a bogus TCB. We don't really care about its contents on FreeBSD.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D5836
show more ...
|
| #
4a8b3b18 |
| 31-Mar-2016 |
Ed Schouten <[email protected]> |
Make Position Independent Executables work for CloudABI.
- Set BI_CAN_EXEC_DYN, so we can execute ET_DYN ELF files in addition to regular ET_EXECs. - Provide an AT_BASE entry in the auxiliary vect
Make Position Independent Executables work for CloudABI.
- Set BI_CAN_EXEC_DYN, so we can execute ET_DYN ELF files in addition to regular ET_EXECs. - Provide an AT_BASE entry in the auxiliary vector, so the executable knows at which address it got loaded and can apply relocations.
show more ...
|
|
Revision tags: release/10.3.0 |
|
| #
6fc8053f |
| 09-Mar-2016 |
John Baldwin <[email protected]> |
Fix reporting of the CloudABI ABI in kdump.
- Advertise the word size for CloudABI ABIs via the SV_LP64 flag. All of the other ABIs include either SV_ILP32 or SV_LP64. - Fix kdump to not assume a
Fix reporting of the CloudABI ABI in kdump.
- Advertise the word size for CloudABI ABIs via the SV_LP64 flag. All of the other ABIs include either SV_ILP32 or SV_LP64. - Fix kdump to not assume a 32-bit ABI if the ABI flags field is non-zero but SV_LP64 isn't set. Instead, only assume a 32-bit ABI if SV_ILP32 is set and fallback to the unknown value of "00" if neither SV_LP64 nor SV_ILP32 is set.
Reviewed by: kib, ed Differential Revision: https://reviews.freebsd.org/D5560
show more ...
|
| #
a1e1814d |
| 22-Feb-2016 |
Svatopluk Kraus <[email protected]> |
As <machine/pmap.h> is included from <vm/pmap.h>, there is no need to include it explicitly when <vm/pmap.h> is already included.
Reviewed by: alc, kib Differential Revision: https://reviews.freebsd
As <machine/pmap.h> is included from <vm/pmap.h>, there is no need to include it explicitly when <vm/pmap.h> is already included.
Reviewed by: alc, kib Differential Revision: https://reviews.freebsd.org/D5373
show more ...
|
| #
2ff069a7 |
| 22-Oct-2015 |
Ed Schouten <[email protected]> |
Add support for CloudABI on ARM64.
It turns out that it is pretty easy to make CloudABI work on ARM64. We essentially only need to copy over the sysvec from AMD64 and ensure that we use ARM64 specif
Add support for CloudABI on ARM64.
It turns out that it is pretty easy to make CloudABI work on ARM64. We essentially only need to copy over the sysvec from AMD64 and ensure that we use ARM64 specific registers.
As there is an overlap between function argument and return registers, we do need to extend cloudabi64_schedtail() to only set its values if we're actually forking. Not when we're creating a new thread.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D3917
show more ...
|