Commit 85b776df by Alan Modra Committed by Alan Modra

linux64.h (DOT_SYMBOLS): Define.

	* config/rs6000/linux64.h (DOT_SYMBOLS): Define.
	(CRT_CALL_STATIC_FUNCTION): Define !DOT_SYMBOLS version.
	(ASM_DECLARE_FUNCTION_SIZE): Modify for !DOT_SYMBOLS.
	(ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_BRAC, DBX_OUTPUT_NFUN): Likewise.
	(RS6000_ABI_NAME): Define as "linux".
	(SUBSUBTARGET_OVERRIDE_OPTIONS): Set dot_symbols.
	* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Select
	ABI_AIX when rs6000_abi_name is "linux" and TARGET_64BIT.
	* config/rs6000/rs6000-protos.h (rs6000_output_function_entry): Decl.
	* config/rs6000/rs6000.c (dot_symbols): New global var.
	(rs6000_output_function_entry): New function, modified for
	!DOT_SYMBOLS..
	(print_operand <case 'z'>): ..extracted from here.
	(rs6000_assemble_visibility): Modify for !DOT_SYMBOLS.
	(rs6000_output_function_epilogue): Likewise.
	(rs6000_elf_declare_function_name): Likewise.
	* config/rs6000/rs6000.h (DOT_SYMBOLS): Define.
	(ASM_WEAKEN_DECL, ASM_OUTPUT_DEF_FROM_DECLS): Modify for !DOT_SYMBOLS.
	* configure.ac (HAVE_LD_NO_DOT_SYMS): Add new AC_DEFINE.
	* configure: Regenerate.
	* config.in: Regenerate.

