Hi Ying, On Mon, 2023-07-24 at 16:35 +0800, Ying Huang wrote: > Hi Mark, > > > > diff --git a/libebl/eblreloctypecheck.c b/libebl/eblreloctypecheck.c > > > index 80e67ef7..e3c43944 100644 > > > --- a/libebl/eblreloctypecheck.c > > > +++ b/libebl/eblreloctypecheck.c > > > @@ -32,10 +32,14 @@ > > > #endif > > > > > > #include > > > > - > > > +#include > > > > > > > bool > > > ebl_reloc_type_check (Ebl *ebl, int reloc) > > > { > > > - return ebl != NULL ? ebl->reloc_type_check (reloc) : false; > > > + int relocNew = reloc; > > > + GElf_Ehdr ehdr; > > > + if(ebl->elf->class == ELFCLASS64 && gelf_getehdr(ebl->elf, &ehdr) != > > > NULL && ehdr.e_machine == EM_MIPS) > > > + relocNew = ELF64_MIPS_R_TYPE(reloc); > > > + return ebl != NULL ? ebl->reloc_type_check (relocNew) : false; > > > } > > This should not go into the generic ebl_reloc_type_check but has to be > > hooked so it uses a mips_reloc_type_check. > > > > > diff --git a/libebl/eblreloctypename.c b/libebl/eblreloctypename.c > > > index e53ec0c0..4276d8e3 100644 > > > --- a/libebl/eblreloctypename.c > > > +++ b/libebl/eblreloctypename.c > > > @@ -33,14 +33,18 @@ > > > > > > #include > > > > #include > > > > - > > > +#include > > > > > > > const char * > > > ebl_reloc_type_name (Ebl *ebl, int reloc, char *buf, size_t len) > > > { > > > const char *res; > > > + int relocNew = reloc; > > > + GElf_Ehdr ehdr; > > > + if(ebl->elf->class == ELFCLASS64 && gelf_getehdr(ebl->elf, &ehdr) != > > > NULL && ehdr.e_machine == EM_MIPS) > > > + relocNew = ELF64_MIPS_R_TYPE(reloc); > > > > > > - res = ebl != NULL ? ebl->reloc_type_name (reloc, buf, len) : NULL; > > > + res = ebl != NULL ? ebl->reloc_type_name (relocNew, buf, len) : NULL; > > > if (res == NULL) > > > /* There are no generic relocation type names. */ > > > res = ""; > > Likewise for hooking reloc_type_name. > > > The function reloc_type_check and reloc_type_name were common hooks in file > backends/common-reloc.c, so if we also need a new hook for mips and copy the > check codes from common-reloc.c?
There are no other arches which use those hooks at the moment. But you should be able to simply define them as mips_reloc_type_xxx and then HOOK them in your mips.c init function. Cheers, Mark