summaryrefslogtreecommitdiffstats
path: root/sys/kern/makesyscalls.sh
diff options
context:
space:
mode:
authortmm <tmm@FreeBSD.org>2001-08-22 23:22:47 +0000
committertmm <tmm@FreeBSD.org>2001-08-22 23:22:47 +0000
commitfd3e5ce275a2d5e8c9b00ef63a862aa2963f934c (patch)
tree098f02853705ed0cf9cd0edb318565d76064420c /sys/kern/makesyscalls.sh
parentca261a6c5c65aa5a3f72958a11c6754830a1b2df (diff)
downloadFreeBSD-src-fd3e5ce275a2d5e8c9b00ef63a862aa2963f934c.zip
FreeBSD-src-fd3e5ce275a2d5e8c9b00ef63a862aa2963f934c.tar.gz
Add padding before each element of the syscall argument structures in
sysproto.h in addition to the existing padding afterwards. This is needed to support big-endian architectures like sparc64. Reviewed by: bde Tested on alpha by: jhb
Diffstat (limited to 'sys/kern/makesyscalls.sh')
-rw-r--r--sys/kern/makesyscalls.sh17
1 files changed, 15 insertions, 2 deletions
diff --git a/sys/kern/makesyscalls.sh b/sys/kern/makesyscalls.sh
index 8fd177c..bead4cc 100644
--- a/sys/kern/makesyscalls.sh
+++ b/sys/kern/makesyscalls.sh
@@ -116,6 +116,13 @@ s/\$//g
printf "struct proc;\n\n" > sysarg
printf "#define\tPAD_(t)\t(sizeof(register_t) <= sizeof(t) ? \\\n" > sysarg
printf "\t\t0 : sizeof(register_t) - sizeof(t))\n\n" > sysarg
+ printf "#if BYTE_ORDER == LITTLE_ENDIAN\n"> sysarg
+ printf "#define\tPADL_(t)\t0\n" > sysarg
+ printf "#define\tPADR_(t)\tPAD_(t)\n" > sysarg
+ printf "#else\n" > sysarg
+ printf "#define\tPADL_(t)\tPAD_(t)\n" > sysarg
+ printf "#define\tPADR_(t)\t0\n" > sysarg
+ printf "#endif\n\n" > sysarg
printf " * created from%s\n */\n\n", $0 > sysnames
printf "char *%s[] = {\n", namesname > sysnames
@@ -277,7 +284,9 @@ s/\$//g
if (argc != 0 && $2 != "NOARGS" && $2 != "NOPROTO") {
printf("struct\t%s {\n", argalias) > sysarg
for (i = 1; i <= argc; i++)
- printf("\t%s\t%s;\tchar %s_[PAD_(%s)];\n",
+ printf("\tchar %s_l_[PADL_(%s)]; " \
+ "%s %s; char %s_r_[PADR_(%s)];\n",
+ argname[i], argtype[i],
argtype[i], argname[i],
argname[i], argtype[i]) > sysarg
printf("};\n") > sysarg
@@ -328,7 +337,9 @@ s/\$//g
if (argc != 0 && $2 != "CPT_NOA") {
printf("struct\t%s {\n", argalias) > syscompat
for (i = 1; i <= argc; i++)
- printf("\t%s\t%s;\tchar %s_[PAD_(%s)];\n",
+ printf("\tchar %s_l_[PADL_(%s)]; %s %s; " \
+ "char %s_r_[PADR_(%s)];\n",
+ argname[i], argtype[i],
argtype[i], argname[i],
argname[i], argtype[i]) > syscompat
printf("};\n") > syscompat
@@ -411,6 +422,8 @@ s/\$//g
printf("\n#endif /* %s */\n\n", compat) > syscompatdcl
printf("#undef PAD_\n") > syscompatdcl
+ printf("#undef PADL_\n") > syscompatdcl
+ printf("#undef PADR_\n") > syscompatdcl
printf("\n#endif /* !%s */\n", sysproto_h) > syscompatdcl
printf("\n") > sysmk
OpenPOWER on IntegriCloud