@@ -1375,6 +1375,51 @@ static RzBinReloc *reloc_convert_sparc(ELFOBJ *bin, RzBinElfReloc *rel, ut64 GOT
13751375 }
13761376}
13771377
1378+ static RzBinReloc * reloc_convert_avr (ELFOBJ * bin , RzBinElfReloc * rel , ut64 GOT ) {
1379+ switch (rel -> type ) {
1380+ case R_AVR_NONE :
1381+ return reloc_convert_set (bin , rel , 0 , "R_AVR_NONE" );
1382+ case R_AVR_32 : SET (32 , "R_AVR_32" );
1383+ case R_AVR_7_PCREL : SET (16 , "R_AVR_7_PCREL" );
1384+ case R_AVR_13_PCREL : SET (16 , "R_AVR_13_PCREL" );
1385+ case R_AVR_16 : SET (16 , "R_AVR_16" );
1386+ case R_AVR_16_PM : SET (16 , "R_AVR_16_PM" );
1387+ case R_AVR_LO8_LDI : SET (16 , "R_AVR_LO8_LDI" );
1388+ case R_AVR_HI8_LDI : SET (16 , "R_AVR_HI8_LDI" );
1389+ case R_AVR_HH8_LDI : SET (16 , "R_AVR_HH8_LDI" );
1390+ case R_AVR_LO8_LDI_NEG : SET (16 , "R_AVR_LO8_LDI_NEG" );
1391+ case R_AVR_HI8_LDI_NEG : SET (16 , "R_AVR_HI8_LDI_NEG" );
1392+ case R_AVR_HH8_LDI_NEG : SET (16 , "R_AVR_HH8_LDI_NEG" );
1393+ case R_AVR_LO8_LDI_PM : SET (16 , "R_AVR_LO8_LDI_PM" );
1394+ case R_AVR_HI8_LDI_PM : SET (16 , "R_AVR_HI8_LDI_PM" );
1395+ case R_AVR_HH8_LDI_PM : SET (16 , "R_AVR_HH8_LDI_PM" );
1396+ case R_AVR_LO8_LDI_PM_NEG : SET (16 , "R_AVR_LO8_LDI_PM_NEG" );
1397+ case R_AVR_HI8_LDI_PM_NEG : SET (16 , "R_AVR_HI8_LDI_PM_NEG" );
1398+ case R_AVR_HH8_LDI_PM_NEG : SET (16 , "R_AVR_HH8_LDI_PM_NEG" );
1399+ case R_AVR_CALL : SET (32 , "R_AVR_CALL" );
1400+ case R_AVR_LDI :
1401+ return reloc_convert_set (bin , rel , 0 , "R_AVR_LDI" );
1402+ case R_AVR_6 : SET (16 , "R_AVR_6" );
1403+ case R_AVR_6_ADIW : SET (16 , "R_AVR_6_ADIW" );
1404+ case R_AVR_MS8_LDI : SET (16 , "R_AVR_MS8_LDI" );
1405+ case R_AVR_MS8_LDI_NEG : SET (16 , "R_AVR_MS8_LDI_NEG" );
1406+ case R_AVR_LO8_LDI_GS : SET (16 , "R_AVR_LO8_LDI_GS" );
1407+ case R_AVR_HI8_LDI_GS : SET (16 , "R_AVR_HI8_LDI_GS" );
1408+ case R_AVR_8 : SET (8 , "R_AVR_8" );
1409+ case R_AVR_8_LO8 : SET (8 , "R_AVR_8_LO8" );
1410+ case R_AVR_8_HI8 : SET (8 , "R_AVR_8_HI8" );
1411+ case R_AVR_8_HLO8 : SET (8 , "R_AVR_8_HLO8" );
1412+ case R_AVR_DIFF8 : SET (8 , "R_AVR_DIFF8" );
1413+ case R_AVR_DIFF16 : SET (16 , "R_AVR_DIFF16" );
1414+ case R_AVR_DIFF32 : SET (32 , "R_AVR_DIFF32" );
1415+ case R_AVR_LDS_STS_16 : SET (16 , "R_AVR_LDS_STS_16" );
1416+ case R_AVR_PORT6 : SET (16 , "R_AVR_PORT6" );
1417+ case R_AVR_PORT5 : SET (16 , "R_AVR_PORT5" );
1418+ case R_AVR_32_PCREL : SET (32 , "R_AVR_32_PCREL" );
1419+ default : UNSUPP ("AVR" );
1420+ }
1421+ }
1422+
13781423#undef UNSUPP
13791424#undef UNHANDL
13801425#undef SET
@@ -1424,6 +1469,8 @@ RZ_OWN RzBinReloc *Elf_(rz_bin_elf_convert_relocation)(RZ_NONNULL ELFOBJ *bin, R
14241469 return reloc_convert_mips (bin , rel , GOT );
14251470 case EM_IMG1 : // nanomips
14261471 return reloc_convert_nanomips (bin , rel , GOT );
1472+ case EM_AVR :
1473+ return reloc_convert_avr (bin , rel , GOT );
14271474 case EM_M32 : ARCH_MISSING ("EM_M32" );
14281475 case EM_68K : ARCH_MISSING ("EM_68K" );
14291476 case EM_88K : ARCH_MISSING ("EM_88K" );
@@ -1478,7 +1525,6 @@ RZ_OWN RzBinReloc *Elf_(rz_bin_elf_convert_relocation)(RZ_NONNULL ELFOBJ *bin, R
14781525 case EM_MMIX : ARCH_MISSING ("EM_MMIX" );
14791526 case EM_HUANY : ARCH_MISSING ("EM_HUANY" );
14801527 case EM_PRISM : ARCH_MISSING ("EM_PRISM" );
1481- case EM_AVR : ARCH_MISSING ("EM_AVR" );
14821528 case EM_FR30 : ARCH_MISSING ("EM_FR30" );
14831529 case EM_D10V : ARCH_MISSING ("EM_D10V" );
14841530 case EM_D30V : ARCH_MISSING ("EM_D30V" );
0 commit comments