diff options
author | ed <ed@FreeBSD.org> | 2016-03-31 18:52:00 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2016-03-31 18:52:00 +0000 |
commit | 910e4d679c8dddad93fe7407ff0625354b39c285 (patch) | |
tree | 3d8c734dbc00dd69e8df1fdf7b64427a2564642c /sys/compat | |
parent | 3cf5a6567ade399b22a201f57f86c8dc3e373ba6 (diff) | |
download | FreeBSD-src-910e4d679c8dddad93fe7407ff0625354b39c285.zip FreeBSD-src-910e4d679c8dddad93fe7407ff0625354b39c285.tar.gz |
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.
Diffstat (limited to 'sys/compat')
-rw-r--r-- | sys/compat/cloudabi64/cloudabi64_module.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/compat/cloudabi64/cloudabi64_module.c b/sys/compat/cloudabi64/cloudabi64_module.c index 60100c5..de890bc 100644 --- a/sys/compat/cloudabi64/cloudabi64_module.c +++ b/sys/compat/cloudabi64/cloudabi64_module.c @@ -99,6 +99,7 @@ cloudabi64_fixup(register_t **stack_base, struct image_params *imgp) #define PTR(type, ptr) { .a_type = (type), .a_ptr = (uintptr_t)(ptr) } PTR(CLOUDABI_AT_ARGDATA, argdata), VAL(CLOUDABI_AT_ARGDATALEN, argdatalen), + VAL(CLOUDABI_AT_BASE, args->base), PTR(CLOUDABI_AT_CANARY, canary), VAL(CLOUDABI_AT_CANARYLEN, sizeof(canarybuf)), VAL(CLOUDABI_AT_NCPUS, mp_ncpus), |