• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2021 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.base.library_loader;
6 
7 import androidx.annotation.NonNull;
8 
9 /**
10  * Mockable stub for all native methods in Linker.
11  *
12  * This functionality is usually generated from @NativeMethods, which cannot be used for the
13  * auxiliary native library used by classes in Linker and other classes in this package.
14  */
15 class LinkerJni implements Linker.Natives {
16     @Override
findMemoryRegionAtRandomAddress(@onNull Linker.LibInfo libInfo)17     public void findMemoryRegionAtRandomAddress(@NonNull Linker.LibInfo libInfo) {
18         nativeFindMemoryRegionAtRandomAddress(libInfo);
19     }
20 
21     @Override
reserveMemoryForLibrary(@onNull Linker.LibInfo libInfo)22     public void reserveMemoryForLibrary(@NonNull Linker.LibInfo libInfo) {
23         nativeReserveMemoryForLibrary(libInfo);
24     }
25 
26     @Override
findRegionReservedByWebViewZygote(@onNull Linker.LibInfo libInfo)27     public boolean findRegionReservedByWebViewZygote(@NonNull Linker.LibInfo libInfo) {
28         return nativeFindRegionReservedByWebViewZygote(libInfo);
29     }
30 
31     @Override
loadLibrary( String libFilePath, Linker.LibInfo libInfo, boolean spawnRelroRegion)32     public boolean loadLibrary(
33             String libFilePath, Linker.LibInfo libInfo, boolean spawnRelroRegion) {
34         return nativeLoadLibrary(libFilePath, libInfo, spawnRelroRegion);
35     }
36 
37     @Override
useRelros(long localLoadAddress, Linker.LibInfo remoteLibInfo)38     public boolean useRelros(long localLoadAddress, Linker.LibInfo remoteLibInfo) {
39         return nativeUseRelros(localLoadAddress, remoteLibInfo);
40     }
41 
42     @Override
getRelroSharingResult()43     public int getRelroSharingResult() {
44         return nativeGetRelroSharingResult();
45     }
46 
47     // Does not use JNI Generator because the native side is in libchromium_linker.so rather
48     // libmonochrome.so
nativeFindMemoryRegionAtRandomAddress( @onNull Linker.LibInfo libInfo)49     private static native void nativeFindMemoryRegionAtRandomAddress(
50             @NonNull Linker.LibInfo libInfo);
51 
nativeReserveMemoryForLibrary(@onNull Linker.LibInfo libInfo)52     private static native void nativeReserveMemoryForLibrary(@NonNull Linker.LibInfo libInfo);
53 
nativeFindRegionReservedByWebViewZygote( @onNull Linker.LibInfo libInfo)54     private static native boolean nativeFindRegionReservedByWebViewZygote(
55             @NonNull Linker.LibInfo libInfo);
56 
nativeLoadLibrary( String libFilePath, Linker.LibInfo libInfo, boolean spawnRelroRegion)57     private static native boolean nativeLoadLibrary(
58             String libFilePath, Linker.LibInfo libInfo, boolean spawnRelroRegion);
59 
nativeUseRelros( long localLoadAddress, Linker.LibInfo remoteLibInfo)60     private static native boolean nativeUseRelros(
61             long localLoadAddress, Linker.LibInfo remoteLibInfo);
62 
nativeGetRelroSharingResult()63     private static native int nativeGetRelroSharingResult();
64 }
65