| OLD | NEW |
| 1 /* TILEPro-specific support for 32-bit ELF. | 1 /* TILEPro-specific support for 32-bit ELF. |
| 2 Copyright 2011 Free Software Foundation, Inc. | 2 Copyright 2011, 2012 Free Software Foundation, Inc. |
| 3 | 3 |
| 4 This file is part of BFD, the Binary File Descriptor library. | 4 This file is part of BFD, the Binary File Descriptor library. |
| 5 | 5 |
| 6 This program is free software; you can redistribute it and/or modify | 6 This program is free software; you can redistribute it and/or modify |
| 7 it under the terms of the GNU General Public License as published by | 7 it under the terms of the GNU General Public License as published by |
| 8 the Free Software Foundation; either version 3 of the License, or | 8 the Free Software Foundation; either version 3 of the License, or |
| 9 (at your option) any later version. | 9 (at your option) any later version. |
| 10 | 10 |
| 11 This program is distributed in the hope that it will be useful, | 11 This program is distributed in the hope that it will be useful, |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 14 GNU General Public License for more details. | 14 GNU General Public License for more details. |
| 15 | 15 |
| 16 You should have received a copy of the GNU General Public License | 16 You should have received a copy of the GNU General Public License |
| 17 along with this program; if not, write to the Free Software | 17 along with this program; if not, write to the Free Software |
| 18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, | 18 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, |
| 19 MA 02110-1301, USA. */ | 19 MA 02110-1301, USA. */ |
| 20 | 20 |
| 21 #include "sysdep.h" |
| 21 #include "bfd.h" | 22 #include "bfd.h" |
| 22 #include "sysdep.h" | |
| 23 #include "libbfd.h" | 23 #include "libbfd.h" |
| 24 #include "elf-bfd.h" | 24 #include "elf-bfd.h" |
| 25 #include "elf/tilepro.h" | 25 #include "elf/tilepro.h" |
| 26 #include "opcode/tilepro.h" | 26 #include "opcode/tilepro.h" |
| 27 #include "libiberty.h" | 27 #include "libiberty.h" |
| 28 #include "elf32-tilepro.h" | 28 #include "elf32-tilepro.h" |
| 29 | 29 |
| 30 #define TILEPRO_BYTES_PER_WORD 4 | 30 #define TILEPRO_BYTES_PER_WORD 4 |
| 31 | 31 |
| 32 static reloc_howto_type tilepro_elf_howto_table [] = | 32 static reloc_howto_type tilepro_elf_howto_table [] = |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y0, 0, 5), | 373 TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y0, 0, 5), |
| 374 TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y1, 0, 5), | 374 TILEPRO_UIMM_HOWTO(R_TILEPRO_SHAMT_Y1, 0, 5), |
| 375 | 375 |
| 376 TILEPRO_IMM_HOWTO(R_TILEPRO_DEST_IMM8_X1, 0, 8), | 376 TILEPRO_IMM_HOWTO(R_TILEPRO_DEST_IMM8_X1, 0, 8), |
| 377 | 377 |
| 378 /* These relocs are currently not defined. */ | 378 /* These relocs are currently not defined. */ |
| 379 EMPTY_HOWTO (56), | 379 EMPTY_HOWTO (56), |
| 380 EMPTY_HOWTO (57), | 380 EMPTY_HOWTO (57), |
| 381 EMPTY_HOWTO (58), | 381 EMPTY_HOWTO (58), |
| 382 EMPTY_HOWTO (59), | 382 EMPTY_HOWTO (59), |
| 383 EMPTY_HOWTO (60), | 383 |
| 384 EMPTY_HOWTO (61), | 384 HOWTO (R_TILEPRO_TLS_GD_CALL, /* type */ |
| 385 EMPTY_HOWTO (62), | 385 » TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, /* rightshift */ |
| 386 EMPTY_HOWTO (63), | 386 » 2,» » » /* size (0 = byte, 1 = short, 2 = long) */ |
| 387 EMPTY_HOWTO (64), | 387 » 29,» » » /* bitsize */ |
| 388 EMPTY_HOWTO (65), | 388 » TRUE,» » » /* pc_relative */ |
| 389 » 0,» » » /* bitpos */ |
| 390 » complain_overflow_signed,/* complain_on_overflow */ |
| 391 » bfd_elf_generic_reloc, /* special_function */ |
| 392 » "R_TILEPRO_TLS_GD_CALL", /* name */ |
| 393 » FALSE,»» » /* partial_inplace */ |
| 394 » 0,» » » /* src_mask */ |
| 395 » -1,» » » /* dst_mask */ |
| 396 » TRUE), » » /* pcrel_offset */ |
| 397 |
| 398 TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X0_TLS_GD_ADD, 0, 8), |
| 399 TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_X1_TLS_GD_ADD, 0, 8), |
| 400 TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y0_TLS_GD_ADD, 0, 8), |
| 401 TILEPRO_IMM_HOWTO(R_TILEPRO_IMM8_Y1_TLS_GD_ADD, 0, 8), |
| 402 TILEPRO_IMM_HOWTO(R_TILEPRO_TLS_IE_LOAD, 0, 8), |
| 389 | 403 |
| 390 /* Offsets into the GOT of TLS Descriptors. */ | 404 /* Offsets into the GOT of TLS Descriptors. */ |
| 391 | 405 |
| 392 HOWTO (R_TILEPRO_IMM16_X0_TLS_GD,/* type */ | 406 HOWTO (R_TILEPRO_IMM16_X0_TLS_GD,/* type */ |
| 393 0, /* rightshift */ | 407 0, /* rightshift */ |
| 394 1, /* size (0 = byte, 1 = short, 2 = long) */ | 408 1, /* size (0 = byte, 1 = short, 2 = long) */ |
| 395 16, /* bitsize */ | 409 16, /* bitsize */ |
| 396 FALSE, /* pc_relative */ | 410 FALSE, /* pc_relative */ |
| 397 0, /* bitpos */ | 411 0, /* bitpos */ |
| 398 complain_overflow_signed, /* complain_on_overflow */ | 412 complain_overflow_signed, /* complain_on_overflow */ |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 FALSE, /* pc_relative */ | 461 FALSE, /* pc_relative */ |
| 448 0, /* bitpos */ | 462 0, /* bitpos */ |
| 449 complain_overflow_signed, /* complain_on_overflow */ | 463 complain_overflow_signed, /* complain_on_overflow */ |
| 450 bfd_elf_generic_reloc, /* special_function */ | 464 bfd_elf_generic_reloc, /* special_function */ |
| 451 "R_TILEPRO_IMM16_X1_TLS_IE",/* name */ | 465 "R_TILEPRO_IMM16_X1_TLS_IE",/* name */ |
| 452 FALSE, /* partial_inplace */ | 466 FALSE, /* partial_inplace */ |
| 453 0, /* src_mask */ | 467 0, /* src_mask */ |
| 454 -1, /* dst_mask */ | 468 -1, /* dst_mask */ |
| 455 TRUE), /* pcrel_offset */ | 469 TRUE), /* pcrel_offset */ |
| 456 | 470 |
| 457 #define TILEPRO_IMM16_HOWTO_TLS_IE(name, rshift) \ | 471 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_LO, 0), |
| 458 HOWTO (name, rshift, 1, 16, FALSE, 0, \ | 472 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_LO, 0), |
| 459 complain_overflow_dont, bfd_elf_generic_reloc, \ | 473 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16), |
| 460 #name, FALSE, 0, 0xffff, TRUE) | 474 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16), |
| 461 | 475 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16), |
| 462 TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_LO, 0), | 476 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16), |
| 463 TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_LO, 0), | |
| 464 TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HI, 16), | |
| 465 TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HI, 16), | |
| 466 TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X0_TLS_IE_HA, 16), | |
| 467 TILEPRO_IMM16_HOWTO_TLS_IE (R_TILEPRO_IMM16_X1_TLS_IE_HA, 16), | |
| 468 | 477 |
| 469 /* These are common with the Solaris TLS implementation. */ | 478 /* These are common with the Solaris TLS implementation. */ |
| 470 HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont, | 479 HOWTO(R_TILEPRO_TLS_DTPMOD32, 0, 0, 0, FALSE, 0, complain_overflow_dont, |
| 471 bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32", | 480 bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPMOD32", |
| 472 FALSE, 0, 0, TRUE), | 481 FALSE, 0, 0, TRUE), |
| 473 HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, | 482 HOWTO(R_TILEPRO_TLS_DTPOFF32, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, |
| 474 bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32", | 483 bfd_elf_generic_reloc, "R_TILEPRO_TLS_DTPOFF32", |
| 475 FALSE, 0, 0xFFFFFFFF, TRUE), | 484 FALSE, 0, 0xFFFFFFFF, TRUE), |
| 476 HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont, | 485 HOWTO(R_TILEPRO_TLS_TPOFF32, 0, 0, 0, FALSE, 0, complain_overflow_dont, |
| 477 bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32", | 486 bfd_elf_generic_reloc, "R_TILEPRO_TLS_TPOFF32", |
| 478 FALSE, 0, 0, TRUE) | 487 FALSE, 0, 0, TRUE), |
| 479 | 488 |
| 489 HOWTO (R_TILEPRO_IMM16_X0_TLS_LE,/* type */ |
| 490 0, /* rightshift */ |
| 491 1, /* size (0 = byte, 1 = short, 2 = long) */ |
| 492 16, /* bitsize */ |
| 493 FALSE, /* pc_relative */ |
| 494 0, /* bitpos */ |
| 495 complain_overflow_signed, /* complain_on_overflow */ |
| 496 bfd_elf_generic_reloc, /* special_function */ |
| 497 "R_TILEPRO_IMM16_X0_TLS_LE",/* name */ |
| 498 FALSE, /* partial_inplace */ |
| 499 0, /* src_mask */ |
| 500 -1, /* dst_mask */ |
| 501 TRUE), /* pcrel_offset */ |
| 502 |
| 503 HOWTO (R_TILEPRO_IMM16_X1_TLS_LE,/* type */ |
| 504 0, /* rightshift */ |
| 505 1, /* size (0 = byte, 1 = short, 2 = long) */ |
| 506 16, /* bitsize */ |
| 507 FALSE, /* pc_relative */ |
| 508 0, /* bitpos */ |
| 509 complain_overflow_signed, /* complain_on_overflow */ |
| 510 bfd_elf_generic_reloc, /* special_function */ |
| 511 "R_TILEPRO_IMM16_X1_TLS_LE",/* name */ |
| 512 FALSE, /* partial_inplace */ |
| 513 0, /* src_mask */ |
| 514 -1, /* dst_mask */ |
| 515 TRUE), /* pcrel_offset */ |
| 516 |
| 517 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_LO, 0), |
| 518 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_LO, 0), |
| 519 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HI, 16), |
| 520 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HI, 16), |
| 521 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X0_TLS_LE_HA, 16), |
| 522 TILEPRO_IMM16_HOWTO (R_TILEPRO_IMM16_X1_TLS_LE_HA, 16), |
| 480 }; | 523 }; |
| 481 | 524 |
| 482 static reloc_howto_type tilepro_elf_howto_table2 [] = | 525 static reloc_howto_type tilepro_elf_howto_table2 [] = |
| 483 { | 526 { |
| 484 /* GNU extension to record C++ vtable hierarchy */ | 527 /* GNU extension to record C++ vtable hierarchy */ |
| 485 HOWTO (R_TILEPRO_GNU_VTINHERIT, /* type */ | 528 HOWTO (R_TILEPRO_GNU_VTINHERIT, /* type */ |
| 486 0, /* rightshift */ | 529 0, /* rightshift */ |
| 487 2, /* size (0 = byte, 1 = short, 2 = long) */ | 530 2, /* size (0 = byte, 1 = short, 2 = long) */ |
| 488 0, /* bitsize */ | 531 0, /* bitsize */ |
| 489 FALSE, /* pc_relative */ | 532 FALSE, /* pc_relative */ |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI, R_TILEPRO_IMM16_X0_GOT_HI) | 623 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI, R_TILEPRO_IMM16_X0_GOT_HI) |
| 581 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI, R_TILEPRO_IMM16_X1_GOT_HI) | 624 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI, R_TILEPRO_IMM16_X1_GOT_HI) |
| 582 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA, R_TILEPRO_IMM16_X0_GOT_HA) | 625 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA, R_TILEPRO_IMM16_X0_GOT_HA) |
| 583 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA, R_TILEPRO_IMM16_X1_GOT_HA) | 626 TH_REMAP (BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA, R_TILEPRO_IMM16_X1_GOT_HA) |
| 584 | 627 |
| 585 TH_REMAP (BFD_RELOC_TILEPRO_MMSTART_X0, R_TILEPRO_MMSTART_X0) | 628 TH_REMAP (BFD_RELOC_TILEPRO_MMSTART_X0, R_TILEPRO_MMSTART_X0) |
| 586 TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X0, R_TILEPRO_MMEND_X0) | 629 TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X0, R_TILEPRO_MMEND_X0) |
| 587 TH_REMAP (BFD_RELOC_TILEPRO_MMSTART_X1, R_TILEPRO_MMSTART_X1) | 630 TH_REMAP (BFD_RELOC_TILEPRO_MMSTART_X1, R_TILEPRO_MMSTART_X1) |
| 588 TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X1, R_TILEPRO_MMEND_X1) | 631 TH_REMAP (BFD_RELOC_TILEPRO_MMEND_X1, R_TILEPRO_MMEND_X1) |
| 589 TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X0, R_TILEPRO_SHAMT_X0) | 632 TH_REMAP (BFD_RELOC_TILEPRO_SHAMT_X0, R_TILEPRO_SHAMT_X0) |
error: old chunk mismatch |
None
| OLD | NEW |