1
Fork 0

Adapt elf.ml to handle differences between Linux and FreeBSD.

This commit is contained in:
Rob Arnold 2011-02-05 01:09:35 -08:00 committed by Graydon Hoare
parent 6466795a70
commit a1cc5ac63c

View file

@ -44,7 +44,7 @@ type ei_data =
;; ;;
let elf_identification ei_class ei_data = let elf_identification sess ei_class ei_data =
SEQ SEQ
[| [|
STRING "\x7fELF"; STRING "\x7fELF";
@ -58,9 +58,17 @@ let elf_identification ei_class ei_data =
ELFDATANONE -> 0 ELFDATANONE -> 0
| ELFDATA2LSB -> 1 | ELFDATA2LSB -> 1
| ELFDATA2MSB -> 2); | ELFDATA2MSB -> 2);
1; (* EI_VERSION = EV_CURRENT *) 1; (* EI_VERSION = EV_CURRENT *)
0; (* EI_PAD #7 *)
0; (* EI_PAD #8 *) (* EI_OSABI *)
(match sess.Session.sess_targ with
FreeBSD_x86_elf -> 9
| Linux_x86_elf -> 3
| _ -> 0);
0; (* EI_ABIVERSION *)
0; (* EI_PAD #9 *) 0; (* EI_PAD #9 *)
0; (* EI_PAD #A *) 0; (* EI_PAD #A *)
0; (* EI_PAD #B *) 0; (* EI_PAD #B *)
@ -117,7 +125,7 @@ let elf32_header
in in
DEF DEF
(elf_header_fixup, (elf_header_fixup,
SEQ [| elf_identification ELFCLASS32 ei_data; SEQ [| elf_identification sess ELFCLASS32 ei_data;
WORD (TY_u16, (IMM (match e_type with WORD (TY_u16, (IMM (match e_type with
ET_NONE -> 0L ET_NONE -> 0L
| ET_REL -> 1L | ET_REL -> 1L
@ -1290,7 +1298,11 @@ let elf32_linux_x86_file
in in
let interp_section = let interp_section =
DEF (interp_section_fixup, ZSTRING "/lib/ld-linux.so.2")
DEF (interp_section_fixup, ZSTRING
(if sess.Session.sess_targ = FreeBSD_x86_elf
then "/libexec/ld-elf.so.1"
else "/lib/ld-linux.so.2"))
in in
let text_section = let text_section =
@ -1584,7 +1596,9 @@ let emit_file
let needed_libs = let needed_libs =
[| [|
"libc.so.6"; if sess.Session.sess_targ = FreeBSD_x86_elf
then "libc.so.7"
else "libc.so.6";
"librustrt.so" "librustrt.so"
|] |]
in in