Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/powerpc/elf32_machdep.c
Show All 19 Lines | |||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
* | * | ||||
* $FreeBSD$ | * $FreeBSD$ | ||||
*/ | */ | ||||
#include "opt_pax.h" | |||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/kernel.h> | #include <sys/kernel.h> | ||||
#include <sys/systm.h> | #include <sys/systm.h> | ||||
#define __ELF_WORD_SIZE 32 | #define __ELF_WORD_SIZE 32 | ||||
#include <sys/exec.h> | #include <sys/exec.h> | ||||
#include <sys/imgact.h> | #include <sys/imgact.h> | ||||
#include <sys/malloc.h> | #include <sys/malloc.h> | ||||
#include <sys/pax.h> | |||||
#include <sys/proc.h> | #include <sys/proc.h> | ||||
#include <sys/namei.h> | #include <sys/namei.h> | ||||
#include <sys/fcntl.h> | #include <sys/fcntl.h> | ||||
#include <sys/sysent.h> | #include <sys/sysent.h> | ||||
#include <sys/imgact_elf.h> | #include <sys/imgact_elf.h> | ||||
#include <sys/syscall.h> | #include <sys/syscall.h> | ||||
#include <sys/signalvar.h> | #include <sys/signalvar.h> | ||||
#include <sys/vnode.h> | #include <sys/vnode.h> | ||||
▲ Show 20 Lines • Show All 57 Lines • ▼ Show 20 Lines | #endif | ||||
.sv_fixlimit = NULL, | .sv_fixlimit = NULL, | ||||
.sv_maxssiz = NULL, | .sv_maxssiz = NULL, | ||||
.sv_flags = SV_ABI_FREEBSD | SV_ILP32 | SV_SHP, | .sv_flags = SV_ABI_FREEBSD | SV_ILP32 | SV_SHP, | ||||
.sv_set_syscall_retval = cpu_set_syscall_retval, | .sv_set_syscall_retval = cpu_set_syscall_retval, | ||||
.sv_fetch_syscall_args = cpu_fetch_syscall_args, | .sv_fetch_syscall_args = cpu_fetch_syscall_args, | ||||
.sv_shared_page_base = FREEBSD32_SHAREDPAGE, | .sv_shared_page_base = FREEBSD32_SHAREDPAGE, | ||||
.sv_shared_page_len = PAGE_SIZE, | .sv_shared_page_len = PAGE_SIZE, | ||||
.sv_schedtail = NULL, | .sv_schedtail = NULL, | ||||
#ifdef PAX_ASLR | |||||
.sv_pax_aslr_init = _pax_aslr_init32, | |||||
#endif | |||||
}; | }; | ||||
INIT_SYSENTVEC(elf32_sysvec, &elf32_freebsd_sysvec); | INIT_SYSENTVEC(elf32_sysvec, &elf32_freebsd_sysvec); | ||||
static Elf32_Brandinfo freebsd_brand_info = { | static Elf32_Brandinfo freebsd_brand_info = { | ||||
.brand = ELFOSABI_FREEBSD, | .brand = ELFOSABI_FREEBSD, | ||||
imp: This is a fairly common idiom. Perhaps it would be better to say .sv_pax_aslr_init = PAX_INIT… | |||||
Not Done Inline ActionsIn the non-PAX_ASLR case sv_pax_aslr_init is implicitly initialized to NULL, so the #else is unnecessary. Same for all the other {elf,freebsd}{,32,64}_machdep.c. des: In the non-PAX_ASLR case sv_pax_aslr_init is implicitly initialized to NULL, so the #else is… | |||||
.machine = EM_PPC, | .machine = EM_PPC, | ||||
.compat_3_brand = "FreeBSD", | .compat_3_brand = "FreeBSD", | ||||
.emul_path = NULL, | .emul_path = NULL, | ||||
.interp_path = "/libexec/ld-elf.so.1", | .interp_path = "/libexec/ld-elf.so.1", | ||||
.sysvec = &elf32_freebsd_sysvec, | .sysvec = &elf32_freebsd_sysvec, | ||||
#ifdef __powerpc64__ | #ifdef __powerpc64__ | ||||
.interp_newpath = "/libexec/ld-elf32.so.1", | .interp_newpath = "/libexec/ld-elf32.so.1", | ||||
#else | #else | ||||
▲ Show 20 Lines • Show All 148 Lines • Show Last 20 Lines |
This is a fairly common idiom. Perhaps it would be better to say .sv_pax_aslr_init = PAX_INIT(_pax_aslr_init32) where PAX_INIT(x) expands to x when PAX_ASLR is defined, and NULL when not. Pick your own name instead of PAX_INIT, I'm not picky about that. But to do that, then sys/pax.h likely would need to always be included...