Changeset 609 for branches/GNU/src/binutils/bfd/elfarm-nabi.c
- Timestamp:
- Aug 16, 2003, 6:59:22 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GNU/src/binutils/bfd/elfarm-nabi.c
-
Property cvs2svn:cvs-rev
changed from
1.1
to1.1.1.2
r608 r609 1 1 /* 32-bit ELF support for ARM new abi option. 2 Copyright 1999, 2000, 2001 Free Software Foundation, Inc.2 Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. 3 3 4 4 This file is part of BFD, the Binary File Descriptor library. … … 28 28 #endif 29 29 30 #define USE_REL 30 #define USE_REL 1 31 31 32 32 #define TARGET_LITTLE_SYM bfd_elf32_littlearm_vec … … 43 43 static reloc_howto_type * elf32_arm_reloc_type_lookup 44 44 PARAMS ((bfd * abfd, bfd_reloc_code_real_type code)); 45 static bfd_boolean elf32_arm_nabi_grok_prstatus 46 PARAMS ((bfd *abfd, Elf_Internal_Note *note)); 47 static bfd_boolean elf32_arm_nabi_grok_psinfo 48 PARAMS ((bfd *abfd, Elf_Internal_Note *note)); 45 49 46 50 /* Note: code such as elf32_arm_reloc_type_lookup expect to use e.g. … … 55 59 0, /* size (0 = byte, 1 = short, 2 = long) */ 56 60 0, /* bitsize */ 57 false, /* pc_relative */61 FALSE, /* pc_relative */ 58 62 0, /* bitpos */ 59 63 complain_overflow_dont,/* complain_on_overflow */ 60 64 bfd_elf_generic_reloc, /* special_function */ 61 65 "R_ARM_NONE", /* name */ 62 false, /* partial_inplace */63 0, /* src_mask */ 64 0, /* dst_mask */ 65 false), /* pcrel_offset */66 FALSE, /* partial_inplace */ 67 0, /* src_mask */ 68 0, /* dst_mask */ 69 FALSE), /* pcrel_offset */ 66 70 67 71 HOWTO (R_ARM_PC24, /* type */ … … 69 73 2, /* size (0 = byte, 1 = short, 2 = long) */ 70 74 24, /* bitsize */ 71 true, /* pc_relative */75 TRUE, /* pc_relative */ 72 76 0, /* bitpos */ 73 77 complain_overflow_signed,/* complain_on_overflow */ 74 78 bfd_elf_generic_reloc, /* special_function */ 75 79 "R_ARM_PC24", /* name */ 76 false, /* partial_inplace */80 FALSE, /* partial_inplace */ 77 81 0x00ffffff, /* src_mask */ 78 82 0x00ffffff, /* dst_mask */ 79 true), /* pcrel_offset */83 TRUE), /* pcrel_offset */ 80 84 81 85 /* 32 bit absolute */ … … 84 88 2, /* size (0 = byte, 1 = short, 2 = long) */ 85 89 32, /* bitsize */ 86 false, /* pc_relative */90 FALSE, /* pc_relative */ 87 91 0, /* bitpos */ 88 92 complain_overflow_bitfield,/* complain_on_overflow */ 89 93 bfd_elf_generic_reloc, /* special_function */ 90 94 "R_ARM_ABS32", /* name */ 91 false, /* partial_inplace */95 FALSE, /* partial_inplace */ 92 96 0xffffffff, /* src_mask */ 93 97 0xffffffff, /* dst_mask */ 94 false), /* pcrel_offset */98 FALSE), /* pcrel_offset */ 95 99 96 100 /* standard 32bit pc-relative reloc */ … … 99 103 2, /* size (0 = byte, 1 = short, 2 = long) */ 100 104 32, /* bitsize */ 101 true, /* pc_relative */105 TRUE, /* pc_relative */ 102 106 0, /* bitpos */ 103 107 complain_overflow_bitfield,/* complain_on_overflow */ 104 108 bfd_elf_generic_reloc, /* special_function */ 105 109 "R_ARM_REL32", /* name */ 106 false, /* partial_inplace */110 FALSE, /* partial_inplace */ 107 111 0xffffffff, /* src_mask */ 108 112 0xffffffff, /* dst_mask */ 109 true), /* pcrel_offset */113 TRUE), /* pcrel_offset */ 110 114 111 115 /* 8 bit absolute */ … … 114 118 0, /* size (0 = byte, 1 = short, 2 = long) */ 115 119 8, /* bitsize */ 116 false, /* pc_relative */120 FALSE, /* pc_relative */ 117 121 0, /* bitpos */ 118 122 complain_overflow_bitfield,/* complain_on_overflow */ 119 123 bfd_elf_generic_reloc, /* special_function */ 120 124 "R_ARM_PC13", /* name */ 121 false, /* partial_inplace */125 FALSE, /* partial_inplace */ 122 126 0x000000ff, /* src_mask */ 123 127 0x000000ff, /* dst_mask */ 124 false), /* pcrel_offset */128 FALSE), /* pcrel_offset */ 125 129 126 130 /* 16 bit absolute */ … … 129 133 1, /* size (0 = byte, 1 = short, 2 = long) */ 130 134 16, /* bitsize */ 131 false, /* pc_relative */135 FALSE, /* pc_relative */ 132 136 0, /* bitpos */ 133 137 complain_overflow_bitfield,/* complain_on_overflow */ 134 138 bfd_elf_generic_reloc, /* special_function */ 135 139 "R_ARM_ABS16", /* name */ 136 false, /* partial_inplace */137 0 ,/* src_mask */138 0 ,/* dst_mask */139 false), /* pcrel_offset */140 FALSE, /* partial_inplace */ 141 0x0000ffff, /* src_mask */ 142 0x0000ffff, /* dst_mask */ 143 FALSE), /* pcrel_offset */ 140 144 141 145 /* 12 bit absolute */ … … 144 148 2, /* size (0 = byte, 1 = short, 2 = long) */ 145 149 12, /* bitsize */ 146 false, /* pc_relative */150 FALSE, /* pc_relative */ 147 151 0, /* bitpos */ 148 152 complain_overflow_bitfield,/* complain_on_overflow */ 149 153 bfd_elf_generic_reloc, /* special_function */ 150 154 "R_ARM_ABS12", /* name */ 151 false, /* partial_inplace */155 FALSE, /* partial_inplace */ 152 156 0x000008ff, /* src_mask */ 153 157 0x000008ff, /* dst_mask */ 154 false), /* pcrel_offset */158 FALSE), /* pcrel_offset */ 155 159 156 160 HOWTO (R_ARM_THM_ABS5, /* type */ … … 158 162 1, /* size (0 = byte, 1 = short, 2 = long) */ 159 163 5, /* bitsize */ 160 false, /* pc_relative */164 FALSE, /* pc_relative */ 161 165 0, /* bitpos */ 162 166 complain_overflow_bitfield,/* complain_on_overflow */ 163 167 bfd_elf_generic_reloc, /* special_function */ 164 168 "R_ARM_THM_ABS5", /* name */ 165 false, /* partial_inplace */169 FALSE, /* partial_inplace */ 166 170 0x000007e0, /* src_mask */ 167 171 0x000007e0, /* dst_mask */ 168 false), /* pcrel_offset */172 FALSE), /* pcrel_offset */ 169 173 170 174 /* 8 bit absolute */ … … 173 177 0, /* size (0 = byte, 1 = short, 2 = long) */ 174 178 8, /* bitsize */ 175 false, /* pc_relative */179 FALSE, /* pc_relative */ 176 180 0, /* bitpos */ 177 181 complain_overflow_bitfield,/* complain_on_overflow */ 178 182 bfd_elf_generic_reloc, /* special_function */ 179 183 "R_ARM_ABS8", /* name */ 180 false, /* partial_inplace */184 FALSE, /* partial_inplace */ 181 185 0x000000ff, /* src_mask */ 182 186 0x000000ff, /* dst_mask */ 183 false), /* pcrel_offset */187 FALSE), /* pcrel_offset */ 184 188 185 189 HOWTO (R_ARM_SBREL32, /* type */ … … 187 191 0, /* size (0 = byte, 1 = short, 2 = long) */ 188 192 0, /* bitsize */ 189 false, /* pc_relative */193 FALSE, /* pc_relative */ 190 194 0, /* bitpos */ 191 195 complain_overflow_dont,/* complain_on_overflow */ 192 196 bfd_elf_generic_reloc, /* special_function */ 193 197 "R_ARM_SBREL32", /* name */ 194 false, /* partial_inplace */195 0, /* src_mask */ 196 0, /* dst_mask */ 197 false), /* pcrel_offset */198 FALSE, /* partial_inplace */ 199 0, /* src_mask */ 200 0, /* dst_mask */ 201 FALSE), /* pcrel_offset */ 198 202 199 203 HOWTO (R_ARM_THM_PC22, /* type */ … … 201 205 2, /* size (0 = byte, 1 = short, 2 = long) */ 202 206 23, /* bitsize */ 203 true, /* pc_relative */207 TRUE, /* pc_relative */ 204 208 0, /* bitpos */ 205 209 complain_overflow_signed,/* complain_on_overflow */ 206 210 bfd_elf_generic_reloc, /* special_function */ 207 211 "R_ARM_THM_PC22", /* name */ 208 false, /* partial_inplace */212 FALSE, /* partial_inplace */ 209 213 0x07ff07ff, /* src_mask */ 210 214 0x07ff07ff, /* dst_mask */ 211 true), /* pcrel_offset */215 TRUE), /* pcrel_offset */ 212 216 213 217 HOWTO (R_ARM_THM_PC8, /* type */ … … 215 219 1, /* size (0 = byte, 1 = short, 2 = long) */ 216 220 8, /* bitsize */ 217 true, /* pc_relative */221 TRUE, /* pc_relative */ 218 222 0, /* bitpos */ 219 223 complain_overflow_signed,/* complain_on_overflow */ 220 224 bfd_elf_generic_reloc, /* special_function */ 221 225 "R_ARM_THM_PC8", /* name */ 222 false, /* partial_inplace */226 FALSE, /* partial_inplace */ 223 227 0x000000ff, /* src_mask */ 224 228 0x000000ff, /* dst_mask */ 225 true), /* pcrel_offset */229 TRUE), /* pcrel_offset */ 226 230 227 231 HOWTO (R_ARM_AMP_VCALL9, /* type */ … … 229 233 1, /* size (0 = byte, 1 = short, 2 = long) */ 230 234 8, /* bitsize */ 231 true, /* pc_relative */235 TRUE, /* pc_relative */ 232 236 0, /* bitpos */ 233 237 complain_overflow_signed,/* complain_on_overflow */ 234 238 bfd_elf_generic_reloc, /* special_function */ 235 239 "R_ARM_AMP_VCALL9", /* name */ 236 false, /* partial_inplace */240 FALSE, /* partial_inplace */ 237 241 0x000000ff, /* src_mask */ 238 242 0x000000ff, /* dst_mask */ 239 true), /* pcrel_offset */243 TRUE), /* pcrel_offset */ 240 244 241 245 HOWTO (R_ARM_SWI24, /* type */ … … 243 247 0, /* size (0 = byte, 1 = short, 2 = long) */ 244 248 0, /* bitsize */ 245 false, /* pc_relative */249 FALSE, /* pc_relative */ 246 250 0, /* bitpos */ 247 251 complain_overflow_signed,/* complain_on_overflow */ 248 252 bfd_elf_generic_reloc, /* special_function */ 249 253 "R_ARM_SWI24", /* name */ 250 false, /* partial_inplace */254 FALSE, /* partial_inplace */ 251 255 0x00000000, /* src_mask */ 252 256 0x00000000, /* dst_mask */ 253 false), /* pcrel_offset */257 FALSE), /* pcrel_offset */ 254 258 255 259 HOWTO (R_ARM_THM_SWI8, /* type */ … … 257 261 0, /* size (0 = byte, 1 = short, 2 = long) */ 258 262 0, /* bitsize */ 259 false, /* pc_relative */263 FALSE, /* pc_relative */ 260 264 0, /* bitpos */ 261 265 complain_overflow_signed,/* complain_on_overflow */ 262 266 bfd_elf_generic_reloc, /* special_function */ 263 267 "R_ARM_SWI8", /* name */ 264 false, /* partial_inplace */268 FALSE, /* partial_inplace */ 265 269 0x00000000, /* src_mask */ 266 270 0x00000000, /* dst_mask */ 267 false), /* pcrel_offset */271 FALSE), /* pcrel_offset */ 268 272 269 273 /* BLX instruction for the ARM. */ … … 272 276 2, /* size (0 = byte, 1 = short, 2 = long) */ 273 277 25, /* bitsize */ 274 true, /* pc_relative */278 TRUE, /* pc_relative */ 275 279 0, /* bitpos */ 276 280 complain_overflow_signed,/* complain_on_overflow */ 277 281 bfd_elf_generic_reloc, /* special_function */ 278 282 "R_ARM_XPC25", /* name */ 279 false, /* partial_inplace */283 FALSE, /* partial_inplace */ 280 284 0x00ffffff, /* src_mask */ 281 285 0x00ffffff, /* dst_mask */ 282 true), /* pcrel_offset */286 TRUE), /* pcrel_offset */ 283 287 284 288 /* BLX instruction for the Thumb. */ … … 287 291 2, /* size (0 = byte, 1 = short, 2 = long) */ 288 292 22, /* bitsize */ 289 true, /* pc_relative */293 TRUE, /* pc_relative */ 290 294 0, /* bitpos */ 291 295 complain_overflow_signed,/* complain_on_overflow */ 292 296 bfd_elf_generic_reloc, /* special_function */ 293 297 "R_ARM_THM_XPC22", /* name */ 294 false, /* partial_inplace */298 FALSE, /* partial_inplace */ 295 299 0x07ff07ff, /* src_mask */ 296 300 0x07ff07ff, /* dst_mask */ 297 true), /* pcrel_offset */301 TRUE), /* pcrel_offset */ 298 302 299 303 /* These next three relocs are not defined, but we need to fill the space. */ … … 303 307 0, /* size (0 = byte, 1 = short, 2 = long) */ 304 308 0, /* bitsize */ 305 false, /* pc_relative */309 FALSE, /* pc_relative */ 306 310 0, /* bitpos */ 307 311 complain_overflow_dont,/* complain_on_overflow */ 308 312 bfd_elf_generic_reloc, /* special_function */ 309 313 "R_ARM_unknown_17", /* name */ 310 false, /* partial_inplace */311 0, /* src_mask */ 312 0, /* dst_mask */ 313 false), /* pcrel_offset */314 FALSE, /* partial_inplace */ 315 0, /* src_mask */ 316 0, /* dst_mask */ 317 FALSE), /* pcrel_offset */ 314 318 315 319 HOWTO (R_ARM_NONE, /* type */ … … 317 321 0, /* size (0 = byte, 1 = short, 2 = long) */ 318 322 0, /* bitsize */ 319 false, /* pc_relative */323 FALSE, /* pc_relative */ 320 324 0, /* bitpos */ 321 325 complain_overflow_dont,/* complain_on_overflow */ 322 326 bfd_elf_generic_reloc, /* special_function */ 323 327 "R_ARM_unknown_18", /* name */ 324 false, /* partial_inplace */325 0, /* src_mask */ 326 0, /* dst_mask */ 327 false), /* pcrel_offset */328 FALSE, /* partial_inplace */ 329 0, /* src_mask */ 330 0, /* dst_mask */ 331 FALSE), /* pcrel_offset */ 328 332 329 333 HOWTO (R_ARM_NONE, /* type */ … … 331 335 0, /* size (0 = byte, 1 = short, 2 = long) */ 332 336 0, /* bitsize */ 333 false, /* pc_relative */337 FALSE, /* pc_relative */ 334 338 0, /* bitpos */ 335 339 complain_overflow_dont,/* complain_on_overflow */ 336 340 bfd_elf_generic_reloc, /* special_function */ 337 341 "R_ARM_unknown_19", /* name */ 338 false, /* partial_inplace */339 0, /* src_mask */ 340 0, /* dst_mask */ 341 false), /* pcrel_offset */342 FALSE, /* partial_inplace */ 343 0, /* src_mask */ 344 0, /* dst_mask */ 345 FALSE), /* pcrel_offset */ 342 346 343 347 /* Relocs used in ARM Linux */ … … 347 351 2, /* size (0 = byte, 1 = short, 2 = long) */ 348 352 32, /* bitsize */ 349 false, /* pc_relative */353 FALSE, /* pc_relative */ 350 354 0, /* bitpos */ 351 355 complain_overflow_bitfield,/* complain_on_overflow */ 352 356 bfd_elf_generic_reloc, /* special_function */ 353 357 "R_ARM_COPY", /* name */ 354 true, /* partial_inplace */358 TRUE, /* partial_inplace */ 355 359 0xffffffff, /* src_mask */ 356 360 0xffffffff, /* dst_mask */ 357 false), /* pcrel_offset */361 FALSE), /* pcrel_offset */ 358 362 359 363 HOWTO (R_ARM_GLOB_DAT, /* type */ … … 361 365 2, /* size (0 = byte, 1 = short, 2 = long) */ 362 366 32, /* bitsize */ 363 false, /* pc_relative */367 FALSE, /* pc_relative */ 364 368 0, /* bitpos */ 365 369 complain_overflow_bitfield,/* complain_on_overflow */ 366 370 bfd_elf_generic_reloc, /* special_function */ 367 371 "R_ARM_GLOB_DAT", /* name */ 368 true, /* partial_inplace */372 TRUE, /* partial_inplace */ 369 373 0xffffffff, /* src_mask */ 370 374 0xffffffff, /* dst_mask */ 371 false), /* pcrel_offset */375 FALSE), /* pcrel_offset */ 372 376 373 377 HOWTO (R_ARM_JUMP_SLOT, /* type */ … … 375 379 2, /* size (0 = byte, 1 = short, 2 = long) */ 376 380 32, /* bitsize */ 377 false, /* pc_relative */381 FALSE, /* pc_relative */ 378 382 0, /* bitpos */ 379 383 complain_overflow_bitfield,/* complain_on_overflow */ 380 384 bfd_elf_generic_reloc, /* special_function */ 381 385 "R_ARM_JUMP_SLOT", /* name */ 382 true, /* partial_inplace */386 TRUE, /* partial_inplace */ 383 387 0xffffffff, /* src_mask */ 384 388 0xffffffff, /* dst_mask */ 385 false), /* pcrel_offset */389 FALSE), /* pcrel_offset */ 386 390 387 391 HOWTO (R_ARM_RELATIVE, /* type */ … … 389 393 2, /* size (0 = byte, 1 = short, 2 = long) */ 390 394 32, /* bitsize */ 391 false, /* pc_relative */395 FALSE, /* pc_relative */ 392 396 0, /* bitpos */ 393 397 complain_overflow_bitfield,/* complain_on_overflow */ 394 398 bfd_elf_generic_reloc, /* special_function */ 395 399 "R_ARM_RELATIVE", /* name */ 396 true, /* partial_inplace */400 TRUE, /* partial_inplace */ 397 401 0xffffffff, /* src_mask */ 398 402 0xffffffff, /* dst_mask */ 399 false), /* pcrel_offset */403 FALSE), /* pcrel_offset */ 400 404 401 405 HOWTO (R_ARM_GOTOFF, /* type */ … … 403 407 2, /* size (0 = byte, 1 = short, 2 = long) */ 404 408 32, /* bitsize */ 405 false, /* pc_relative */409 FALSE, /* pc_relative */ 406 410 0, /* bitpos */ 407 411 complain_overflow_bitfield,/* complain_on_overflow */ 408 412 bfd_elf_generic_reloc, /* special_function */ 409 413 "R_ARM_GOTOFF", /* name */ 410 true, /* partial_inplace */414 TRUE, /* partial_inplace */ 411 415 0xffffffff, /* src_mask */ 412 416 0xffffffff, /* dst_mask */ 413 false), /* pcrel_offset */417 FALSE), /* pcrel_offset */ 414 418 415 419 HOWTO (R_ARM_GOTPC, /* type */ … … 417 421 2, /* size (0 = byte, 1 = short, 2 = long) */ 418 422 32, /* bitsize */ 419 true, /* pc_relative */423 TRUE, /* pc_relative */ 420 424 0, /* bitpos */ 421 425 complain_overflow_bitfield,/* complain_on_overflow */ 422 426 bfd_elf_generic_reloc, /* special_function */ 423 427 "R_ARM_GOTPC", /* name */ 424 true, /* partial_inplace */428 TRUE, /* partial_inplace */ 425 429 0xffffffff, /* src_mask */ 426 430 0xffffffff, /* dst_mask */ 427 true), /* pcrel_offset */431 TRUE), /* pcrel_offset */ 428 432 429 433 HOWTO (R_ARM_GOT32, /* type */ … … 431 435 2, /* size (0 = byte, 1 = short, 2 = long) */ 432 436 32, /* bitsize */ 433 false, /* pc_relative */437 FALSE, /* pc_relative */ 434 438 0, /* bitpos */ 435 439 complain_overflow_bitfield,/* complain_on_overflow */ 436 440 bfd_elf_generic_reloc, /* special_function */ 437 441 "R_ARM_GOT32", /* name */ 438 true, /* partial_inplace */442 TRUE, /* partial_inplace */ 439 443 0xffffffff, /* src_mask */ 440 444 0xffffffff, /* dst_mask */ 441 false), /* pcrel_offset */445 FALSE), /* pcrel_offset */ 442 446 443 447 HOWTO (R_ARM_PLT32, /* type */ … … 445 449 2, /* size (0 = byte, 1 = short, 2 = long) */ 446 450 26, /* bitsize */ 447 true, /* pc_relative */451 TRUE, /* pc_relative */ 448 452 0, /* bitpos */ 449 453 complain_overflow_bitfield,/* complain_on_overflow */ 450 454 bfd_elf_generic_reloc, /* special_function */ 451 455 "R_ARM_PLT32", /* name */ 452 true, /* partial_inplace */456 TRUE, /* partial_inplace */ 453 457 0x00ffffff, /* src_mask */ 454 458 0x00ffffff, /* dst_mask */ 455 true), /* pcrel_offset */459 TRUE), /* pcrel_offset */ 456 460 457 461 /* End of relocs used in ARM Linux */ … … 461 465 0, /* size (0 = byte, 1 = short, 2 = long) */ 462 466 0, /* bitsize */ 463 false, /* pc_relative */467 FALSE, /* pc_relative */ 464 468 0, /* bitpos */ 465 469 complain_overflow_dont,/* complain_on_overflow */ 466 470 bfd_elf_generic_reloc, /* special_function */ 467 471 "R_ARM_RREL32", /* name */ 468 false, /* partial_inplace */469 0, /* src_mask */ 470 0, /* dst_mask */ 471 false), /* pcrel_offset */472 FALSE, /* partial_inplace */ 473 0, /* src_mask */ 474 0, /* dst_mask */ 475 FALSE), /* pcrel_offset */ 472 476 473 477 HOWTO (R_ARM_RABS32, /* type */ … … 475 479 0, /* size (0 = byte, 1 = short, 2 = long) */ 476 480 0, /* bitsize */ 477 false, /* pc_relative */481 FALSE, /* pc_relative */ 478 482 0, /* bitpos */ 479 483 complain_overflow_dont,/* complain_on_overflow */ 480 484 bfd_elf_generic_reloc, /* special_function */ 481 485 "R_ARM_RABS32", /* name */ 482 false, /* partial_inplace */483 0, /* src_mask */ 484 0, /* dst_mask */ 485 false), /* pcrel_offset */486 FALSE, /* partial_inplace */ 487 0, /* src_mask */ 488 0, /* dst_mask */ 489 FALSE), /* pcrel_offset */ 486 490 487 491 HOWTO (R_ARM_RPC24, /* type */ … … 489 493 0, /* size (0 = byte, 1 = short, 2 = long) */ 490 494 0, /* bitsize */ 491 false, /* pc_relative */495 FALSE, /* pc_relative */ 492 496 0, /* bitpos */ 493 497 complain_overflow_dont,/* complain_on_overflow */ 494 498 bfd_elf_generic_reloc, /* special_function */ 495 499 "R_ARM_RPC24", /* name */ 496 false, /* partial_inplace */497 0, /* src_mask */ 498 0, /* dst_mask */ 499 false), /* pcrel_offset */500 FALSE, /* partial_inplace */ 501 0, /* src_mask */ 502 0, /* dst_mask */ 503 FALSE), /* pcrel_offset */ 500 504 501 505 HOWTO (R_ARM_RBASE, /* type */ … … 503 507 0, /* size (0 = byte, 1 = short, 2 = long) */ 504 508 0, /* bitsize */ 505 false, /* pc_relative */509 FALSE, /* pc_relative */ 506 510 0, /* bitpos */ 507 511 complain_overflow_dont,/* complain_on_overflow */ 508 512 bfd_elf_generic_reloc, /* special_function */ 509 513 "R_ARM_RBASE", /* name */ 510 false, /* partial_inplace */511 0, /* src_mask */ 512 0, /* dst_mask */ 513 false), /* pcrel_offset */514 FALSE, /* partial_inplace */ 515 0, /* src_mask */ 516 0, /* dst_mask */ 517 FALSE), /* pcrel_offset */ 514 518 515 519 }; … … 521 525 2, /* size (0 = byte, 1 = short, 2 = long) */ 522 526 0, /* bitsize */ 523 false, /* pc_relative */527 FALSE, /* pc_relative */ 524 528 0, /* bitpos */ 525 529 complain_overflow_dont, /* complain_on_overflow */ 526 530 NULL, /* special_function */ 527 531 "R_ARM_GNU_VTINHERIT", /* name */ 528 false, /* partial_inplace */532 FALSE, /* partial_inplace */ 529 533 0, /* src_mask */ 530 534 0, /* dst_mask */ 531 false); /* pcrel_offset */535 FALSE); /* pcrel_offset */ 532 536 533 537 /* GNU extension to record C++ vtable member usage */ … … 537 541 2, /* size (0 = byte, 1 = short, 2 = long) */ 538 542 0, /* bitsize */ 539 false, /* pc_relative */543 FALSE, /* pc_relative */ 540 544 0, /* bitpos */ 541 545 complain_overflow_dont, /* complain_on_overflow */ 542 546 _bfd_elf_rel_vtable_reloc_fn, /* special_function */ 543 547 "R_ARM_GNU_VTENTRY", /* name */ 544 false, /* partial_inplace */548 FALSE, /* partial_inplace */ 545 549 0, /* src_mask */ 546 550 0, /* dst_mask */ 547 false); /* pcrel_offset */551 FALSE); /* pcrel_offset */ 548 552 549 553 /* 12 bit pc relative */ … … 553 557 1, /* size (0 = byte, 1 = short, 2 = long) */ 554 558 11, /* bitsize */ 555 true, /* pc_relative */559 TRUE, /* pc_relative */ 556 560 0, /* bitpos */ 557 561 complain_overflow_signed, /* complain_on_overflow */ 558 562 bfd_elf_generic_reloc, /* special_function */ 559 563 "R_ARM_THM_PC11", /* name */ 560 false, /* partial_inplace */564 FALSE, /* partial_inplace */ 561 565 0x000007ff, /* src_mask */ 562 566 0x000007ff, /* dst_mask */ 563 true); /* pcrel_offset */567 TRUE); /* pcrel_offset */ 564 568 565 569 /* 12 bit pc relative */ … … 569 573 1, /* size (0 = byte, 1 = short, 2 = long) */ 570 574 8, /* bitsize */ 571 true, /* pc_relative */575 TRUE, /* pc_relative */ 572 576 0, /* bitpos */ 573 577 complain_overflow_signed, /* complain_on_overflow */ 574 578 bfd_elf_generic_reloc, /* special_function */ 575 579 "R_ARM_THM_PC9", /* name */ 576 false, /* partial_inplace */580 FALSE, /* partial_inplace */ 577 581 0x000000ff, /* src_mask */ 578 582 0x000000ff, /* dst_mask */ 579 true); /* pcrel_offset */ 583 TRUE); /* pcrel_offset */ 584 585 static void elf32_arm_info_to_howto 586 PARAMS ((bfd *, arelent *, Elf_Internal_Rela *)); 580 587 581 588 static void … … 583 590 bfd * abfd ATTRIBUTE_UNUSED; 584 591 arelent * bfd_reloc; 585 Elf 32_Internal_Rel* elf_reloc;592 Elf_Internal_Rela * elf_reloc; 586 593 { 587 594 unsigned int r_type; … … 623 630 624 631 static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] = 625 {626 {BFD_RELOC_NONE, R_ARM_NONE},627 {BFD_RELOC_ARM_PCREL_BRANCH, R_ARM_PC24},628 {BFD_RELOC_ARM_PCREL_BLX, R_ARM_XPC25},629 {BFD_RELOC_THUMB_PCREL_BLX, R_ARM_THM_XPC22},630 {BFD_RELOC_32, R_ARM_ABS32},631 {BFD_RELOC_32_PCREL, R_ARM_REL32},632 {BFD_RELOC_8, R_ARM_ABS8},633 {BFD_RELOC_16, R_ARM_ABS16},634 {BFD_RELOC_ARM_OFFSET_IMM, R_ARM_ABS12},635 {BFD_RELOC_ARM_THUMB_OFFSET, R_ARM_THM_ABS5},636 {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22},637 {BFD_RELOC_ARM_COPY, R_ARM_COPY},638 {BFD_RELOC_ARM_GLOB_DAT, R_ARM_GLOB_DAT},639 {BFD_RELOC_ARM_JUMP_SLOT, R_ARM_JUMP_SLOT},640 {BFD_RELOC_ARM_RELATIVE, R_ARM_RELATIVE},641 {BFD_RELOC_ARM_GOTOFF, R_ARM_GOTOFF},642 {BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC},643 {BFD_RELOC_ARM_GOT32, R_ARM_GOT32},644 {BFD_RELOC_ARM_PLT32, R_ARM_PLT32}645 };632 { 633 {BFD_RELOC_NONE, R_ARM_NONE}, 634 {BFD_RELOC_ARM_PCREL_BRANCH, R_ARM_PC24}, 635 {BFD_RELOC_ARM_PCREL_BLX, R_ARM_XPC25}, 636 {BFD_RELOC_THUMB_PCREL_BLX, R_ARM_THM_XPC22}, 637 {BFD_RELOC_32, R_ARM_ABS32}, 638 {BFD_RELOC_32_PCREL, R_ARM_REL32}, 639 {BFD_RELOC_8, R_ARM_ABS8}, 640 {BFD_RELOC_16, R_ARM_ABS16}, 641 {BFD_RELOC_ARM_OFFSET_IMM, R_ARM_ABS12}, 642 {BFD_RELOC_ARM_THUMB_OFFSET, R_ARM_THM_ABS5}, 643 {BFD_RELOC_THUMB_PCREL_BRANCH23, R_ARM_THM_PC22}, 644 {BFD_RELOC_ARM_COPY, R_ARM_COPY}, 645 {BFD_RELOC_ARM_GLOB_DAT, R_ARM_GLOB_DAT}, 646 {BFD_RELOC_ARM_JUMP_SLOT, R_ARM_JUMP_SLOT}, 647 {BFD_RELOC_ARM_RELATIVE, R_ARM_RELATIVE}, 648 {BFD_RELOC_ARM_GOTOFF, R_ARM_GOTOFF}, 649 {BFD_RELOC_ARM_GOTPC, R_ARM_GOTPC}, 650 {BFD_RELOC_ARM_GOT32, R_ARM_GOT32}, 651 {BFD_RELOC_ARM_PLT32, R_ARM_PLT32} 652 }; 646 653 647 654 static reloc_howto_type * … … 675 682 } 676 683 684 /* Support for core dump NOTE sections */ 685 static bfd_boolean 686 elf32_arm_nabi_grok_prstatus (abfd, note) 687 bfd *abfd; 688 Elf_Internal_Note *note; 689 { 690 int offset; 691 size_t raw_size; 692 693 switch (note->descsz) 694 { 695 default: 696 return FALSE; 697 698 case 148: /* Linux/ARM 32-bit*/ 699 /* pr_cursig */ 700 elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); 701 702 /* pr_pid */ 703 elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); 704 705 /* pr_reg */ 706 offset = 72; 707 raw_size = 72; 708 709 break; 710 } 711 712 /* Make a ".reg/999" section. */ 713 return _bfd_elfcore_make_pseudosection (abfd, ".reg", 714 raw_size, note->descpos + offset); 715 } 716 717 static bfd_boolean 718 elf32_arm_nabi_grok_psinfo (abfd, note) 719 bfd *abfd; 720 Elf_Internal_Note *note; 721 { 722 switch (note->descsz) 723 { 724 default: 725 return FALSE; 726 727 case 124: /* Linux/ARM elf_prpsinfo */ 728 elf_tdata (abfd)->core_program 729 = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); 730 elf_tdata (abfd)->core_command 731 = _bfd_elfcore_strndup (abfd, note->descdata + 44, 80); 732 } 733 734 /* Note that for some reason, a spurious space is tacked 735 onto the end of the args in some (at least one anyway) 736 implementations, so strip it off if it exists. */ 737 738 { 739 char *command = elf_tdata (abfd)->core_command; 740 int n = strlen (command); 741 742 if (0 < n && command[n - 1] == ' ') 743 command[n - 1] = '\0'; 744 } 745 746 return TRUE; 747 } 748 749 #define elf_backend_grok_prstatus elf32_arm_nabi_grok_prstatus 750 #define elf_backend_grok_psinfo elf32_arm_nabi_grok_psinfo 751 677 752 #include "elf32-arm.h" -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.