unstick r375490

Revision 375490

Date:
2019/10/22 08:44:25
Author:
ro
Revision Log:
[builtins][test] Avoid unportable mmap call in clear_cache_test.c

Within the last two weeks, the Builtins-*-sunos :: clear_cache_test.c started to FAIL
on Solaris. Running it under truss shows

mmap(0x00000000, 128, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 0, 0) Err#22 EINVAL
_exit(1)

While there are several possible reasons mmap can return EINVAL on Solaris, it turns
out it's this one (from mmap(2)):

MAP_ANON was specified, but the file descriptor was not
-1.

And indeed even the Linux mmap(2) documents this as unportable:

MAP_ANONYMOUS
The mapping is not backed by any file; its contents are initial‐
ized to zero. The fd argument is ignored; however, some imple‐
mentations require fd to be -1 if MAP_ANONYMOUS (or MAP_ANON) is
specified, and portable applications should ensure this. The

This patch follows this advise. Tested on x86_64-pc-linux-gnu, amd64-pc-solaris2.11
and sparcv9-sun-solaris2.11.

Differential Revision: https://reviews.llvm.org/D68455
Files:

Legend:

 
Added
 
Removed
 
Modified
  • compiler-rt/trunk/test/builtins/Unit/clear_cache_test.c

     
    49 49 #if !defined(_WIN32)
    50 50 uint8_t *execution_buffer = mmap(0, kSize,
    51 51 PROT_READ | PROT_WRITE | PROT_EXEC,
    52 MAP_ANON | MAP_PRIVATE, 0, 0);
    52 MAP_ANON | MAP_PRIVATE, -1, 0);
    53 53 if (execution_buffer == MAP_FAILED)
    54 54 return 1;
    55 55 #else