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