xref: /aosp_15_r20/bootable/libbootloader/gbl/libelf/public/elf/relocation.h (revision 5225e6b173e52d2efc6bcf950c27374fd72adabc)
1*5225e6b1SAndroid Build Coastguard Worker /*
2*5225e6b1SAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
3*5225e6b1SAndroid Build Coastguard Worker  *
4*5225e6b1SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*5225e6b1SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*5225e6b1SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*5225e6b1SAndroid Build Coastguard Worker  *
8*5225e6b1SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*5225e6b1SAndroid Build Coastguard Worker  *
10*5225e6b1SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*5225e6b1SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*5225e6b1SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*5225e6b1SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*5225e6b1SAndroid Build Coastguard Worker  * limitations under the License.
15*5225e6b1SAndroid Build Coastguard Worker  */
16*5225e6b1SAndroid Build Coastguard Worker 
17*5225e6b1SAndroid Build Coastguard Worker #pragma once
18*5225e6b1SAndroid Build Coastguard Worker 
19*5225e6b1SAndroid Build Coastguard Worker // Check .dynamic section in an ELF and apply necessary relocation.
20*5225e6b1SAndroid Build Coastguard Worker //
21*5225e6b1SAndroid Build Coastguard Worker // The API assumes that program_base and dynamic section address are properly aligned.
22*5225e6b1SAndroid Build Coastguard Worker // For 64bit applications, alignment should be at least multiple of 8bytes.
23*5225e6b1SAndroid Build Coastguard Worker //
24*5225e6b1SAndroid Build Coastguard Worker // @program_base: Absolute address the program loaded to.
25*5225e6b1SAndroid Build Coastguard Worker // @dynamic_section: Absolute address of the dynamic section
26*5225e6b1SAndroid Build Coastguard Worker //
27*5225e6b1SAndroid Build Coastguard Worker // Return true on success.
28*5225e6b1SAndroid Build Coastguard Worker extern "C" bool ApplyRelocation(uintptr_t program_base, uintptr_t dynamic_section);
29