From-SVN: r86354
parent eba6cfb6
2004-08-21 Alan Modra <amodra@bigpond.net.au>
* config/rs6000/linux64.h (DOT_SYMBOLS): Define.
(CRT_CALL_STATIC_FUNCTION): Define !DOT_SYMBOLS version.
(ASM_DECLARE_FUNCTION_SIZE): Modify for !DOT_SYMBOLS.
(ASM_OUTPUT_SOURCE_LINE, DBX_OUTPUT_BRAC, DBX_OUTPUT_NFUN): Likewise.
(RS6000_ABI_NAME): Define as "linux".
(SUBSUBTARGET_OVERRIDE_OPTIONS): Set dot_symbols.
* config/rs6000/sysv4.h (SUBTARGET_OVERRIDE_OPTIONS): Select
ABI_AIX when rs6000_abi_name is "linux" and TARGET_64BIT.
* config/rs6000/rs6000-protos.h (rs6000_output_function_entry): Decl.
* config/rs6000/rs6000.c (dot_symbols): New global var.
(rs6000_output_function_entry): New function, modified for
!DOT_SYMBOLS..
(print_operand <case 'z'>): ..extracted from here.
(rs6000_assemble_visibility): Modify for !DOT_SYMBOLS.
(rs6000_output_function_epilogue): Likewise.
(rs6000_elf_declare_function_name): Likewise.
* config/rs6000/rs6000.h (DOT_SYMBOLS): Define.
(ASM_WEAKEN_DECL, ASM_OUTPUT_DEF_FROM_DECLS): Modify for !DOT_SYMBOLS.
* configure.ac (HAVE_LD_NO_DOT_SYMS): Add new AC_DEFINE.
* configure: Regenerate.
* config.in: Regenerate.
2004-08-20 Mark Mitchell <mark@codesourcery.com> 2004-08-20 Mark Mitchell <mark@codesourcery.com>
* reload.c (find_reloads_address): Fix thinko in previous change. * reload.c (find_reloads_address): Fix thinko in previous change.
......
...@@ -351,6 +351,9 @@ ...@@ -351,6 +351,9 @@
/* Define if your linker supports --eh-frame-hdr option. */ /* Define if your linker supports --eh-frame-hdr option. */
#undef HAVE_LD_EH_FRAME_HDR #undef HAVE_LD_EH_FRAME_HDR
/* Define if your PowerPC64 linker only needs function descriptor syms. */
#undef HAVE_LD_NO_DOT_SYMS
/* Define if your linker supports -pie option. */ /* Define if your linker supports -pie option. */
#undef HAVE_LD_PIE #undef HAVE_LD_PIE
......
...@@ -50,6 +50,13 @@ ...@@ -50,6 +50,13 @@
#undef TARGET_AIX #undef TARGET_AIX
#define TARGET_AIX TARGET_64BIT #define TARGET_AIX TARGET_64BIT
#ifdef HAVE_LD_NO_DOT_SYMS
/* New ABI uses a local sym for the function entry point. */
extern int dot_symbols;
#undef DOT_SYMBOLS
#define DOT_SYMBOLS dot_symbols
#endif
#undef PROCESSOR_DEFAULT64 #undef PROCESSOR_DEFAULT64
#define PROCESSOR_DEFAULT64 PROCESSOR_PPC630 #define PROCESSOR_DEFAULT64 PROCESSOR_PPC630
...@@ -57,7 +64,7 @@ ...@@ -57,7 +64,7 @@
#define TARGET_RELOCATABLE (!TARGET_64BIT && (target_flags & MASK_RELOCATABLE)) #define TARGET_RELOCATABLE (!TARGET_64BIT && (target_flags & MASK_RELOCATABLE))
#undef RS6000_ABI_NAME #undef RS6000_ABI_NAME
#define RS6000_ABI_NAME (TARGET_64BIT ? "aixdesc" : "sysv") #define RS6000_ABI_NAME "linux"
#define INVALID_64BIT "-m%s not supported in this configuration" #define INVALID_64BIT "-m%s not supported in this configuration"
#define INVALID_32BIT INVALID_64BIT #define INVALID_32BIT INVALID_64BIT
...@@ -75,6 +82,7 @@ ...@@ -75,6 +82,7 @@
rs6000_current_abi = ABI_AIX; \ rs6000_current_abi = ABI_AIX; \
error (INVALID_64BIT, "call"); \ error (INVALID_64BIT, "call"); \
} \ } \
dot_symbols = !strcmp (rs6000_abi_name, "aixdesc"); \
if (target_flags & MASK_RELOCATABLE) \ if (target_flags & MASK_RELOCATABLE) \
{ \ { \
target_flags &= ~MASK_RELOCATABLE; \ target_flags &= ~MASK_RELOCATABLE; \
...@@ -386,11 +394,19 @@ ...@@ -386,11 +394,19 @@
object files, each potentially with a different TOC pointer. For object files, each potentially with a different TOC pointer. For
that reason, place a nop after the call so that the linker can that reason, place a nop after the call so that the linker can
restore the TOC pointer if a TOC adjusting call stub is needed. */ restore the TOC pointer if a TOC adjusting call stub is needed. */
#if DOT_SYMBOLS
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
asm (SECTION_OP "\n" \ asm (SECTION_OP "\n" \
" bl ." #FUNC "\n" \ " bl ." #FUNC "\n" \
" nop\n" \ " nop\n" \
" .previous"); " .previous");
#else
#define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \
asm (SECTION_OP "\n" \
" bl " #FUNC "\n" \
" nop\n" \
" .previous");
#endif
#endif #endif
/* FP save and restore routines. */ /* FP save and restore routines. */
...@@ -415,13 +431,11 @@ ...@@ -415,13 +431,11 @@
if (!flag_inhibit_size_directive) \ if (!flag_inhibit_size_directive) \
{ \ { \
fputs ("\t.size\t", (FILE)); \ fputs ("\t.size\t", (FILE)); \
if (TARGET_64BIT) \ if (TARGET_64BIT && DOT_SYMBOLS) \
putc ('.', (FILE)); \ putc ('.', (FILE)); \
assemble_name ((FILE), (FNAME)); \ assemble_name ((FILE), (FNAME)); \
fputs (",.-", (FILE)); \ fputs (",.-", (FILE)); \
if (TARGET_64BIT) \ rs6000_output_function_entry (FILE, FNAME); \
putc ('.', (FILE)); \
assemble_name ((FILE), (FNAME)); \
putc ('\n', (FILE)); \ putc ('\n', (FILE)); \
} \ } \
} \ } \
...@@ -465,14 +479,13 @@ ...@@ -465,14 +479,13 @@
do \ do \
{ \ { \
char temp[256]; \ char temp[256]; \
const char *s; \
ASM_GENERATE_INTERNAL_LABEL (temp, "LM", COUNTER); \ ASM_GENERATE_INTERNAL_LABEL (temp, "LM", COUNTER); \
fprintf (FILE, "\t.stabn 68,0,%d,", LINE); \ fprintf (FILE, "\t.stabn 68,0,%d,", LINE); \
assemble_name (FILE, temp); \ assemble_name (FILE, temp); \
putc ('-', FILE); \ putc ('-', FILE); \
if (TARGET_64BIT) \ s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
putc ('.', FILE); \ rs6000_output_function_entry (FILE, s); \
assemble_name (FILE, \
XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\
putc ('\n', FILE); \ putc ('\n', FILE); \
(*targetm.asm_out.internal_label) (FILE, "LM", COUNTER); \ (*targetm.asm_out.internal_label) (FILE, "LM", COUNTER); \
} \ } \
...@@ -482,19 +495,20 @@ while (0) ...@@ -482,19 +495,20 @@ while (0)
#define DBX_OUTPUT_BRAC(FILE, NAME, BRAC) \ #define DBX_OUTPUT_BRAC(FILE, NAME, BRAC) \
do \ do \
{ \ { \
const char *flab; \ const char *s; \
fprintf (FILE, "%s%d,0,0,", ASM_STABN_OP, BRAC); \ fprintf (FILE, "%s%d,0,0,", ASM_STABN_OP, BRAC); \
assemble_name (FILE, NAME); \ assemble_name (FILE, NAME); \
putc ('-', FILE); \ putc ('-', FILE); \
if (current_function_func_begin_label != NULL_TREE) \ if (current_function_func_begin_label != NULL_TREE) \
flab = IDENTIFIER_POINTER (current_function_func_begin_label); \ { \
s = IDENTIFIER_POINTER (current_function_func_begin_label); \
assemble_name (FILE, s); \
} \
else \ else \
{ \ { \
if (TARGET_64BIT) \ s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
putc ('.', FILE); \ rs6000_output_function_entry (FILE, s); \
flab = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
} \ } \
assemble_name (FILE, flab); \
putc ('\n', FILE); \ putc ('\n', FILE); \
} \ } \
while (0) while (0)
...@@ -506,12 +520,12 @@ while (0) ...@@ -506,12 +520,12 @@ while (0)
#define DBX_OUTPUT_NFUN(FILE, LSCOPE, DECL) \ #define DBX_OUTPUT_NFUN(FILE, LSCOPE, DECL) \
do \ do \
{ \ { \
const char *s; \
fprintf (FILE, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN); \ fprintf (FILE, "%s\"\",%d,0,0,", ASM_STABS_OP, N_FUN); \
assemble_name (FILE, LSCOPE); \ assemble_name (FILE, LSCOPE); \
putc ('-', FILE); \ putc ('-', FILE); \
if (TARGET_64BIT) \ s = XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0); \
putc ('.', FILE); \ rs6000_output_function_entry (FILE, s); \
assemble_name (FILE, XSTR (XEXP (DECL_RTL (DECL), 0), 0)); \
putc ('\n', FILE); \ putc ('\n', FILE); \
} \ } \
while (0) while (0)
......
...@@ -113,6 +113,7 @@ extern enum reg_class secondary_reload_class (enum reg_class, ...@@ -113,6 +113,7 @@ extern enum reg_class secondary_reload_class (enum reg_class,
extern int ccr_bit (rtx, int); extern int ccr_bit (rtx, int);
extern int extract_MB (rtx); extern int extract_MB (rtx);
extern int extract_ME (rtx); extern int extract_ME (rtx);
extern void rs6000_output_function_entry (FILE *, const char *);
extern void print_operand (FILE *, rtx, int); extern void print_operand (FILE *, rtx, int);
extern void print_operand_address (FILE *, rtx); extern void print_operand_address (FILE *, rtx);
extern enum rtx_code rs6000_reverse_condition (enum machine_mode, extern enum rtx_code rs6000_reverse_condition (enum machine_mode,
......
...@@ -213,6 +213,9 @@ enum rs6000_abi rs6000_current_abi; ...@@ -213,6 +213,9 @@ enum rs6000_abi rs6000_current_abi;
/* ABI string from -mabi= option. */ /* ABI string from -mabi= option. */
const char *rs6000_abi_string; const char *rs6000_abi_string;
/* Whether to use variant of AIX ABI for PowerPC64 Linux. */
int dot_symbols;
/* Debug flags */ /* Debug flags */
const char *rs6000_debug_name; const char *rs6000_debug_name;
int rs6000_debug_stack; /* debug stack applications */ int rs6000_debug_stack; /* debug stack applications */
...@@ -9791,6 +9794,36 @@ rs6000_get_some_local_dynamic_name_1 (rtx *px, void *data ATTRIBUTE_UNUSED) ...@@ -9791,6 +9794,36 @@ rs6000_get_some_local_dynamic_name_1 (rtx *px, void *data ATTRIBUTE_UNUSED)
return 0; return 0;
} }
/* Write out a function code label. */
void
rs6000_output_function_entry (FILE *file, const char *fname)
{
if (fname[0] != '.')
{
switch (DEFAULT_ABI)
{
default:
abort ();
case ABI_AIX:
if (DOT_SYMBOLS)
putc ('.', file);
else
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "L.");
break;
case ABI_V4:
case ABI_DARWIN:
break;
}
}
if (TARGET_AIX)
RS6000_OUTPUT_BASENAME (file, fname);
else
assemble_name (file, fname);
}
/* Print an operand. Recognize special options, documented below. */ /* Print an operand. Recognize special options, documented below. */
#if TARGET_ELF #if TARGET_ELF
...@@ -10323,23 +10356,7 @@ print_operand (FILE *file, rtx x, int code) ...@@ -10323,23 +10356,7 @@ print_operand (FILE *file, rtx x, int code)
if (SYMBOL_REF_DECL (x)) if (SYMBOL_REF_DECL (x))
mark_decl_referenced (SYMBOL_REF_DECL (x)); mark_decl_referenced (SYMBOL_REF_DECL (x));
if (XSTR (x, 0)[0] != '.') /* For macho, check to see if we need a stub. */
{
switch (DEFAULT_ABI)
{
default:
abort ();
case ABI_AIX:
putc ('.', file);
break;
case ABI_V4:
case ABI_DARWIN:
break;
}
}
/* For macho, we need to check it see if we need a stub. */
if (TARGET_MACHO) if (TARGET_MACHO)
{ {
const char *name = XSTR (x, 0); const char *name = XSTR (x, 0);
...@@ -10350,10 +10367,10 @@ print_operand (FILE *file, rtx x, int code) ...@@ -10350,10 +10367,10 @@ print_operand (FILE *file, rtx x, int code)
#endif #endif
assemble_name (file, name); assemble_name (file, name);
} }
else if (TARGET_AIX) else if (!DOT_SYMBOLS)
RS6000_OUTPUT_BASENAME (file, XSTR (x, 0));
else
assemble_name (file, XSTR (x, 0)); assemble_name (file, XSTR (x, 0));
else
rs6000_output_function_entry (file, XSTR (x, 0));
return; return;
case 'Z': case 'Z':
...@@ -10609,7 +10626,9 @@ rs6000_assemble_visibility (tree decl, int vis) ...@@ -10609,7 +10626,9 @@ rs6000_assemble_visibility (tree decl, int vis)
{ {
/* Functions need to have their entry point symbol visibility set as /* Functions need to have their entry point symbol visibility set as
well as their descriptor symbol visibility. */ well as their descriptor symbol visibility. */
if (DEFAULT_ABI == ABI_AIX && TREE_CODE (decl) == FUNCTION_DECL) if (DEFAULT_ABI == ABI_AIX
&& DOT_SYMBOLS
&& TREE_CODE (decl) == FUNCTION_DECL)
{ {
static const char * const visibility_types[] = { static const char * const visibility_types[] = {
NULL, "internal", "hidden", "protected" NULL, "internal", "hidden", "protected"
...@@ -14219,17 +14238,12 @@ rs6000_output_function_epilogue (FILE *file, ...@@ -14219,17 +14238,12 @@ rs6000_output_function_epilogue (FILE *file,
/* Offset from start of code to tb table. */ /* Offset from start of code to tb table. */
fputs ("\t.long ", file); fputs ("\t.long ", file);
ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT"); ASM_OUTPUT_INTERNAL_LABEL_PREFIX (file, "LT");
#if TARGET_AIX if (TARGET_AIX)
RS6000_OUTPUT_BASENAME (file, fname); RS6000_OUTPUT_BASENAME (file, fname);
#else else
assemble_name (file, fname); assemble_name (file, fname);
#endif putc ('-', file);
fputs ("-.", file); rs6000_output_function_entry (file, fname);
#if TARGET_AIX
RS6000_OUTPUT_BASENAME (file, fname);
#else
assemble_name (file, fname);
#endif
putc ('\n', file); putc ('\n', file);
/* Interrupt handler mask. */ /* Interrupt handler mask. */
...@@ -16802,22 +16816,27 @@ rs6000_elf_declare_function_name (FILE *file, const char *name, tree decl) ...@@ -16802,22 +16816,27 @@ rs6000_elf_declare_function_name (FILE *file, const char *name, tree decl)
fputs ("\t.section\t\".opd\",\"aw\"\n\t.align 3\n", file); fputs ("\t.section\t\".opd\",\"aw\"\n\t.align 3\n", file);
ASM_OUTPUT_LABEL (file, name); ASM_OUTPUT_LABEL (file, name);
fputs (DOUBLE_INT_ASM_OP, file); fputs (DOUBLE_INT_ASM_OP, file);
putc ('.', file); rs6000_output_function_entry (file, name);
assemble_name (file, name); fputs (",.TOC.@tocbase,0\n\t.previous\n", file);
fputs (",.TOC.@tocbase,0\n\t.previous\n\t.size\t", file); if (DOT_SYMBOLS)
assemble_name (file, name);
fputs (",24\n\t.type\t.", file);
assemble_name (file, name);
fputs (",@function\n", file);
if (TREE_PUBLIC (decl) && ! DECL_WEAK (decl))
{ {
fputs ("\t.globl\t.", file); fputs ("\t.size\t", file);
assemble_name (file, name); assemble_name (file, name);
putc ('\n', file); fputs (",24\n\t.type\t.", file);
assemble_name (file, name);
fputs (",@function\n", file);
if (TREE_PUBLIC (decl) && ! DECL_WEAK (decl))
{
fputs ("\t.globl\t.", file);
assemble_name (file, name);
putc ('\n', file);
}
} }
else
ASM_OUTPUT_TYPE_DIRECTIVE (file, name, "function");
ASM_DECLARE_RESULT (file, DECL_RESULT (decl)); ASM_DECLARE_RESULT (file, DECL_RESULT (decl));
putc ('.', file); rs6000_output_function_entry (file, name);
ASM_OUTPUT_LABEL (file, name); fputs (":\n", file);
return; return;
} }
......
...@@ -40,6 +40,10 @@ ...@@ -40,6 +40,10 @@
#define TARGET_AIX 0 #define TARGET_AIX 0
#endif #endif
/* Control whether function entry points use a "dot" symbol when
ABI_AIX. */
#define DOT_SYMBOLS 1
/* Default string to use for cpu if not specified. */ /* Default string to use for cpu if not specified. */
#ifndef TARGET_CPU_DEFAULT #ifndef TARGET_CPU_DEFAULT
#define TARGET_CPU_DEFAULT ((char *)0) #define TARGET_CPU_DEFAULT ((char *)0)
...@@ -2246,9 +2250,9 @@ extern int toc_initialized; ...@@ -2246,9 +2250,9 @@ extern int toc_initialized;
do \ do \
{ \ { \
fputs ("\t.weak\t", (FILE)); \ fputs ("\t.weak\t", (FILE)); \
RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \ if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \
&& DEFAULT_ABI == ABI_AIX) \ && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
{ \ { \
if (TARGET_XCOFF) \ if (TARGET_XCOFF) \
fputs ("[DS]", (FILE)); \ fputs ("[DS]", (FILE)); \
...@@ -2260,7 +2264,7 @@ extern int toc_initialized; ...@@ -2260,7 +2264,7 @@ extern int toc_initialized;
{ \ { \
ASM_OUTPUT_DEF ((FILE), (NAME), (VAL)); \ ASM_OUTPUT_DEF ((FILE), (NAME), (VAL)); \
if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \ if ((DECL) && TREE_CODE (DECL) == FUNCTION_DECL \
&& DEFAULT_ABI == ABI_AIX) \ && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
{ \ { \
fputs ("\t.set\t.", (FILE)); \ fputs ("\t.set\t.", (FILE)); \
RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \ RS6000_OUTPUT_BASENAME ((FILE), (NAME)); \
...@@ -2281,7 +2285,7 @@ extern int toc_initialized; ...@@ -2281,7 +2285,7 @@ extern int toc_initialized;
const char *alias = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ const char *alias = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
const char *name = IDENTIFIER_POINTER (TARGET); \ const char *name = IDENTIFIER_POINTER (TARGET); \
if (TREE_CODE (DECL) == FUNCTION_DECL \ if (TREE_CODE (DECL) == FUNCTION_DECL \
&& DEFAULT_ABI == ABI_AIX) \ && DEFAULT_ABI == ABI_AIX && DOT_SYMBOLS) \
{ \ { \
if (TREE_PUBLIC (DECL)) \ if (TREE_PUBLIC (DECL)) \
{ \ { \
......
...@@ -194,7 +194,12 @@ do { \ ...@@ -194,7 +194,12 @@ do { \
else if (!strcmp (rs6000_abi_name, "freebsd")) \ else if (!strcmp (rs6000_abi_name, "freebsd")) \
rs6000_current_abi = ABI_V4; \ rs6000_current_abi = ABI_V4; \
else if (!strcmp (rs6000_abi_name, "linux")) \ else if (!strcmp (rs6000_abi_name, "linux")) \
rs6000_current_abi = ABI_V4; \ { \
if (TARGET_64BIT) \
rs6000_current_abi = ABI_AIX; \
else \
rs6000_current_abi = ABI_V4; \
} \
else if (!strcmp (rs6000_abi_name, "gnu")) \ else if (!strcmp (rs6000_abi_name, "gnu")) \
rs6000_current_abi = ABI_V4; \ rs6000_current_abi = ABI_V4; \
else if (!strcmp (rs6000_abi_name, "netbsd")) \ else if (!strcmp (rs6000_abi_name, "netbsd")) \
......
...@@ -2854,6 +2854,47 @@ if test x"$gcc_cv_ld_as_needed" = xyes; then ...@@ -2854,6 +2854,47 @@ if test x"$gcc_cv_ld_as_needed" = xyes; then
[Define if your linker supports --as-needed and --no-as-needed options.]) [Define if your linker supports --as-needed and --no-as-needed options.])
fi fi
case "$target" in
powerpc64*-*-linux*)
AC_CACHE_CHECK(linker support for omitting dot symbols,
gcc_cv_ld_no_dot_syms,
[gcc_cv_ld_no_dot_syms=no
if test $in_tree_ld = yes ; then
if test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 16 -o "$gcc_cv_gld_major_version" -gt 2; then
gcc_cv_ld_no_dot_syms=yes
fi
elif test x$gcc_cv_as != x -a x$gcc_cv_ld != x ; then
cat > conftest1.s <<EOF
.text
bl .foo
EOF
cat > conftest2.s <<EOF
.section ".opd","aw"
.align 3
.globl foo
.type foo,@function
foo:
.quad .LEfoo,.TOC.@tocbase,0
.text
.LEfoo:
blr
.size foo,.-.LEfoo
EOF
if $gcc_cv_as -a64 -o conftest1.o conftest1.s > /dev/null 2>&1 \
&& $gcc_cv_as -a64 -o conftest2.o conftest2.s > /dev/null 2>&1 \
&& $gcc_cv_ld -melf64ppc -o conftest conftest1.o conftest2.o > /dev/null 2>&1; then
gcc_cv_ld_no_dot_syms=yes
fi
rm -f conftest conftest1.o conftest2.o conftest1.s conftest2.s
fi
])
if test x"$gcc_cv_ld_no_dot_syms" = xyes; then
AC_DEFINE(HAVE_LD_NO_DOT_SYMS, 1,
[Define if your PowerPC64 linker only needs function descriptor syms.])
fi
;;
esac
if test x$with_sysroot = x && test x$host = x$target \ if test x$with_sysroot = x && test x$host = x$target \
&& test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then && test "$prefix" != "/usr" && test "x$prefix" != "x$local_prefix" ; then
AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include", AC_DEFINE_UNQUOTED(PREFIX_INCLUDE_DIR, "$prefix/include",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment