Some ELF correctness issues, but apparently none enough to placate gdb.

This commit is contained in:
Graydon Hoare 2010-08-11 16:57:34 -07:00
parent 22719e45b8
commit 88d9a79ac8

View file

@ -177,6 +177,7 @@ let section_header
~(sh_addralign:int64)
~(sh_entsize:int64)
~(sh_link:int64 option)
~(sh_info:int64 option)
: frag =
SEQ
[|
@ -213,7 +214,9 @@ let section_header
WORD (TY_u32, (IMM (match sh_link with
None -> 0L
| Some i -> i)));
WORD (TY_u32, (IMM 0L)); (* sh_info *)
WORD (TY_u32, (IMM (match sh_info with
None -> 0L
| Some i -> i)));
WORD (TY_u32, (IMM sh_addralign));
WORD (TY_u32, (IMM sh_entsize));
|]
@ -633,7 +636,7 @@ let elf32_linux_x86_file
let dynsymndx = 4L in (* Section index of .dynsym *)
let dynstrndx = 5L in (* Section index of .dynstr *)
(* let hashndx = 6L in *) (* Section index of .hash *)
(* let pltndx = 7L in *) (* Section index of .plt *)
let pltndx = 7L in (* Section index of .plt *)
(* let gotpltndx = 8L in *) (* Section index of .got.plt *)
(* let relapltndx = 9L in *) (* Section index of .rela.plt *)
let datandx = 10L in (* Section index of .data *)
@ -695,7 +698,8 @@ let elf32_linux_x86_file
~section_fixup: None
~sh_addralign: 0L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .interp *)
(section_header
@ -706,7 +710,8 @@ let elf32_linux_x86_file
~section_fixup: (Some interp_section_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .text *)
(section_header
@ -717,7 +722,8 @@ let elf32_linux_x86_file
~section_fixup: (Some text_section_fixup)
~sh_addralign: 32L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .rodata *)
(section_header
@ -728,7 +734,8 @@ let elf32_linux_x86_file
~section_fixup: (Some rodata_section_fixup)
~sh_addralign: 32L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .dynsym *)
(section_header
@ -737,9 +744,10 @@ let elf32_linux_x86_file
~sh_type: SHT_DYNSYM
~sh_flags: [ SHF_ALLOC ]
~section_fixup: (Some dynsym_section_fixup)
~sh_addralign: 8L
~sh_addralign: 4L
~sh_entsize: elf32_symsize
~sh_link: (Some dynstrndx) );
~sh_link: (Some dynstrndx)
~sh_info: None );
(* .dynstr *)
(section_header
@ -750,7 +758,8 @@ let elf32_linux_x86_file
~section_fixup: (Some dynstr_section_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .hash *)
(section_header
@ -761,7 +770,8 @@ let elf32_linux_x86_file
~section_fixup: (Some hash_section_fixup)
~sh_addralign: 4L
~sh_entsize: 4L
~sh_link: (Some dynsymndx));
~sh_link: (Some dynsymndx)
~sh_info: None);
(* .plt *)
(section_header
@ -772,7 +782,8 @@ let elf32_linux_x86_file
~section_fixup: (Some plt_section_fixup)
~sh_addralign: 4L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .got.plt *)
(section_header
@ -783,7 +794,8 @@ let elf32_linux_x86_file
~section_fixup: (Some got_plt_section_fixup)
~sh_addralign: 4L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .rela.plt *)
(section_header
@ -794,7 +806,8 @@ let elf32_linux_x86_file
~section_fixup: (Some rela_plt_section_fixup)
~sh_addralign: 4L
~sh_entsize: elf32_rela_entsz
~sh_link: (Some dynsymndx));
~sh_link: (Some dynsymndx)
~sh_info: (Some pltndx));
(* .data *)
(section_header
@ -805,7 +818,8 @@ let elf32_linux_x86_file
~section_fixup: (Some data_section_fixup)
~sh_addralign: 32L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .bss *)
(section_header
@ -816,7 +830,8 @@ let elf32_linux_x86_file
~section_fixup: (Some bss_section_fixup)
~sh_addralign: 32L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .dynamic *)
(section_header
@ -827,7 +842,8 @@ let elf32_linux_x86_file
~section_fixup: (Some dynamic_section_fixup)
~sh_addralign: 8L
~sh_entsize: 0L
~sh_link: None);
~sh_link: (Some dynstrndx)
~sh_info: None);
(* .shstrtab *)
(section_header
@ -838,7 +854,8 @@ let elf32_linux_x86_file
~section_fixup: (Some shstrtab_section_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(*
FIXME: uncomment the dwarf section headers as you make use of them;
@ -857,7 +874,8 @@ let elf32_linux_x86_file
~section_fixup: (Some sem.Semant.ctxt_debug_aranges_fixup)
~sh_addralign: 8L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
*)
(* .debug_pubnames *)
(*
@ -869,7 +887,8 @@ let elf32_linux_x86_file
~section_fixup: (Some sem.Semant.ctxt_debug_pubnames_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
*)
(* .debug_info *)
@ -881,7 +900,8 @@ let elf32_linux_x86_file
~section_fixup: (Some sem.Semant.ctxt_debug_info_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .debug_abbrev *)
(section_header
@ -892,7 +912,9 @@ let elf32_linux_x86_file
~section_fixup: (Some sem.Semant.ctxt_debug_abbrev_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
(* .debug_line *)
(*
(section_header
@ -903,7 +925,8 @@ let elf32_linux_x86_file
~section_fixup: (Some sem.Semant.ctxt_debug_line_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
*)
(* .debug_frame *)
@ -916,7 +939,8 @@ let elf32_linux_x86_file
~section_fixup: (Some sem.Semant.ctxt_debug_frame_fixup)
~sh_addralign: 4L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
*)
(* .note.rust *)
@ -928,7 +952,8 @@ let elf32_linux_x86_file
~section_fixup: (Some note_rust_section_fixup)
~sh_addralign: 1L
~sh_entsize: 0L
~sh_link: None);
~sh_link: None
~sh_info: None);
|]
in
@ -999,7 +1024,7 @@ let elf32_linux_x86_file
elf32_header
~sess
~ei_data: ELFDATA2LSB
~e_type: ET_DYN
~e_type: (if sess.Session.sess_library_mode then ET_DYN else ET_EXEC)
~e_machine: EM_386
~e_version: EV_CURRENT