mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
b9519cfe98
For PLT expressions, we should subtract the PLT relocation size only for jump instructions. Since PLT relocations are PC relative, we only allow "symbol@PLT" in PLT expression. gas/ PR gas/23997 * config/tc-i386.c (x86_cons): Check for invalid PLT expression. (md_apply_fix): Subtract the PLT relocation size only for jump instructions. * testsuite/gas/i386/reloc32.s: Add test for invalid PLT expression. * testsuite/gas/i386/reloc64.s: Likewise. * testsuite/gas/i386/ilp32/reloc64.s: Likewise. * testsuite/gas/i386/reloc32.l: Updated. * testsuite/gas/i386/reloc64.l: Likewise. * testsuite/gas/i386/ilp32/reloc64.l: Likewise. ld/ PR gas/23997 * testsuite/ld-i386/i386.exp: Run PR gas/23997 test. * testsuite/ld-x86-64/x86-64.exp: Likewise. * testsuite/ld-x86-64/pr23997a.s: New file. * testsuite/ld-x86-64/pr23997b.c: Likewise. * testsuite/ld-x86-64/pr23997c.c: Likewise.
26 lines
222 B
C
26 lines
222 B
C
#include <stdio.h>
|
|
|
|
typedef void (*func_t) (void);
|
|
|
|
extern func_t get_foo (void);
|
|
|
|
void
|
|
foo (void)
|
|
{
|
|
}
|
|
|
|
int
|
|
main ()
|
|
{
|
|
func_t p;
|
|
|
|
foo ();
|
|
p = get_foo ();
|
|
p ();
|
|
|
|
if (foo == p)
|
|
printf ("PASS\n");
|
|
|
|
return 0;
|
|
}
|