%************************************************************************
\begin{code}
+############################################################################
+# Make all regexp matching multi-line aware. This replaces the line below
+# originally found in "sub mangle_asm":
+#
+# local($*) = 1;
+#
+# This used to work, but Perl 5.10 removes support for $*, so we uses an
+# equivalent construct that works in Perl 5.6 and later.
+#
+BEGIN { if ($] >= 5.010) {
+ require overload; overload::constant( qr => sub { "(?m:$_[1])" } );
+} }
+############################################################################
+
$TargetPlatform = $TARGETPLATFORM;
($Pgm = $0) =~ s|.*/||;
$T_X86_BADJMP = '^\tjmp\s+[^\.\*]';
$T_MOVE_DIRVS = '^(\s*(\.(p2)?align\s.*|\.globl\s+\S+|\.text|\.data|\.section\s+.*|\.type\s+.*|\.size\s+\S+\s*,\s*\d+|\.ident.*|\.local.*)\n)';
- $T_COPY_DIRVS = '^\s*\.(globl|type|size|local)';
+ if ( $TargetPlatform =~ /solaris2/ ) {
+ # newer Solaris linkers are picky about .size information, so
+ # omit it (see #1421)
+ $T_COPY_DIRVS = '^\s*\.(globl|local)';
+ } else {
+ $T_COPY_DIRVS = '^\s*\.(globl|type|size|local)';
+ }
$T_DOT_WORD = '\.(long|value|word|byte|zero)';
$T_DOT_GLOBAL = '\.globl';
# where x is in the text section and y in the rodata section.
# It works if y is in the text section, though. This is probably
# going to cause difficulties for PIC, I imagine.
+ #
+ # See Note [x86-64-relative] in includes/InfoTables.h
$T_HDR_relrodata= "\.text\n\t\.align 8\n";
$T_HDR_closure = "\.data\n\t\.align 8\n";
\begin{code}
sub mangle_asm {
local($in_asmf, $out_asmf) = @_;
-
- # multi-line regexp matching:
- local($*) = 1;
local($i, $c);
+ local($*) = 1;
# ia64-specific information for code chunks
my $ia64_locnum;