This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GNU as 2.14 on IRIX 6: crashes with shared libs


Eric Christopher writes:

> Unfortunately there's no real pattern for the gas only options. I'd lean
> toward -m<opt> though.

Ok, I'll go with -mpdr/-mno-pdr then.  I think it doesn't make sense to use
-mpdr/-no-mpdr here since (unlike e.g. -mips16/-no-mips16 or
-mdebug/-no-mdebug) the `m' is not part of the option name.

> > Btw., I noticed that -mdebug/-no-mdebug are documented neiter in as --help
> > nor in doc/c-mips.texi.
> 
> Hmm... I should get to that. Thanks.

Fine, thanks.

While we are speaking of documentation, maybe Daniel could document a
couple of things about the .pdr sections:

* What's the expansion of the pdr acronym?

* What purpose do the .pdr section serve?

* What do you loose without them?

> OK with the option name change.

I'll check in the patch below once my CVS write access is properly set up.
Btw., I noticed that doc/as.texinfo contains another listing of MIPS
specific options (which already mentions -mdebug/-no-mdebug).  The revised
patch below adds -mpdr/-mno-pdr there, too.

Thanks.
	Rainer

-----------------------------------------------------------------------------
Rainer Orth, Faculty of Technology, Bielefeld University


Tue Jul 22 01:24:35 2003  Rainer Orth  <ro@TechFak.Uni-Bielefeld.DE>

	* config/tc-mips.c (mips_flag_pdr): Define.
	(md_begin) [OBJ_ELF]: Use it to control .pdr creation.
	(s_mips_end) [OBJ_ELF]: Likewise.
	(md_longopts) [OBJ_ELF]: Define OPTION_PDR, OPTION_NO_PDR.
	(md_parse_option) [OBJ_ELF]: Handle them.
	(md_show_usage) [OBJ_ELF]: Document -mpdr, -mno-pdr.

	* doc/c-mips.texi (MIPS Opts): Document -mpdr, -mno-pdr.
	* doc/as.texinfo (Overview) [MIPS]: Likewise.

Index: config/tc-mips.c
===================================================================
RCS file: /cvs/src/src/gas/config/tc-mips.c,v
retrieving revision 1.226
diff -u -p -r1.226 tc-mips.c
--- config/tc-mips.c	15 Jul 2003 07:50:38 -0000	1.226
+++ config/tc-mips.c	22 Jul 2003 13:25:15 -0000
@@ -74,6 +74,15 @@ static int mips_output_flavor (void) { r
 
 int mips_flag_mdebug = -1;
 
+/* Control generation of .pdr sections.  Off by default on IRIX: the native
+   linker doesn't know about and discards them, but relocations against them
+   remain, leading to rld crashes.  */
+#ifdef TE_IRIX
+int mips_flag_pdr = FALSE;
+#else
+int mips_flag_pdr = TRUE;
+#endif
+
 #include "ecoff.h"
 
 #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
@@ -1283,7 +1292,7 @@ md_begin (void)
 	    (void) bfd_set_section_alignment (stdoutput, sec, 2);
 	  }
 #ifdef OBJ_ELF
-	else if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
+	else if (OUTPUT_FLAVOR == bfd_target_elf_flavour && mips_flag_pdr)
 	  {
 	    pdr_seg = subseg_new (".pdr", (subsegT) 0);
 	    (void) bfd_set_section_flags (stdoutput, pdr_seg,
@@ -10322,6 +10331,10 @@ struct option md_longopts[] =
   {"mdebug", no_argument, NULL, OPTION_MDEBUG},
 #define OPTION_NO_MDEBUG   (OPTION_ELF_BASE + 8)
   {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
+#define OPTION_PDR	   (OPTION_ELF_BASE + 9)
+  {"mpdr", no_argument, NULL, OPTION_PDR},
+#define OPTION_NO_PDR	   (OPTION_ELF_BASE + 10)
+  {"mno-pdr", no_argument, NULL, OPTION_NO_PDR},
 #endif /* OBJ_ELF */
 
   {NULL, no_argument, NULL, 0}
@@ -10670,6 +10683,14 @@ md_parse_option (int c, char *arg)
     case OPTION_NO_MDEBUG:
       mips_flag_mdebug = FALSE;
       break;
+
+    case OPTION_PDR:
+      mips_flag_pdr = TRUE;
+      break;
+
+    case OPTION_NO_PDR:
+      mips_flag_pdr = FALSE;
+      break;
 #endif /* OBJ_ELF */
 
     default:
@@ -14040,7 +14061,8 @@ s_mips_end (int x ATTRIBUTE_UNUSED)
 
 #ifdef OBJ_ELF
   /* Generate a .pdr section.  */
-  if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
+  if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING
+      && mips_flag_pdr)
     {
       segT saved_seg = now_seg;
       subsegT saved_subseg = now_subseg;
@@ -14525,6 +14547,7 @@ MIPS options:\n\
 -KPIC, -call_shared	generate SVR4 position independent code\n\
 -non_shared		do not generate position independent code\n\
 -xgot			assume a 32 bit GOT\n\
+-mpdr, -mno-pdr		enable/disable creation of .pdr sections\n\
 -mabi=ABI		create ABI conformant object file for:\n"));
 
   first = 1;
Index: doc/as.texinfo
===================================================================
RCS file: /cvs/src/src/gas/doc/as.texinfo,v
retrieving revision 1.86
diff -u -p -r1.86 as.texinfo
--- doc/as.texinfo	12 Jun 2003 14:32:19 -0000	1.86
+++ doc/as.texinfo	22 Jul 2003 13:25:19 -0000
@@ -399,6 +399,7 @@ gcc(1), ld(1), and the Info entries for 
    [@b{-mips3d}] [@b{-no-mips3d}]
    [@b{-mdmx}] [@b{-no-mdmx}]
    [@b{-mdebug}] [@b{-no-mdebug}]
+   [@b{-mpdr}] [@b{-mno-pdr}]
 @end ifset
 @ifset MMIX
 
Index: doc/c-mips.texi
===================================================================
RCS file: /cvs/src/src/gas/doc/c-mips.texi,v
retrieving revision 1.27
diff -u -p -r1.27 c-mips.texi
--- doc/c-mips.texi	15 Jul 2003 09:02:59 -0000	1.27
+++ doc/c-mips.texi	22 Jul 2003 13:25:19 -0000
@@ -230,6 +230,11 @@ are only supported at Instruction Set Ar
 Generate code to take a break exception rather than a trap exception when an
 error is detected.  This is the default.
 
+@item -mpdr
+@itemx -mno-pdr
+Control generation of @code{.pdr} sections.  Off by default on IRIX, on
+elsewhere.
+
 @item -n
 When this option is used, @code{@value{AS}} will issue a warning every
 time it generates a nop instruction from a macro.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]