ld/
* emulparams/vxworks.sh (VXWORKS_BASE_EM_FILE): New variable. (EXTRA_EM_FILE): Define. * emultempl/vxworks.em: New file. * ld.texinfo (--force-dynamic): Document. * Makefile.am (eelf32ppcvxworks.cm, eelf_i386_vxworks.c): Depend on vxworks.em. * Makefile.in: Regenerate. ld/testsuite/ * ld-i386/vxworks1-static.d, ld-i386/vxworks2.s, * ld-i386/vxworks2.sd, ld-i386/vxworks2-static.sd: New tests. * ld-i386/i386.exp: Run them. * ld-powerpc/vxworks1-static.d, ld-powerpc/vxworks2.s, * ld-powerpc/vxworks2.sd, ld-powerpc/vxworks2-static.sd: New tests. * ld-powerpc/powerpc.exp: Run them.
This commit is contained in:
parent
a10138943b
commit
4f471f3957
17 changed files with 172 additions and 8 deletions
10
ld/ChangeLog
10
ld/ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2006-03-03 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* emulparams/vxworks.sh (VXWORKS_BASE_EM_FILE): New variable.
|
||||
(EXTRA_EM_FILE): Define.
|
||||
* emultempl/vxworks.em: New file.
|
||||
* ld.texinfo (--force-dynamic): Document.
|
||||
* Makefile.am (eelf32ppcvxworks.cm, eelf_i386_vxworks.c): Depend
|
||||
on vxworks.em.
|
||||
* Makefile.in: Regenerate.
|
||||
|
||||
2006-03-02 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* emulparams/elf32ppccommon.sh: New file, extracted from...
|
||||
|
|
|
@ -768,7 +768,8 @@ eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
|
|||
${GENSCRIPTS} elf32ppcwindiss "$(tdir_elf32ppcwindiss)"
|
||||
eelf32ppcvxworks.c: $(srcdir)/emulparams/elf32ppcvxworks.sh \
|
||||
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emulparams/vxworks.sh \
|
||||
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
$(srcdir)/emultempl/vxworks.em $(srcdir)/emultempl/elf32.em \
|
||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
|
||||
eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
|
||||
$(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
|
||||
|
@ -901,7 +902,7 @@ eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
|
|||
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf_i386_ldso "$(tdir_elf_i386_ldso)"
|
||||
eelf_i386_vxworks.c: $(srcdir)/emulparams/elf_i386_vxworks.sh \
|
||||
$(srcdir)/emulparams/vxworks.sh \
|
||||
$(srcdir)/emulparams/vxworks.sh $(srcdir)/emultempl/vxworks.em \
|
||||
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf_i386_vxworks "$(tdir_elf_i386_vxworks)"
|
||||
eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
|
||||
|
|
|
@ -1574,7 +1574,8 @@ eelf32ppcwindiss.c: $(srcdir)/emulparams/elf32ppcwindiss.sh \
|
|||
${GENSCRIPTS} elf32ppcwindiss "$(tdir_elf32ppcwindiss)"
|
||||
eelf32ppcvxworks.c: $(srcdir)/emulparams/elf32ppcvxworks.sh \
|
||||
$(srcdir)/emulparams/elf32ppccommon.sh $(srcdir)/emulparams/vxworks.sh \
|
||||
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
$(srcdir)/emultempl/vxworks.em $(srcdir)/emultempl/elf32.em \
|
||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf32ppcvxworks "$(tdir_elf32ppcvxworks)"
|
||||
eelf32lsmip.c: $(srcdir)/emulparams/elf32lsmip.sh \
|
||||
$(srcdir)/emulparams/elf32lmip.sh $(srcdir)/emulparams/elf32bmip.sh \
|
||||
|
@ -1707,7 +1708,7 @@ eelf_i386_ldso.c: $(srcdir)/emulparams/elf_i386_ldso.sh \
|
|||
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf_i386_ldso "$(tdir_elf_i386_ldso)"
|
||||
eelf_i386_vxworks.c: $(srcdir)/emulparams/elf_i386_vxworks.sh \
|
||||
$(srcdir)/emulparams/vxworks.sh \
|
||||
$(srcdir)/emulparams/vxworks.sh $(srcdir)/emultempl/vxworks.em \
|
||||
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf_i386_vxworks "$(tdir_elf_i386_vxworks)"
|
||||
eelf_s390.c: $(srcdir)/emulparams/elf_s390.sh \
|
||||
|
|
|
@ -23,3 +23,5 @@ FINI_END='KEEP (*(.fini$99));
|
|||
ETEXT_NAME=etext_unrelocated
|
||||
OTHER_SYMBOLS="PROVIDE (_ehdr = ${TEXT_START_ADDR});"
|
||||
DATA_END_SYMBOLS=".edata : { PROVIDE (_edata = .); }"
|
||||
VXWORKS_BASE_EM_FILE=$EXTRA_EM_FILE
|
||||
EXTRA_EM_FILE=vxworks
|
||||
|
|
49
ld/emultempl/vxworks.em
Normal file
49
ld/emultempl/vxworks.em
Normal file
|
@ -0,0 +1,49 @@
|
|||
if test -n "$VXWORKS_BASE_EM_FILE" ; then
|
||||
. "${srcdir}/emultempl/${VXWORKS_BASE_EM_FILE}.em"
|
||||
fi
|
||||
|
||||
cat >>e${EMULATION_NAME}.c <<EOF
|
||||
|
||||
static int force_dynamic;
|
||||
|
||||
static void
|
||||
vxworks_after_open (void)
|
||||
{
|
||||
${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open} ();
|
||||
|
||||
if (force_dynamic
|
||||
&& link_info.input_bfds
|
||||
&& !_bfd_elf_link_create_dynamic_sections (link_info.input_bfds,
|
||||
&link_info))
|
||||
einfo ("%X%P: Cannot create dynamic sections %E\n");
|
||||
|
||||
if (!force_dynamic
|
||||
&& !link_info.shared
|
||||
&& elf_hash_table (&link_info)->dynamic_sections_created)
|
||||
einfo ("%X%P: Dynamic sections created in non-dynamic link\n");
|
||||
}
|
||||
|
||||
EOF
|
||||
|
||||
PARSE_AND_LIST_PROLOGUE=$PARSE_AND_LIST_PROLOGUE'
|
||||
enum {
|
||||
OPTION_FORCE_DYNAMIC = 501
|
||||
};
|
||||
'
|
||||
|
||||
PARSE_AND_LIST_LONGOPTS=$PARSE_AND_LIST_LONGOPTS'
|
||||
{"force-dynamic", no_argument, NULL, OPTION_FORCE_DYNAMIC},
|
||||
'
|
||||
|
||||
PARSE_AND_LIST_OPTIONS=$PARSE_AND_LIST_OPTIONS'
|
||||
fprintf (file, _("\
|
||||
--force-dynamic Always create dynamic sections\n"));
|
||||
'
|
||||
|
||||
PARSE_AND_LIST_ARGS_CASES=$PARSE_AND_LIST_ARGS_CASES'
|
||||
case OPTION_FORCE_DYNAMIC:
|
||||
force_dynamic = 1;
|
||||
break;
|
||||
'
|
||||
|
||||
LDEMUL_AFTER_OPEN=vxworks_after_open
|
|
@ -772,6 +772,12 @@ in larger executables.
|
|||
|
||||
This option is currently only supported on ELF platforms.
|
||||
|
||||
@kindex --force-dynamic
|
||||
@cindex forcing the creation of dynamic sections
|
||||
@item --force-dynamic
|
||||
Force the output file to have dynamic sections. This option is specific
|
||||
to VxWorks targets.
|
||||
|
||||
@cindex partial link
|
||||
@cindex relocatable output
|
||||
@kindex -r
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2006-03-03 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* ld-i386/vxworks1-static.d, ld-i386/vxworks2.s,
|
||||
* ld-i386/vxworks2.sd, ld-i386/vxworks2-static.sd: New tests.
|
||||
* ld-i386/i386.exp: Run them.
|
||||
* ld-powerpc/vxworks1-static.d, ld-powerpc/vxworks2.s,
|
||||
* ld-powerpc/vxworks2.sd, ld-powerpc/vxworks2-static.sd: New tests.
|
||||
* ld-powerpc/powerpc.exp: Run them.
|
||||
|
||||
2006-03-02 Richard Sandiford <richard@codesourcery.com>
|
||||
|
||||
* ld-powerpc/vxworks1.ld: Use a page alignment of 0x10000.
|
||||
|
|
|
@ -26,12 +26,24 @@ if {[istarget "i?86-*-vxworks"]} {
|
|||
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
|
||||
{readelf --symbols vxworks1-lib.nd}}
|
||||
"libvxworks1.so"}
|
||||
{"VxWorks dynamic executable test 1" \
|
||||
"tmpdir/libvxworks1.so -Tvxworks1.ld -q" "" {vxworks1.s}
|
||||
{"VxWorks executable test 1 (dynamic)" \
|
||||
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
|
||||
"" {vxworks1.s}
|
||||
{{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
|
||||
"vxworks1"}
|
||||
{"VxWorks executable test 2 (dynamic)" \
|
||||
"-Tvxworks1.ld -q --force-dynamic"
|
||||
"" {vxworks2.s}
|
||||
{{readelf --segments vxworks2.sd}}
|
||||
"vxworks2"}
|
||||
{"VxWorks executable test 2 (static)"
|
||||
"-Tvxworks1.ld"
|
||||
"" {vxworks2.s}
|
||||
{{readelf --segments vxworks2-static.sd}}
|
||||
"vxworks2"}
|
||||
}
|
||||
run_ld_link_tests $i386tests
|
||||
run_dump_test "vxworks1-static"
|
||||
}
|
||||
|
||||
if { !([istarget "i?86-*-elf*"]
|
||||
|
|
4
ld/testsuite/ld-i386/vxworks1-static.d
Normal file
4
ld/testsuite/ld-i386/vxworks1-static.d
Normal file
|
@ -0,0 +1,4 @@
|
|||
#name: VxWorks executable test 1 (static)
|
||||
#source: vxworks1.s
|
||||
#ld: tmpdir/libvxworks1.so -Tvxworks1.ld
|
||||
#error: Dynamic sections created in non-dynamic link
|
9
ld/testsuite/ld-i386/vxworks2-static.sd
Normal file
9
ld/testsuite/ld-i386/vxworks2-static.sd
Normal file
|
@ -0,0 +1,9 @@
|
|||
#...
|
||||
Elf file type is EXEC \(Executable file\)
|
||||
Entry point 0x80000
|
||||
#...
|
||||
Program Headers:
|
||||
Type .*
|
||||
LOAD .* 0x00080000 0x00080000 .* R E 0x1000
|
||||
|
||||
#...
|
5
ld/testsuite/ld-i386/vxworks2.s
Normal file
5
ld/testsuite/ld-i386/vxworks2.s
Normal file
|
@ -0,0 +1,5 @@
|
|||
.globl _start
|
||||
.type _start,@function
|
||||
_start:
|
||||
ret
|
||||
.end _start
|
13
ld/testsuite/ld-i386/vxworks2.sd
Normal file
13
ld/testsuite/ld-i386/vxworks2.sd
Normal file
|
@ -0,0 +1,13 @@
|
|||
#...
|
||||
Elf file type is EXEC \(Executable file\)
|
||||
Entry point 0x80400
|
||||
#...
|
||||
Program Headers:
|
||||
Type .*
|
||||
PHDR .*
|
||||
#...
|
||||
LOAD .* 0x00080000 0x00080000 .* R E 0x1000
|
||||
LOAD .* 0x00081000 0x00081000 .* RW 0x1000
|
||||
DYNAMIC .*
|
||||
|
||||
#...
|
|
@ -31,12 +31,24 @@ if {[istarget "*-*-vxworks"]} {
|
|||
{{readelf --relocs vxworks1-lib.rd} {objdump -dr vxworks1-lib.dd}
|
||||
{readelf --symbols vxworks1-lib.nd}}
|
||||
"libvxworks1.so"}
|
||||
{"VxWorks dynamic executable test 1" \
|
||||
"tmpdir/libvxworks1.so -Tvxworks1.ld -q" "-mregnames" {vxworks1.s}
|
||||
{"VxWorks executable test 1 (dynamic)" \
|
||||
"tmpdir/libvxworks1.so -Tvxworks1.ld -q --force-dynamic"
|
||||
"-mregnames" {vxworks1.s}
|
||||
{{readelf --relocs vxworks1.rd} {objdump -dr vxworks1.dd}}
|
||||
"vxworks1"}
|
||||
{"VxWorks executable test 2 (dynamic)" \
|
||||
"-Tvxworks1.ld -q --force-dynamic"
|
||||
"-mregnames" {vxworks2.s}
|
||||
{{readelf --segments vxworks2.sd}}
|
||||
"vxworks2"}
|
||||
{"VxWorks executable test 2 (static)"
|
||||
"-Tvxworks1.ld"
|
||||
"-mregnames" {vxworks2.s}
|
||||
{{readelf --segments vxworks2-static.sd}}
|
||||
"vxworks2"}
|
||||
}
|
||||
run_ld_link_tests $ppcvxtests
|
||||
run_dump_test "vxworks1-static"
|
||||
return
|
||||
}
|
||||
|
||||
|
|
4
ld/testsuite/ld-powerpc/vxworks1-static.d
Normal file
4
ld/testsuite/ld-powerpc/vxworks1-static.d
Normal file
|
@ -0,0 +1,4 @@
|
|||
#name: VxWorks executable test 1 (static)
|
||||
#source: vxworks1.s -mregnames
|
||||
#ld: tmpdir/libvxworks1.so -Tvxworks1.ld
|
||||
#error: Dynamic sections created in non-dynamic link
|
9
ld/testsuite/ld-powerpc/vxworks2-static.sd
Normal file
9
ld/testsuite/ld-powerpc/vxworks2-static.sd
Normal file
|
@ -0,0 +1,9 @@
|
|||
#...
|
||||
Elf file type is EXEC \(Executable file\)
|
||||
Entry point 0x80000
|
||||
#...
|
||||
Program Headers:
|
||||
Type .*
|
||||
LOAD .* 0x00080000 0x00080000 .* R E 0x10000
|
||||
|
||||
#...
|
5
ld/testsuite/ld-powerpc/vxworks2.s
Normal file
5
ld/testsuite/ld-powerpc/vxworks2.s
Normal file
|
@ -0,0 +1,5 @@
|
|||
.globl _start
|
||||
.type _start,@function
|
||||
_start:
|
||||
blr
|
||||
.end _start
|
13
ld/testsuite/ld-powerpc/vxworks2.sd
Normal file
13
ld/testsuite/ld-powerpc/vxworks2.sd
Normal file
|
@ -0,0 +1,13 @@
|
|||
#...
|
||||
Elf file type is EXEC \(Executable file\)
|
||||
Entry point 0x80400
|
||||
#...
|
||||
Program Headers:
|
||||
Type .*
|
||||
PHDR .*
|
||||
#...
|
||||
LOAD .* 0x00080000 0x00080000 .* R E 0x10000
|
||||
LOAD .* 0x00090000 0x00090000 .* RW 0x10000
|
||||
DYNAMIC .*
|
||||
|
||||
#...
|
Loading…
Reference in a new issue