> -----Original Message-----
> From: Richard Earnshaw
> Sent: Tuesday, November 12, 2013 18:49
> To: Joey Ye
> Cc: gcc-patches@gcc.gnu.org
> Subject: Re: [patch] [arm] New option for PIC offset unfixed
> 
> The name of the option and the documentation highlights that the
> option's concept is confusing.
> 
> I think what you really need to do is to reverse the sense of the option
> name and have
> 
> -mpic-data-is-text-relative
> 
> with the inverse (-mno-pic-data-is-text-relative) being the active value
> that triggers for vxworks.  That is, PIC data being text-relative is the
> default for all targets except vxworks.
> 
> R.
> 
> Oh, and at run time, we should be talking about segments, not sections!
Richard, Thanks for quick response.

Updated patch renamed the option, variables and macro. Also use segments in
document. OK?

2013-11-13  Joey Ye  <joey...@arm.com>

        * config/arm/arm.c (arm_option_override):  Error if
        -mpic-data-is-text-relative without -fpic, and set for
        VxWorks RTP.
        (legitimize_pic_address): Use arm_pic_data_is_text_relative
        (arm_assemble_integer): Likewise.
        * config/arm/arm.h
        (TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE): New macro.
        * config/arm/arm.opt (mpic-data-is-text-relative): New option.
        * doc/invoke.texi (-mpic-data-is-text-relative): Doc for new option.
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 7757e86..fdd5684 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -2504,6 +2504,13 @@ arm_option_override (void)
        arm_pic_register = pic_register;
     }
 
+  if (TARGET_VXWORKS_RTP)
+    arm_pic_data_is_text_relative = 0;
+
+  if (arm_pic_data_is_text_relative != TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE
+      && !flag_pic)
+    error ("-mpic-data-is-text-relative must be used with -fpic");
+
   /* Enable -mfix-cortex-m3-ldrd by default for Cortex-M3 cores.  */
   if (fix_cm3_ldrd == 2)
     {
@@ -6020,7 +6027,7 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, 
rtx reg)
           || (GET_CODE (orig) == SYMBOL_REF &&
               SYMBOL_REF_LOCAL_P (orig)))
          && NEED_GOT_RELOC
-         && !TARGET_VXWORKS_RTP)
+         && arm_pic_data_is_text_relative)
        insn = arm_pic_static_addr (orig, reg);
       else
        {
@@ -21498,7 +21505,7 @@ arm_assemble_integer (rtx x, unsigned int size, int 
aligned_p)
        {
          /* See legitimize_pic_address for an explanation of the
             TARGET_VXWORKS_RTP check.  */
-         if (TARGET_VXWORKS_RTP
+         if (!arm_pic_data_is_text_relative
              || (GET_CODE (x) == SYMBOL_REF && !SYMBOL_REF_LOCAL_P (x)))
            fputs ("(GOT)", asm_out_file);
          else
diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
index 1781b75..dbd841e 100644
--- a/gcc/config/arm/arm.h
+++ b/gcc/config/arm/arm.h
@@ -568,6 +568,10 @@ extern int prefer_neon_for_64bits;
 #define NEED_PLT_RELOC 0
 #endif
 
+#ifndef TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE
+#define TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE 1
+#endif
+
 /* Nonzero if we need to refer to the GOT with a PC-relative
    offset.  In other words, generate
 
diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
index 9b74038..fa0839a 100644
--- a/gcc/config/arm/arm.opt
+++ b/gcc/config/arm/arm.opt
@@ -158,6 +158,10 @@ mlong-calls
 Target Report Mask(LONG_CALLS)
 Generate call insns as indirect calls, if necessary
 
+mpic-data-is-text-relative
+Target Report Var(arm_pic_data_is_text_relative) 
Init(TARGET_DEFAULT_PIC_DATA_IS_TEXT_RELATIVE)
+Assume data segments are relative to text segment.
+
 mpic-register=
 Target RejectNegative Joined Var(arm_pic_register_string)
 Specify the register to be used for PIC addressing
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 863e518..298fcc3 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -12120,6 +12120,12 @@ before execution begins.
 Specify the register to be used for PIC addressing.  The default is R10
 unless stack-checking is enabled, when R9 is used.
 
+@item -mpic-data-is-text-relative
+@opindex mpic-data-is-text-relative
+Assume that each data segments are relative to text segment at load time.
+Therefore, prevent PC relative and GOTOFF style relocations to reference
+data.  This is on by default for targets other than VxWorks RTP.
+
 @item -mpoke-function-name
 @opindex mpoke-function-name
 Write the name of each function into the text section, directly

Reply via email to