1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#if defined(__arm__) // nacl_irt_icache is supported only on ARM. 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <errno.h> 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <sys/syscall.h> 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <stddef.h> 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "components/nacl/loader/nonsfi/irt_interfaces.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace nacl { 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace nonsfi { 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace { 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// TODO(mazda): Revisit the implementation to consider inlining the syscall 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// with assembly when Non-SFI mode's IRT implementations get moved to the 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// NaCl repository. 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)int IrtClearCache(void* addr, size_t size) { 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // The third argument of cacheflush is just ignored for now and should 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // always be zero. 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int result = syscall(__ARM_NR_cacheflush, 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) addr, reinterpret_cast<intptr_t>(addr) + size, 0); 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (result < 0) 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return errno; 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return 0; 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)const nacl_irt_icache kIrtIcache = { 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) IrtClearCache 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace nonsfi 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace nacl 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif 41