From b723e82f033108c4f2f1d839eb6b7b16ceab9dd6 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 24 Jan 2005 18:39:37 +0100 Subject: [PATCH] re PR target/17751 (Undefined .LCTOC0 symbol) PR target/17751 * config/rs6000/rs6000.c (rs6000_file_start): Create toc section for AIX ABI or ELF -fPIC. (rs6000_emit_load_toc_table): Don't create toc_section here. (rs6000_xcoff_file_start): Nor here. * gcc.dg/ppc64-toc.c: New test. From-SVN: r94166 --- gcc/ChangeLog | 8 ++++++++ gcc/config/rs6000/rs6000.c | 14 ++++++-------- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.dg/ppc64-toc.c | 22 ++++++++++++++++++++++ 4 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/ppc64-toc.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9ef730b..d0ecd6e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-01-24 Jakub Jelinek + + PR target/17751 + * config/rs6000/rs6000.c (rs6000_file_start): Create toc section + for AIX ABI or ELF -fPIC. + (rs6000_emit_load_toc_table): Don't create toc_section here. + (rs6000_xcoff_file_start): Nor here. + 2005-01-24 J"orn Rennecke * sh.c (ra.h): Don't #include. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 278751b..ccf9ace 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -1768,6 +1768,12 @@ rs6000_file_start (void) if (*start == '\0') putc ('\n', file); } + + if (DEFAULT_ABI == ABI_AIX || (TARGET_ELF && flag_pic == 2)) + { + toc_section (); + text_section (); + } } @@ -13294,13 +13300,6 @@ rs6000_emit_load_toc_table (int fromprolog) : gen_reg_rtx (Pmode)); rtx symF; - /* possibly create the toc section */ - if (! toc_initialized) - { - toc_section (); - function_section (current_function_decl); - } - if (fromprolog) { rtx symL; @@ -18086,7 +18085,6 @@ rs6000_xcoff_file_start (void) fputs ("\t.file\t", asm_out_file); output_quoted_string (asm_out_file, main_input_filename); fputc ('\n', asm_out_file); - toc_section (); if (write_symbols != NO_DEBUG) private_data_section (); text_section (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d1bde8a..e6889c0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2005-01-24 Jakub Jelinek + PR target/17751 + * gcc.dg/ppc64-toc.c: New test. + * g++.dg/tree-ssa/empty-1.C: New test. PR middle-end/19551 diff --git a/gcc/testsuite/gcc.dg/ppc64-toc.c b/gcc/testsuite/gcc.dg/ppc64-toc.c new file mode 100644 index 0000000..747f137 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ppc64-toc.c @@ -0,0 +1,22 @@ +/* { dg-do link } */ +/* { dg-options "-m64 -mminimal-toc" { target powerpc64-*-* } } */ + +char *strchr (const char *, int); + +int +foo (int a) +{ + int b; + + b = 0; + if ("/"[1] != '\0') + if (strchr ("/", a)) + b = 1; + return b; +} + +int +main (void) +{ + return 0; +} -- 2.7.4