Re: [PATCH 20/25] arm64:ilp32: add sys_ilp32.c and a separate table (in entry.S) to use it

From: Zhangjian (Bamvor)
Date: Wed May 11 2016 - 06:13:39 EST


Hi, Arnd

On 2016/5/11 16:09, Arnd Bergmann wrote:
> On Wednesday 11 May 2016 10:04:16 Zhangjian wrote:
>>> I don't remember. It's probably not important whether we have the shift
>>> in there, as long as it's independent of the actual kernel page size and
>>> user space and kernel agree on the calling conventions.
>> Well. I am ok with where to shift the pages size because we get the same
>> result. I was just thinking if we should get rid of the name of mmap2 in our
>> ILP32 porting. Actually, it is mmap but we name it as mmap2. User may confused
>> if they do not know the implementations.
>
> That is a good point: If the implementation matches the mmap() behavior rather than
> mmap2(), we should rename the macro by doing
>
> #undef __NR_mmap2
> #define __NR_mmap 222
>
> in the uapi/asm/unistd.h file for ilp32 mode.
Do you mean define the following things in kernel:
```
diff --git a/arch/arm64/include/uapi/asm/unistd.h b/arch/arm64/include/uapi/asm/unistd.h
index 1caadc2..3f79640 100644
--- a/arch/arm64/include/uapi/asm/unistd.h
+++ b/arch/arm64/include/uapi/asm/unistd.h
@@ -14,3 +14,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <asm-generic/unistd.h>
+
+#ifdef __ILP32__
+#undef __NR_mmap2
+#define __NR_mmap 222
+#endif /* #ifdef __ILP32__ */
+
```
Then glibc could call mmap instead of mmap2.
I could not try it now. Because after change off_t to 64bit in glibc, stat
is fail. I may need to revert the stat relative patch.

> Alternatively we can keep the
> __NR_mmap2 definition but then we need to pass the pgoff (value shifted by
> 12 bits) argument rather than the size in bytes.
It means that we could reuse the existing code of mmap2 in kernel and glibc.
But we need to shift twice when kernel is 64k page.
It seems that the first method is more clear. Suggestion?

Regards

Bamvor
>
> Arnd
>