Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(154)

Side by Side Diff: third_party/yasm/patched-yasm/modules/objfmts/elf/elf.h

Issue 6170009: Update our yasm copy to yasm 1.1.0 (Part 1: yasm side)... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* $Id: elf.h 2040 2008-02-21 08:57:23Z peter $ 1 /* $Id: elf.h 2208 2009-07-22 05:45:03Z peter $
2 * ELF object format helpers 2 * ELF object format helpers
3 * 3 *
4 * Copyright (C) 2003-2007 Michael Urman 4 * Copyright (C) 2003-2007 Michael Urman
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright 11 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 R_386_TLS_GD_POP = 27, /* Tag for popl in GD TLS code */ 296 R_386_TLS_GD_POP = 27, /* Tag for popl in GD TLS code */
297 R_386_TLS_LDM_32 = 28, /* Direct 32 bit for local dynamic code */ 297 R_386_TLS_LDM_32 = 28, /* Direct 32 bit for local dynamic code */
298 R_386_TLS_LDM_PUSH = 29, /* Tag for pushl in LDM TLS code */ 298 R_386_TLS_LDM_PUSH = 29, /* Tag for pushl in LDM TLS code */
299 R_386_TLS_LDM_CALL = 30, /* Relocation for call to */ 299 R_386_TLS_LDM_CALL = 30, /* Relocation for call to */
300 R_386_TLS_LDM_POP = 31, /* Tag for popl in LDM TLS code */ 300 R_386_TLS_LDM_POP = 31, /* Tag for popl in LDM TLS code */
301 R_386_TLS_LDO_32 = 32, /* Offset relative to TLS block */ 301 R_386_TLS_LDO_32 = 32, /* Offset relative to TLS block */
302 R_386_TLS_IE_32 = 33, /* GOT entry for static TLS block */ 302 R_386_TLS_IE_32 = 33, /* GOT entry for static TLS block */
303 R_386_TLS_LE_32 = 34, /* Offset relative to static TLS block */ 303 R_386_TLS_LE_32 = 34, /* Offset relative to static TLS block */
304 R_386_TLS_DTPMOD32 = 35, /* ID of module containing symbol */ 304 R_386_TLS_DTPMOD32 = 35, /* ID of module containing symbol */
305 R_386_TLS_DTPOFF32 = 36, /* Offset in TLS block */ 305 R_386_TLS_DTPOFF32 = 36, /* Offset in TLS block */
306 R_386_TLS_TPOFF32 = 37 /* Offset in static TLS block */ 306 R_386_TLS_TPOFF32 = 37, /* Offset in static TLS block */
307 R_386_TLS_GOTDESC = 39,
308 R_386_TLS_DESC_CALL = 40,
309 R_386_TLS_DESC = 41
307 } elf_386_relocation_type; 310 } elf_386_relocation_type;
308 311
309 typedef enum { 312 typedef enum {
310 R_X86_64_NONE = 0, /* none */ 313 R_X86_64_NONE = 0, /* none */
311 R_X86_64_64 = 1, /* word64, S + A */ 314 R_X86_64_64 = 1, /* word64, S + A */
312 R_X86_64_PC32 = 2, /* word32, S + A - P */ 315 R_X86_64_PC32 = 2, /* word32, S + A - P */
313 R_X86_64_GOT32 = 3, /* word32, G + A */ 316 R_X86_64_GOT32 = 3, /* word32, G + A */
314 R_X86_64_PLT32 = 4, /* word32, L + A - P */ 317 R_X86_64_PLT32 = 4, /* word32, L + A - P */
315 R_X86_64_COPY = 5, /* none */ 318 R_X86_64_COPY = 5, /* none */
316 R_X86_64_GLOB_DAT = 6, /* word64, S, set GOT entry to data address */ 319 R_X86_64_GLOB_DAT = 6, /* word64, S, set GOT entry to data address */
317 R_X86_64_JMP_SLOT = 7, /* word64, S, set GOT entry to code address */ 320 R_X86_64_JMP_SLOT = 7, /* word64, S, set GOT entry to code address */
318 R_X86_64_RELATIVE = 8, /* word64, B + A */ 321 R_X86_64_RELATIVE = 8, /* word64, B + A */
319 R_X86_64_GOTPCREL = 9, /* word32, G + GOT + A - P */ 322 R_X86_64_GOTPCREL = 9, /* word32, G + GOT + A - P */
320 R_X86_64_32 = 10, /* word32 (zero extend), S + A */ 323 R_X86_64_32 = 10, /* word32 (zero extend), S + A */
321 R_X86_64_32S = 11, /* word32 (sign extend), S + A */ 324 R_X86_64_32S = 11, /* word32 (sign extend), S + A */
322 R_X86_64_16 = 12, /* word16, S + A */ 325 R_X86_64_16 = 12, /* word16, S + A */
323 R_X86_64_PC16 = 13, /* word16, S + A - P */ 326 R_X86_64_PC16 = 13, /* word16, S + A - P */
324 R_X86_64_8 = 14, /* word8, S + A */ 327 R_X86_64_8 = 14, /* word8, S + A */
325 R_X86_64_PC8 = 15, /* word8, S + A - P */ 328 R_X86_64_PC8 = 15, /* word8, S + A - P */
326 R_X86_64_DPTMOD64 = 16, /* word64, ID of module containing symbol */ 329 R_X86_64_DPTMOD64 = 16, /* word64, ID of module containing symbol */
327 R_X86_64_DTPOFF64 = 17, /* word64, offset in TLS block */ 330 R_X86_64_DTPOFF64 = 17, /* word64, offset in TLS block */
328 R_X86_64_TPOFF64 = 18, /* word64, offset in initial TLS block */ 331 R_X86_64_TPOFF64 = 18, /* word64, offset in initial TLS block */
329 R_X86_64_TLSGD = 19, /* word32, PC-rel offset to GD GOT block */ 332 R_X86_64_TLSGD = 19, /* word32, PC-rel offset to GD GOT block */
330 R_X86_64_TLSLD = 20, /* word32, PC-rel offset to LD GOT block */ 333 R_X86_64_TLSLD = 20, /* word32, PC-rel offset to LD GOT block */
331 R_X86_64_DTPOFF32 = 21, /* word32, offset to TLS block */ 334 R_X86_64_DTPOFF32 = 21, /* word32, offset to TLS block */
332 R_X86_64_GOTTPOFF = 22, /* word32, PC-rel offset to IE GOT entry */ 335 R_X86_64_GOTTPOFF = 22, /* word32, PC-rel offset to IE GOT entry */
333 R_X86_64_TPOFF32 = 23 /* word32, offset in initial TLS block */ 336 R_X86_64_TPOFF32 = 23, /* word32, offset in initial TLS block */
337 R_X86_64_PC64 = 24, /* word64, PC relative */
338 R_X86_64_GOTOFF64 = 25, /* word64, offset to GOT */
339 R_X86_64_GOTPC32 = 26, /* word32, signed pc relative to GOT */
340 R_X86_64_GOT64 = 27, /* word64, GOT entry offset */
341 R_X86_64_GOTPCREL64 = 28, /* word64, signed pc relative to GOT entry */
342 R_X86_64_GOTPC64 = 29, /* word64, signed pc relative to GOT */
343 R_X86_64_GOTPLT64 = 30, /* like GOT64, but indicates PLT entry needed */
344 R_X86_64_PLTOFF64 = 31, /* word64, GOT relative offset to PLT entry */
345 R_X86_64_GOTPC32_TLSDESC = 34, /* GOT offset for TLS descriptor */
346 R_X86_64_TLSDESC_CALL = 35, /* Marker for call through TLS descriptor */
347 R_X86_64_TLSDESC = 36 /* TLS descriptor */
334 } elf_x86_64_relocation_type; 348 } elf_x86_64_relocation_type;
335 349
336 struct elf_secthead { 350 struct elf_secthead {
337 elf_section_type type; 351 elf_section_type type;
338 elf_section_flags flags; 352 elf_section_flags flags;
339 elf_address offset; 353 elf_address offset;
340 yasm_intnum *size; 354 yasm_intnum *size;
341 elf_section_index link; 355 elf_section_index link;
342 elf_section_info info; /* see note ESD1 */ 356 elf_section_info info; /* see note ESD1 */
343 unsigned long align; 357 unsigned long align;
(...skipping 26 matching lines...) Expand all
370 * link -> SHN_UNDEF 384 * link -> SHN_UNDEF
371 * info -> 0 385 * info -> 0
372 */ 386 */
373 387
374 struct elf_reloc_entry { 388 struct elf_reloc_entry {
375 yasm_reloc reloc; 389 yasm_reloc reloc;
376 int rtype_rel; 390 int rtype_rel;
377 size_t valsize; 391 size_t valsize;
378 yasm_intnum *addend; 392 yasm_intnum *addend;
379 /*@null@*/ yasm_symrec *wrt; 393 /*@null@*/ yasm_symrec *wrt;
394 int is_GOT_sym;
380 }; 395 };
381 396
382 STAILQ_HEAD(elf_strtab_head, elf_strtab_entry); 397 STAILQ_HEAD(elf_strtab_head, elf_strtab_entry);
383 struct elf_strtab_entry { 398 struct elf_strtab_entry {
384 STAILQ_ENTRY(elf_strtab_entry) qlink; 399 STAILQ_ENTRY(elf_strtab_entry) qlink;
385 unsigned long index; 400 unsigned long index;
386 char *str; 401 char *str;
387 }; 402 };
388 403
389 STAILQ_HEAD(elf_symtab_head, elf_symtab_entry); 404 STAILQ_HEAD(elf_symtab_head, elf_symtab_entry);
(...skipping 10 matching lines...) Expand all
400 elf_symbol_binding bind; 415 elf_symbol_binding bind;
401 elf_symbol_type type; 416 elf_symbol_type type;
402 elf_symbol_vis vis; 417 elf_symbol_vis vis;
403 elf_symbol_index symindex; 418 elf_symbol_index symindex;
404 }; 419 };
405 420
406 #endif /* defined(YASM_OBJFMT_ELF_INTERNAL) */ 421 #endif /* defined(YASM_OBJFMT_ELF_INTERNAL) */
407 422
408 extern const yasm_assoc_data_callback elf_section_data; 423 extern const yasm_assoc_data_callback elf_section_data;
409 extern const yasm_assoc_data_callback elf_symrec_data; 424 extern const yasm_assoc_data_callback elf_symrec_data;
425 extern const yasm_assoc_data_callback elf_ssym_symrec_data;
410 426
411 427
412 const elf_machine_handler *elf_set_arch(struct yasm_arch *arch, 428 const elf_machine_handler *elf_set_arch(struct yasm_arch *arch,
413 yasm_symtab *symtab, 429 yasm_symtab *symtab,
414 int bits_pref); 430 int bits_pref);
415 431
416 yasm_symrec *elf_get_special_sym(const char *name, const char *parser); 432 yasm_symrec *elf_get_special_sym(const char *name, const char *parser);
417 433
418 /* reloc functions */ 434 /* reloc functions */
419 int elf_is_wrt_sym_relative(yasm_symrec *wrt); 435 int elf_is_wrt_sym_relative(yasm_symrec *wrt);
420 int elf_is_wrt_pos_adjusted(yasm_symrec *wrt); 436 int elf_is_wrt_pos_adjusted(yasm_symrec *wrt);
421 elf_reloc_entry *elf_reloc_entry_create(yasm_symrec *sym, 437 elf_reloc_entry *elf_reloc_entry_create(yasm_symrec *sym,
422 /*@null@*/ yasm_symrec *wrt, 438 /*@null@*/ yasm_symrec *wrt,
423 yasm_intnum *addr, 439 yasm_intnum *addr,
424 int rel, 440 int rel,
425 size_t valsize); 441 size_t valsize,
442 int is_GOT_sym);
426 void elf_reloc_entry_destroy(void *entry); 443 void elf_reloc_entry_destroy(void *entry);
427 444
428 /* strtab functions */ 445 /* strtab functions */
429 elf_strtab_entry *elf_strtab_entry_create(const char *str); 446 elf_strtab_entry *elf_strtab_entry_create(const char *str);
430 void elf_strtab_entry_set_str(elf_strtab_entry *entry, const char *str); 447 void elf_strtab_entry_set_str(elf_strtab_entry *entry, const char *str);
431 elf_strtab_head *elf_strtab_create(void); 448 elf_strtab_head *elf_strtab_create(void);
432 elf_strtab_entry *elf_strtab_append_str(elf_strtab_head *head, const char *str); 449 elf_strtab_entry *elf_strtab_append_str(elf_strtab_head *head, const char *str);
433 void elf_strtab_destroy(elf_strtab_head *head); 450 void elf_strtab_destroy(elf_strtab_head *head);
434 unsigned long elf_strtab_output_to_file(FILE *f, elf_strtab_head *head); 451 unsigned long elf_strtab_output_to_file(FILE *f, elf_strtab_head *head);
435 452
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 elf_section_index link); 501 elf_section_index link);
485 elf_section_index elf_secthead_set_rel_index(elf_secthead *shead, 502 elf_section_index elf_secthead_set_rel_index(elf_secthead *shead,
486 elf_section_index sectidx); 503 elf_section_index sectidx);
487 elf_strtab_entry *elf_secthead_set_rel_name(elf_secthead *shead, 504 elf_strtab_entry *elf_secthead_set_rel_name(elf_secthead *shead,
488 elf_strtab_entry *entry); 505 elf_strtab_entry *entry);
489 elf_size elf_secthead_set_entsize(elf_secthead *shead, elf_size size); 506 elf_size elf_secthead_set_entsize(elf_secthead *shead, elf_size size);
490 struct yasm_symrec *elf_secthead_set_sym(elf_secthead *shead, 507 struct yasm_symrec *elf_secthead_set_sym(elf_secthead *shead,
491 struct yasm_symrec *sym); 508 struct yasm_symrec *sym);
492 void elf_secthead_add_size(elf_secthead *shead, yasm_intnum *size); 509 void elf_secthead_add_size(elf_secthead *shead, yasm_intnum *size);
493 char *elf_secthead_name_reloc_section(const char *basesect); 510 char *elf_secthead_name_reloc_section(const char *basesect);
494 void elf_handle_reloc_addend(yasm_intnum *intn, elf_reloc_entry *reloc); 511 void elf_handle_reloc_addend(yasm_intnum *intn,
512 elf_reloc_entry *reloc,
513 unsigned long offset);
495 unsigned long elf_secthead_write_rel_to_file(FILE *f, elf_section_index symtab, 514 unsigned long elf_secthead_write_rel_to_file(FILE *f, elf_section_index symtab,
496 yasm_section *sect, 515 yasm_section *sect,
497 elf_secthead *esd, 516 elf_secthead *esd,
498 elf_section_index sindex); 517 elf_section_index sindex);
499 unsigned long elf_secthead_write_relocs_to_file(FILE *f, yasm_section *sect, 518 unsigned long elf_secthead_write_relocs_to_file(FILE *f, yasm_section *sect,
500 elf_secthead *shead, 519 elf_secthead *shead,
501 yasm_errwarns *errwarns); 520 yasm_errwarns *errwarns);
502 long elf_secthead_set_file_offset(elf_secthead *shead, long pos); 521 long elf_secthead_set_file_offset(elf_secthead *shead, long pos);
503 522
504 /* program header function */ 523 /* program header function */
505 unsigned long 524 unsigned long
506 elf_proghead_get_size(void); 525 elf_proghead_get_size(void);
507 unsigned long 526 unsigned long
508 elf_proghead_write_to_file(FILE *f, 527 elf_proghead_write_to_file(FILE *f,
509 elf_offset secthead_addr, 528 elf_offset secthead_addr,
510 unsigned long secthead_count, 529 unsigned long secthead_count,
511 elf_section_index shstrtab_index); 530 elf_section_index shstrtab_index);
512 531
513 #endif /* ELF_H_INCLUDED */ 532 #endif /* ELF_H_INCLUDED */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698