Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

modpost: change return type of addend_*_rel()

Now that none of addend_*_rel() returns a meaningful value (the return
value is always 0), change all of them to return the value of r_addend.

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>

+24 -39
+24 -39
scripts/mod/modpost.c
··· 1257 1257 tosec, taddr); 1258 1258 } 1259 1259 1260 - static int addend_386_rel(uint32_t *location, Elf_Rela *r) 1260 + static Elf_Addr addend_386_rel(uint32_t *location, Elf_Rela *r) 1261 1261 { 1262 1262 unsigned int r_typ = ELF_R_TYPE(r->r_info); 1263 1263 1264 1264 switch (r_typ) { 1265 1265 case R_386_32: 1266 - r->r_addend = TO_NATIVE(*location); 1267 - break; 1266 + return TO_NATIVE(*location); 1268 1267 case R_386_PC32: 1269 - r->r_addend = TO_NATIVE(*location) + 4; 1270 - break; 1271 - default: 1272 - r->r_addend = (Elf_Addr)(-1); 1268 + return TO_NATIVE(*location) + 4; 1273 1269 } 1274 - return 0; 1270 + 1271 + return (Elf_Addr)(-1); 1275 1272 } 1276 1273 1277 1274 #ifndef R_ARM_CALL ··· 1312 1315 return (int32_t)(value << shift) >> shift; 1313 1316 } 1314 1317 1315 - static int addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) 1318 + static Elf_Addr addend_arm_rel(void *loc, Elf_Sym *sym, Elf_Rela *r) 1316 1319 { 1317 1320 unsigned int r_typ = ELF_R_TYPE(r->r_info); 1318 1321 uint32_t inst, upper, lower, sign, j1, j2; ··· 1322 1325 case R_ARM_ABS32: 1323 1326 case R_ARM_REL32: 1324 1327 inst = TO_NATIVE(*(uint32_t *)loc); 1325 - r->r_addend = inst + sym->st_value; 1326 - break; 1328 + return inst + sym->st_value; 1327 1329 case R_ARM_MOVW_ABS_NC: 1328 1330 case R_ARM_MOVT_ABS: 1329 1331 inst = TO_NATIVE(*(uint32_t *)loc); 1330 1332 offset = sign_extend32(((inst & 0xf0000) >> 4) | (inst & 0xfff), 1331 1333 15); 1332 - r->r_addend = offset + sym->st_value; 1333 - break; 1334 + return offset + sym->st_value; 1334 1335 case R_ARM_PC24: 1335 1336 case R_ARM_CALL: 1336 1337 case R_ARM_JUMP24: 1337 1338 inst = TO_NATIVE(*(uint32_t *)loc); 1338 1339 offset = sign_extend32((inst & 0x00ffffff) << 2, 25); 1339 - r->r_addend = offset + sym->st_value + 8; 1340 - break; 1340 + return offset + sym->st_value + 8; 1341 1341 case R_ARM_THM_MOVW_ABS_NC: 1342 1342 case R_ARM_THM_MOVT_ABS: 1343 1343 upper = TO_NATIVE(*(uint16_t *)loc); ··· 1344 1350 ((lower & 0x7000) >> 4) | 1345 1351 (lower & 0x00ff), 1346 1352 15); 1347 - r->r_addend = offset + sym->st_value; 1348 - break; 1353 + return offset + sym->st_value; 1349 1354 case R_ARM_THM_JUMP19: 1350 1355 /* 1351 1356 * Encoding T3: ··· 1365 1372 ((upper & 0x03f) << 12) | 1366 1373 ((lower & 0x07ff) << 1), 1367 1374 20); 1368 - r->r_addend = offset + sym->st_value + 4; 1369 - break; 1375 + return offset + sym->st_value + 4; 1370 1376 case R_ARM_THM_CALL: 1371 1377 case R_ARM_THM_JUMP24: 1372 1378 /* ··· 1391 1399 ((upper & 0x03ff) << 12) | 1392 1400 ((lower & 0x07ff) << 1), 1393 1401 24); 1394 - r->r_addend = offset + sym->st_value + 4; 1395 - break; 1396 - default: 1397 - r->r_addend = (Elf_Addr)(-1); 1402 + return offset + sym->st_value + 4; 1398 1403 } 1399 - return 0; 1404 + 1405 + return (Elf_Addr)(-1); 1400 1406 } 1401 1407 1402 - static int addend_mips_rel(uint32_t *location, Elf_Rela *r) 1408 + static Elf_Addr addend_mips_rel(uint32_t *location, Elf_Rela *r) 1403 1409 { 1404 1410 unsigned int r_typ = ELF_R_TYPE(r->r_info); 1405 1411 uint32_t inst; ··· 1405 1415 inst = TO_NATIVE(*location); 1406 1416 switch (r_typ) { 1407 1417 case R_MIPS_LO16: 1408 - r->r_addend = inst & 0xffff; 1409 - break; 1418 + return inst & 0xffff; 1410 1419 case R_MIPS_26: 1411 - r->r_addend = (inst & 0x03ffffff) << 2; 1412 - break; 1420 + return (inst & 0x03ffffff) << 2; 1413 1421 case R_MIPS_32: 1414 - r->r_addend = inst; 1415 - break; 1416 - default: 1417 - r->r_addend = (Elf_Addr)(-1); 1422 + return inst; 1418 1423 } 1419 - return 0; 1424 + return (Elf_Addr)(-1); 1420 1425 } 1421 1426 1422 1427 #ifndef EM_RISCV ··· 1498 1513 1499 1514 for (rel = start; rel < stop; rel++) { 1500 1515 Elf_Sym *tsym; 1516 + Elf_Addr taddr = 0; 1501 1517 void *loc; 1502 1518 1503 1519 r.r_offset = TO_NATIVE(rel->r_offset); ··· 1517 1531 r.r_info = TO_NATIVE(rel->r_info); 1518 1532 r_sym = ELF_R_SYM(r.r_info); 1519 1533 #endif 1520 - r.r_addend = 0; 1521 1534 1522 1535 loc = sym_get_data_by_offset(elf, fsecndx, r.r_offset); 1523 1536 tsym = elf->symtab_start + r_sym; 1524 1537 1525 1538 switch (elf->hdr->e_machine) { 1526 1539 case EM_386: 1527 - addend_386_rel(loc, &r); 1540 + taddr = addend_386_rel(loc, &r); 1528 1541 break; 1529 1542 case EM_ARM: 1530 - addend_arm_rel(loc, tsym, &r); 1543 + taddr = addend_arm_rel(loc, tsym, &r); 1531 1544 break; 1532 1545 case EM_MIPS: 1533 - addend_mips_rel(loc, &r); 1546 + taddr = addend_mips_rel(loc, &r); 1534 1547 break; 1535 1548 default: 1536 1549 fatal("Please add code to calculate addend for this architecture\n"); 1537 1550 } 1538 1551 1539 1552 check_section_mismatch(mod, elf, tsym, 1540 - fsecndx, fromsec, r.r_offset, r.r_addend); 1553 + fsecndx, fromsec, r.r_offset, taddr); 1541 1554 } 1542 1555 } 1543 1556