mirror of
https://github.com/switchbrew/libnx.git
synced 2025-07-04 02:22:15 +02:00
Test commit for ircbot 5
This commit is contained in:
parent
b82ad0b099
commit
cea635293a
@ -3,35 +3,35 @@
|
|||||||
|
|
||||||
void __nx_dynamic(uintptr_t base, const Elf64_Dyn* dyn)
|
void __nx_dynamic(uintptr_t base, const Elf64_Dyn* dyn)
|
||||||
{
|
{
|
||||||
const Elf64_Rela* rela = NULL;
|
const Elf64_Rela* rela = NULL;
|
||||||
u64 relasz = 0;
|
u64 relasz = 0;
|
||||||
|
|
||||||
for (; dyn->d_tag != DT_NULL; dyn++)
|
for (; dyn->d_tag != DT_NULL; dyn++)
|
||||||
{
|
{
|
||||||
switch (dyn->d_tag)
|
switch (dyn->d_tag)
|
||||||
{
|
{
|
||||||
case DT_RELA:
|
case DT_RELA:
|
||||||
rela = (const Elf64_Rela*)(base + dyn->d_un.d_ptr);
|
rela = (const Elf64_Rela*)(base + dyn->d_un.d_ptr);
|
||||||
break;
|
break;
|
||||||
case DT_RELASZ:
|
case DT_RELASZ:
|
||||||
relasz = dyn->d_un.d_val / sizeof(Elf64_Rela);
|
relasz = dyn->d_un.d_val / sizeof(Elf64_Rela);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rela == NULL)
|
if (rela == NULL)
|
||||||
fatalSimple(MAKERESULT(MODULE_LIBNX, LIBNX_BADRELOC));
|
fatalSimple(MAKERESULT(MODULE_LIBNX, LIBNX_BADRELOC));
|
||||||
|
|
||||||
for (; relasz--; rela++)
|
for (; relasz--; rela++)
|
||||||
{
|
{
|
||||||
switch (ELF64_R_TYPE(rela->r_info))
|
switch (ELF64_R_TYPE(rela->r_info))
|
||||||
{
|
{
|
||||||
case R_AARCH64_RELATIVE:
|
case R_AARCH64_RELATIVE:
|
||||||
{
|
{
|
||||||
u64* ptr = (u64*)(base + rela->r_offset);
|
u64* ptr = (u64*)(base + rela->r_offset);
|
||||||
*ptr = base + rela->r_addend;
|
*ptr = base + rela->r_addend;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user