mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 15:18:37 +08:00
Set DF_1_PIE in gld${EMULATION_NAME}_after_parse
We can't add OPTION_PIE to gld${EMULATION_NAME}_handle_option since it has been handled in parse_args in lexsup.c. This patch moves setting DF_1_PIE to gld${EMULATION_NAME}_after_parse. ld/ * emultempl/alphaelf.em (alpha_after_parse): Call gld${EMULATION_NAME}_after_parse instead of after_parse_default. * emultempl/cr16elf.em (cr16elf_after_parse): Likewise. * emultempl/crxelf.em (crxelf_after_parse); Likewise. * emultempl/hppaelf.em (hppaelf_after_parse): Likewise. * emultempl/mipself.em (mips_after_parse): Likewise. * emultempl/nds32elf.em (nds32_elf_after_parse): Likewise. * emultempl/elf32.em: Don't include ldlex.h. (gld${EMULATION_NAME}_after_parse): New function. (gld${EMULATION_NAME}_handle_option) [GENERATE_PIE_SCRIPT] <OPTION_PIE>: Removed. (ld_${EMULATION_NAME}_emulation): Replace after_parse_default with gld${EMULATION_NAME}_after_parse. * emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse): Renamed to ... (ia64elf_after_parse): This. Call gld${EMULATION_NAME}_after_parse instead of after_parse_default. (LDEMUL_AFTER_PARSE): Replace gld${EMULATION_NAME}_after_parse with ia64elf_after_parse. ld/testsuite/ * ld-elf/pie.d: New test.
This commit is contained in:
23
ld/ChangeLog
23
ld/ChangeLog
@ -1,3 +1,26 @@
|
|||||||
|
2015-09-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* emultempl/alphaelf.em (alpha_after_parse): Call
|
||||||
|
gld${EMULATION_NAME}_after_parse instead of
|
||||||
|
after_parse_default.
|
||||||
|
* emultempl/cr16elf.em (cr16elf_after_parse): Likewise.
|
||||||
|
* emultempl/crxelf.em (crxelf_after_parse); Likewise.
|
||||||
|
* emultempl/hppaelf.em (hppaelf_after_parse): Likewise.
|
||||||
|
* emultempl/mipself.em (mips_after_parse): Likewise.
|
||||||
|
* emultempl/nds32elf.em (nds32_elf_after_parse): Likewise.
|
||||||
|
* emultempl/elf32.em: Don't include ldlex.h.
|
||||||
|
(gld${EMULATION_NAME}_after_parse): New function.
|
||||||
|
(gld${EMULATION_NAME}_handle_option) [GENERATE_PIE_SCRIPT]
|
||||||
|
<OPTION_PIE>: Removed.
|
||||||
|
(ld_${EMULATION_NAME}_emulation): Replace after_parse_default
|
||||||
|
with gld${EMULATION_NAME}_after_parse.
|
||||||
|
* emultempl/ia64elf.em (gld${EMULATION_NAME}_after_parse):
|
||||||
|
Renamed to ...
|
||||||
|
(ia64elf_after_parse): This. Call
|
||||||
|
gld${EMULATION_NAME}_after_parse instead of after_parse_default.
|
||||||
|
(LDEMUL_AFTER_PARSE): Replace gld${EMULATION_NAME}_after_parse
|
||||||
|
with ia64elf_after_parse.
|
||||||
|
|
||||||
2015-09-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2015-09-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
* emulparams/solaris2.sh (GENERATE_PIE_SCRIPT): Set to yes.
|
* emulparams/solaris2.sh (GENERATE_PIE_SCRIPT): Set to yes.
|
||||||
|
@ -82,7 +82,7 @@ alpha_after_parse (void)
|
|||||||
exp_nameop (SIZEOF_HEADERS, NULL)),
|
exp_nameop (SIZEOF_HEADERS, NULL)),
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -119,7 +119,7 @@ cr16elf_after_parse (void)
|
|||||||
is true the link sometimes fails. */
|
is true the link sometimes fails. */
|
||||||
config.magic_demand_paged = FALSE;
|
config.magic_demand_paged = FALSE;
|
||||||
|
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is called after the sections have been attached to output
|
/* This is called after the sections have been attached to output
|
||||||
|
@ -42,7 +42,7 @@ crxelf_after_parse (void)
|
|||||||
is true the link sometimes fails. */
|
is true the link sometimes fails. */
|
||||||
config.magic_demand_paged = FALSE;
|
config.magic_demand_paged = FALSE;
|
||||||
|
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is called after the sections have been attached to output
|
/* This is called after the sections have been attached to output
|
||||||
|
@ -49,7 +49,6 @@ fragment <<EOF
|
|||||||
#include "ldmain.h"
|
#include "ldmain.h"
|
||||||
#include "ldmisc.h"
|
#include "ldmisc.h"
|
||||||
#include "ldexp.h"
|
#include "ldexp.h"
|
||||||
#include "ldlex.h"
|
|
||||||
#include "ldlang.h"
|
#include "ldlang.h"
|
||||||
#include "ldfile.h"
|
#include "ldfile.h"
|
||||||
#include "ldemul.h"
|
#include "ldemul.h"
|
||||||
@ -61,6 +60,7 @@ fragment <<EOF
|
|||||||
|
|
||||||
/* Declare functions used by various EXTRA_EM_FILEs. */
|
/* Declare functions used by various EXTRA_EM_FILEs. */
|
||||||
static void gld${EMULATION_NAME}_before_parse (void);
|
static void gld${EMULATION_NAME}_before_parse (void);
|
||||||
|
static void gld${EMULATION_NAME}_after_parse (void);
|
||||||
static void gld${EMULATION_NAME}_after_open (void);
|
static void gld${EMULATION_NAME}_after_open (void);
|
||||||
static void gld${EMULATION_NAME}_before_allocation (void);
|
static void gld${EMULATION_NAME}_before_allocation (void);
|
||||||
static void gld${EMULATION_NAME}_after_allocation (void);
|
static void gld${EMULATION_NAME}_after_allocation (void);
|
||||||
@ -108,6 +108,21 @@ gld${EMULATION_NAME}_before_parse (void)
|
|||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test x"$LDEMUL_AFTER_PARSE" != xgld"$EMULATION_NAME"_after_parse; then
|
||||||
|
fragment <<EOF
|
||||||
|
|
||||||
|
static void
|
||||||
|
gld${EMULATION_NAME}_after_parse (void)
|
||||||
|
{
|
||||||
|
if (bfd_link_pie (&link_info))
|
||||||
|
link_info.flags_1 |= (bfd_vma) DF_1_PIE;
|
||||||
|
|
||||||
|
after_parse_default ();
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
if test x"$LDEMUL_RECOGNIZED_FILE" != xgld"${EMULATION_NAME}"_load_symbols; then
|
if test x"$LDEMUL_RECOGNIZED_FILE" != xgld"${EMULATION_NAME}"_load_symbols; then
|
||||||
fragment <<EOF
|
fragment <<EOF
|
||||||
/* Handle the generation of DT_NEEDED tags. */
|
/* Handle the generation of DT_NEEDED tags. */
|
||||||
@ -2290,13 +2305,6 @@ fragment <<EOF
|
|||||||
|
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
if test x"$GENERATE_PIE_SCRIPT" = xyes; then
|
|
||||||
fragment <<EOF
|
|
||||||
case OPTION_PIE:
|
|
||||||
link_info.flags_1 |= (bfd_vma) DF_1_PIE;
|
|
||||||
break;
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
fragment <<EOF
|
fragment <<EOF
|
||||||
case 'z':
|
case 'z':
|
||||||
if (strcmp (optarg, "defs") == 0)
|
if (strcmp (optarg, "defs") == 0)
|
||||||
@ -2459,7 +2467,7 @@ struct ld_emulation_xfer_struct ld_${EMULATION_NAME}_emulation =
|
|||||||
${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
|
${LDEMUL_BEFORE_PARSE-gld${EMULATION_NAME}_before_parse},
|
||||||
${LDEMUL_SYSLIB-syslib_default},
|
${LDEMUL_SYSLIB-syslib_default},
|
||||||
${LDEMUL_HLL-hll_default},
|
${LDEMUL_HLL-hll_default},
|
||||||
${LDEMUL_AFTER_PARSE-after_parse_default},
|
${LDEMUL_AFTER_PARSE-gld${EMULATION_NAME}_after_parse},
|
||||||
${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
|
${LDEMUL_AFTER_OPEN-gld${EMULATION_NAME}_after_open},
|
||||||
${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
|
${LDEMUL_AFTER_ALLOCATION-gld${EMULATION_NAME}_after_allocation},
|
||||||
${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
|
${LDEMUL_SET_OUTPUT_ARCH-set_output_arch_default},
|
||||||
|
@ -59,7 +59,7 @@ hppaelf_after_parse (void)
|
|||||||
NULL);
|
NULL);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is called before the input files are opened. We create a new
|
/* This is called before the input files are opened. We create a new
|
||||||
|
@ -31,12 +31,12 @@ fragment <<EOF
|
|||||||
static int itanium = 0;
|
static int itanium = 0;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gld${EMULATION_NAME}_after_parse (void)
|
ia64elf_after_parse (void)
|
||||||
{
|
{
|
||||||
link_info.relax_pass = 2;
|
link_info.relax_pass = 2;
|
||||||
bfd_elf${ELFSIZE}_ia64_after_parse (itanium);
|
bfd_elf${ELFSIZE}_ia64_after_parse (itanium);
|
||||||
|
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
@ -61,5 +61,5 @@ PARSE_AND_LIST_ARGS_CASES='
|
|||||||
break;
|
break;
|
||||||
'
|
'
|
||||||
|
|
||||||
LDEMUL_AFTER_PARSE=gld${EMULATION_NAME}_after_parse
|
LDEMUL_AFTER_PARSE=ia64elf_after_parse
|
||||||
source_em ${srcdir}/emultempl/needrelax.em
|
source_em ${srcdir}/emultempl/needrelax.em
|
||||||
|
@ -47,7 +47,7 @@ mips_after_parse (void)
|
|||||||
link_info.emit_hash = TRUE;
|
link_info.emit_hash = TRUE;
|
||||||
link_info.emit_gnu_hash = FALSE;
|
link_info.emit_gnu_hash = FALSE;
|
||||||
}
|
}
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct hook_stub_info
|
struct hook_stub_info
|
||||||
|
@ -94,7 +94,7 @@ nds32_elf_after_parse (void)
|
|||||||
target_optimize = target_optimize & (!NDS32_RELAX_EX9_ON);
|
target_optimize = target_optimize & (!NDS32_RELAX_EX9_ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
after_parse_default ();
|
gld${EMULATION_NAME}_after_parse ();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2015-09-22 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* ld-elf/pie.d: New test.
|
||||||
|
|
||||||
2015-09-18 Alan Modra <amodra@gmail.com>
|
2015-09-18 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR ld/18963
|
PR ld/18963
|
||||||
|
8
ld/testsuite/ld-elf/pie.d
Normal file
8
ld/testsuite/ld-elf/pie.d
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#source: start.s
|
||||||
|
#readelf: -d -W
|
||||||
|
#ld: -pie
|
||||||
|
#target: *-*-linux* *-*-gnu* *-*-solaris*
|
||||||
|
|
||||||
|
#...
|
||||||
|
+0x[0-9a-f]+ +\(FLAGS_1\) +Flags: +PIE
|
||||||
|
#pass
|
Reference in New Issue
Block a user