mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
60f7927512
LTO may optimize out a plugin symbol, which is also referenced by a non-IR file. When that happens, we should mark the plugin symbol undefined. It isn't the problem since LTO already determined the symbols in the non-IR file aren't used. bfd/ PR ld/12365 PR ld/14272 * elflink.c (_bfd_elf_fix_symbol_flags): Mark the plugin symbol undefined if it is referenced from a non-IR file. ld/testsuite/ PR ld/12365 * ld-plugin/pr12365a.c: New file. * ld-plugin/pr12365b.c: Likewise. * ld-plugin/pr12365c.c: Likewise. * ld-plugin/lto.exp (lto_link_tests): Prepare for the PR ld/12365 test. Run the PR ld/12365 test.
80 lines
1.2 KiB
C
80 lines
1.2 KiB
C
extern void abort (void);
|
|
extern int inside_main;
|
|
typedef __SIZE_TYPE__ size_t;
|
|
|
|
#define TEST_ABORT if (inside_main) abort()
|
|
|
|
void *
|
|
my_memcpy (void *d, const void *s, size_t n)
|
|
{
|
|
char *dst = (char *) d;
|
|
const char *src = (const char *) s;
|
|
while (n--)
|
|
*dst++ = *src++;
|
|
return (char *) d;
|
|
}
|
|
|
|
void
|
|
my_bcopy (const void *s, void *d, size_t n)
|
|
{
|
|
char *dst = (char *) d;
|
|
const char *src = (const char *) s;
|
|
if (src >= dst)
|
|
while (n--)
|
|
*dst++ = *src++;
|
|
else
|
|
{
|
|
dst += n;
|
|
src += n;
|
|
while (n--)
|
|
*--dst = *--src;
|
|
}
|
|
}
|
|
|
|
void *
|
|
my_memset (void *d, int c, size_t n)
|
|
{
|
|
char *dst = (char *) d;
|
|
while (n--)
|
|
*dst++ = c;
|
|
return (char *) d;
|
|
}
|
|
|
|
void
|
|
my_bzero (void *d, size_t n)
|
|
{
|
|
char *dst = (char *) d;
|
|
while (n--)
|
|
*dst++ = '\0';
|
|
}
|
|
|
|
void *
|
|
memcpy (void *d, const void *s, size_t n)
|
|
{
|
|
void *result = my_memcpy (d, s, n);
|
|
TEST_ABORT;
|
|
return result;
|
|
}
|
|
|
|
void
|
|
bcopy (const void *s, void *d, size_t n)
|
|
{
|
|
my_bcopy (s, d, n);
|
|
TEST_ABORT;
|
|
}
|
|
|
|
void *
|
|
memset (void *d, int c, size_t n)
|
|
{
|
|
void *result = my_memset (d, c, n);
|
|
TEST_ABORT;
|
|
return result;
|
|
}
|
|
|
|
void
|
|
bzero (void *d, size_t n)
|
|
{
|
|
my_bzero (d, n);
|
|
TEST_ABORT;
|
|
}
|