@end table
@menu
-@@ -9910,6 +9910,14 @@ is to help link with legacy assembly cod
-
- Be warned that you should know what you are doing when invoking this
- option, and that not all targets provide complete support for it.
+@@ -9988,6 +9988,14 @@
+ generate code that is not binary compatible with code generated without that
+ switch. Use it to conform to a non-default application binary interface.
+ Not all targets provide complete support for this switch.
+
+@item -ftls-model=@var{model}
+Alter the thread-local storage model to be used (@pxref{Thread-Local}).
+The @var{model} argument should be one of @code{global-dynamic},
+@code{local-dynamic}, @code{initial-exec} or @code{local-exec}.
-+
++
+The default without @option{-fpic} is @code{initial-exec}; with
+@option{-fpic} the default is @code{global-dynamic}.
@end table
+__thread int l A("bar"); /* { dg-error "causes a section type conflict" "conflict with user-defined section" } */
--- gcc/varasm.c.jj 2002-08-01 20:58:53.000000000 +0200
+++ gcc/varasm.c 2002-08-08 16:10:15.000000000 +0200
-@@ -1597,6 +1597,13 @@ assemble_variable (decl, top_level, at_e
+@@ -1599,6 +1599,13 @@
if (TREE_PUBLIC (decl))
maybe_assemble_visibility (decl);
/* Handle uninitialized definitions. */
/* If the decl has been given an explicit section name, then it
-@@ -1652,14 +1659,7 @@ assemble_variable (decl, top_level, at_e
+@@ -1654,14 +1661,7 @@
if (TREE_PUBLIC (decl) && DECL_NAME (decl))
globalize_decl (decl);
variable_section (decl, reloc);
/* dbxout.c needs to know this. */
-@@ -5343,11 +5343,14 @@ default_section_type_flags (decl, name,
+@@ -5345,11 +5345,14 @@
|| strcmp (name, ".sbss") == 0
|| strncmp (name, ".sbss.", 6) == 0
|| strncmp (name, ".gnu.linkonce.sb.", 17) == 0
--- gcc/config/i386/i386.c.jj 2002-08-07 22:18:39.000000000 +0200
+++ gcc/config/i386/i386.c 2002-08-08 18:18:18.000000000 +0200
-@@ -4850,8 +4850,6 @@ legitimate_constant_p (x)
+@@ -4861,8 +4861,6 @@
{
case UNSPEC_TPOFF:
return local_exec_symbolic_operand (XVECEXP (inner, 0, 0), Pmode);
default:
return false;
}
-@@ -4914,8 +4912,6 @@ legitimate_pic_operand_p (x)
+@@ -4921,8 +4919,6 @@
{
case UNSPEC_TPOFF:
return local_exec_symbolic_operand (XVECEXP (inner, 0, 0), Pmode);
default:
return false;
}
-@@ -5054,6 +5050,13 @@ legitimate_address_p (mode, addr, strict
+@@ -5048,6 +5044,13 @@
debug_rtx (addr);
}
if (ix86_decompose_address (addr, &parts) <= 0)
{
reason = "decomposition failed";
-@@ -5521,7 +5524,9 @@ get_thread_pointer ()
+@@ -5499,7 +5502,9 @@
rtx tp;
tp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, const0_rtx), UNSPEC_TP);
tp = force_reg (Pmode, tp);
return tp;
-@@ -6611,17 +6615,6 @@ print_operand (file, x, code)
+@@ -6613,17 +6618,6 @@
fprintf (file, "%s", dstr);
}
else
{
if (code != 'P')
-@@ -6660,6 +6653,16 @@ print_operand_address (file, addr)
+@@ -6662,6 +6656,16 @@
rtx base, index, disp;
int scale;
+ }
+
if (! ix86_decompose_address (addr, &parts))
- abort ();
-
+ {
+ output_operand_lossage ("Wrong address expression or operand constraint");
--- gcc/testsuite/gcc.dg/tls/opt-2.c.jj 2002-08-08 18:36:32.000000000 +0200
+++ gcc/testsuite/gcc.dg/tls/opt-2.c 2002-08-08 18:34:44.000000000 +0200
@@ -0,0 +1,53 @@