aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorKai Tietz <kai.tietz@onevision.com>2010-09-22 08:03:42 +0000
committerKai Tietz <kai.tietz@onevision.com>2010-09-22 08:03:42 +0000
commitd48749734084702ffe2a535ece1d52f9aa6ac168 (patch)
tree2ea43369c4bb6ce6e18889adeb102c77ffdad5a0 /ld
parentcb2f80e68a7419ff24651d89699459e6973539d5 (diff)
downloadgdb-d48749734084702ffe2a535ece1d52f9aa6ac168.zip
gdb-d48749734084702ffe2a535ece1d52f9aa6ac168.tar.gz
gdb-d48749734084702ffe2a535ece1d52f9aa6ac168.tar.bz2
2010-09-22 Kai Tietz <kai.tietz@onevision.com>
* emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Add idata to orphan set. * emultempl/pep.em: Likewise. * scripttempl/armcoff.sc: Separate idata and add __IAT_start__ and __IAT_end__ labels. * scripttempl/pe.sc: Likewise. * scripttempl/pep.sc: Likewise.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog10
-rw-r--r--ld/emultempl/pe.em9
-rw-r--r--ld/emultempl/pep.em9
-rw-r--r--ld/scripttempl/armcoff.sc27
-rw-r--r--ld/scripttempl/pe.sc17
-rw-r--r--ld/scripttempl/pep.sc17
6 files changed, 76 insertions, 13 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 8f706c6..c7169e0 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,13 @@
+2010-09-22 Kai Tietz <kai.tietz@onevision.com>
+
+ * emultempl/pe.em (gld_${EMULATION_NAME}_place_orphan): Add
+ idata to orphan set.
+ * emultempl/pep.em: Likewise.
+ * scripttempl/armcoff.sc: Separate idata
+ and add __IAT_start__ and __IAT_end__ labels.
+ * scripttempl/pe.sc: Likewise.
+ * scripttempl/pep.sc: Likewise.
+
2010-09-20 David S. Miller <davem@davemloft.net>
* emulparams/elf32_sparc.sh: Set NOP to 0x01000000
diff --git a/ld/emultempl/pe.em b/ld/emultempl/pe.em
index a29f2e3..bb283c1 100644
--- a/ld/emultempl/pe.em
+++ b/ld/emultempl/pe.em
@@ -1939,6 +1939,9 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
{ ".text",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
0, 0, 0, 0 },
+ { ".idata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
{ ".rdata",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
0, 0, 0, 0 },
@@ -1952,6 +1955,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
enum orphan_save_index
{
orphan_text = 0,
+ orphan_idata,
orphan_rodata,
orphan_data,
orphan_bss
@@ -1985,7 +1989,10 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
else if ((s->flags & SEC_READONLY) == 0)
place = &hold[orphan_data];
else if ((s->flags & SEC_CODE) == 0)
- place = &hold[orphan_rodata];
+ {
+ place = (!strncmp (secname, ".idata\$", 7) ? &hold[orphan_idata]
+ : &hold[orphan_rodata]);
+ }
else
place = &hold[orphan_text];
diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em
index 6594a46c..39daa07 100644
--- a/ld/emultempl/pep.em
+++ b/ld/emultempl/pep.em
@@ -1677,6 +1677,9 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
{ ".text",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE,
0, 0, 0, 0 },
+ { ".idata",
+ SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
+ 0, 0, 0, 0 },
{ ".rdata",
SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA,
0, 0, 0, 0 },
@@ -1690,6 +1693,7 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
enum orphan_save_index
{
orphan_text = 0,
+ orphan_idata,
orphan_rodata,
orphan_data,
orphan_bss
@@ -1723,7 +1727,10 @@ gld_${EMULATION_NAME}_place_orphan (asection *s,
else if ((s->flags & SEC_READONLY) == 0)
place = &hold[orphan_data];
else if ((s->flags & SEC_CODE) == 0)
- place = &hold[orphan_rodata];
+ {
+ place = (!strncmp (secname, ".idata\$", 7) ? &hold[orphan_idata]
+ : &hold[orphan_rodata]);
+ }
else
place = &hold[orphan_text];
diff --git a/ld/scripttempl/armcoff.sc b/ld/scripttempl/armcoff.sc
index ebc019a..cefd6eb 100644
--- a/ld/scripttempl/armcoff.sc
+++ b/ld/scripttempl/armcoff.sc
@@ -17,7 +17,22 @@ DTOR='.dtor : {
*(SORT(.dtors.*))
*(.dtor)
}'
-
+if test "${RELOCATING}"; then
+ R_IDATA234='
+ SORT(*)(.idata$2)
+ SORT(*)(.idata$3)
+ /* These zeroes mark the end of the import list. */
+ LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
+ SORT(*)(.idata$4)'
+ R_IDATA5='SORT(*)(.idata$5)'
+ R_IDATA67='
+ SORT(*)(.idata$6)
+ SORT(*)(.idata$7)'
+else
+ R_IDATA234=
+ R_IDATA5=
+ R_IDATA67=
+fi
cat <<EOF
OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}", "${LITTLE_OUTPUT_FORMAT}")
${LIB_SEARCH_DIRS}
@@ -60,6 +75,16 @@ SECTIONS
}
${CONSTRUCTING+${RELOCATING-$CTOR}}
${CONSTRUCTING+${RELOCATING-$DTOR}}
+ .idata ${RELOCATING+BLOCK(__section_alignment__)} :
+ {
+ /* This cannot currently be handled with grouped sections.
+ See pep.em:sort_sections. */
+ ${R_IDATA234}
+ ${RELOCATING+__IAT_start__ = .;}
+ ${R_IDATA5}
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
+ }
.bss ${RELOCATING+ ALIGN(0x8)} :
{
${RELOCATING+ __bss_start__ = . ;}
diff --git a/ld/scripttempl/pe.sc b/ld/scripttempl/pe.sc
index f3cbe25..e178fce 100644
--- a/ld/scripttempl/pe.sc
+++ b/ld/scripttempl/pe.sc
@@ -23,13 +23,14 @@ if test "${RELOCATING}"; then
R_RDATA='*(.rdata)
*(SORT(.rdata$*))'
fi
- R_IDATA='
+ R_IDATA234='
SORT(*)(.idata$2)
SORT(*)(.idata$3)
/* These zeroes mark the end of the import list. */
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
- SORT(*)(.idata$4)
- SORT(*)(.idata$5)
+ SORT(*)(.idata$4)'
+ R_IDATA5='SORT(*)(.idata$5)'
+ R_IDATA67='
SORT(*)(.idata$6)
SORT(*)(.idata$7)'
R_CRT_XC='*(SORT(.CRT$XC*)) /* C initialization */'
@@ -46,7 +47,9 @@ else
R_TEXT=
R_DATA=
R_RDATA='*(.rdata)'
- R_IDATA=
+ R_IDATA234=
+ R_IDATA5=
+ R_IDATA67=
R_CRT=
R_RSRC=
fi
@@ -147,7 +150,11 @@ SECTIONS
{
/* This cannot currently be handled with grouped sections.
See pe.em:sort_sections. */
- ${R_IDATA}
+ ${R_IDATA234}
+ ${RELOCATING+__IAT_start__ = .;}
+ ${R_IDATA5}
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
}
.CRT ${RELOCATING+BLOCK(__section_alignment__)} :
{
diff --git a/ld/scripttempl/pep.sc b/ld/scripttempl/pep.sc
index 75abc9f..3682766 100644
--- a/ld/scripttempl/pep.sc
+++ b/ld/scripttempl/pep.sc
@@ -23,13 +23,14 @@ if test "${RELOCATING}"; then
R_RDATA='*(.rdata)
*(SORT(.rdata$*))'
fi
- R_IDATA='
+ R_IDATA234='
SORT(*)(.idata$2)
SORT(*)(.idata$3)
/* These zeroes mark the end of the import list. */
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
- SORT(*)(.idata$4)
- SORT(*)(.idata$5)
+ SORT(*)(.idata$4)'
+ R_IDATA5='SORT(*)(.idata$5)'
+ R_IDATA67='
SORT(*)(.idata$6)
SORT(*)(.idata$7)'
R_CRT_XC='*(SORT(.CRT$XC*)) /* C initialization */'
@@ -46,7 +47,9 @@ else
R_TEXT=
R_DATA=
R_RDATA='*(.rdata)'
- R_IDATA=
+ R_IDATA234=
+ R_IDATA5=
+ R_IDATA67=
R_CRT=
R_RSRC=
fi
@@ -153,7 +156,11 @@ SECTIONS
{
/* This cannot currently be handled with grouped sections.
See pep.em:sort_sections. */
- ${R_IDATA}
+ ${R_IDATA234}
+ ${RELOCATING+__IAT_start__ = .;}
+ ${R_IDATA5}
+ ${RELOCATING+__IAT_end__ = .;}
+ ${R_IDATA67}
}
.CRT ${RELOCATING+BLOCK(__section_alignment__)} :
{