[all-commits] [llvm/llvm-project] 3215f7: [compiler-rt] [builtins] Fix clear_cache_test to w...

Michał Górny via All-commits all-commits at lists.llvm.org
Wed Jan 22 08:05:18 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 3215f7c7a81ffc7e6c0e49b21a4d4a01a2d945be
      https://github.com/llvm/llvm-project/commit/3215f7c7a81ffc7e6c0e49b21a4d4a01a2d945be
  Author: Michał Górny <mgorny at gentoo.org>
  Date:   2020-01-22 (Wed, 22 Jan 2020)

  Changed paths:
    M compiler-rt/test/builtins/Unit/clear_cache_test.c

  Log Message:
  -----------
  [compiler-rt] [builtins] Fix clear_cache_test to work with MPROTECT

Fix clear_cache_test to work on NetBSD with PaX MPROTECT enabled, that
is when creating W+X mmaps is prohibited.  Use the recommended solution:
create two mappings for the same memory area, make one of them RW, while
the other RX.  Copy the function into the RW area but run it from the RX
area.

In order to implement this, I've split the pointer variables to
'write_buffer' and 'execution_buffer'.  Both are separate pointers
on NetBSD, while they have the same value on other systems.

I've also split the memcpy_f() into two: new memcpy_f() that only takes
care of copying memory and discards the (known) result of memcpy(),
and realign_f() that applies ARM realignment to the given pointer.
Again, there should be no difference on non-NetBSD systems but on NetBSD
copying is done on write_buffer, while realignment on pointer
to the execution_buffer.

I have tested this change on NetBSD and Linux.

Differential Revision: https://reviews.llvm.org/D72578




More information about the All-commits mailing list