projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Document use of no-break space in lexer for C--
[ghc-hetmet.git]
/
driver
/
mangler
/
ghc-asm.lprl
diff --git
a/driver/mangler/ghc-asm.lprl
b/driver/mangler/ghc-asm.lprl
index
7bde909
..
88766cb
100644
(file)
--- a/
driver/mangler/ghc-asm.lprl
+++ b/
driver/mangler/ghc-asm.lprl
@@
-173,7
+173,13
@@
sub init_TARGET_STUFF {
$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_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';
$T_DOT_WORD = '\.(long|value|word|byte|zero)';
$T_DOT_GLOBAL = '\.globl';
@@
-218,7
+224,7
@@
sub init_TARGET_STUFF {
$T_CONST_LBL = '^\.LC(\d+):$'; # regexp for what such a lbl looks like
$T_POST_LBL = ':';
$T_CONST_LBL = '^\.LC(\d+):$'; # regexp for what such a lbl looks like
$T_POST_LBL = ':';
- $T_MOVE_DIRVS = '^(\s*\.(globl|text|data|section|align|size|type|ident|local)\s+.*\n)';
+ $T_MOVE_DIRVS = '^(\s*\.(globl|text|data|section|align|size|type|ident|local)([ \t].*)?\n)';
$T_COPY_DIRVS = '\.(globl|type|size|local)';
$T_DOT_WORD = '\.(quad|long|value|byte|zero)';
$T_COPY_DIRVS = '\.(globl|type|size|local)';
$T_DOT_WORD = '\.(quad|long|value|byte|zero)';
@@
-236,6
+242,8
@@
sub init_TARGET_STUFF {
# 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.
# 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";
$T_HDR_relrodata= "\.text\n\t\.align 8\n";
$T_HDR_closure = "\.data\n\t\.align 8\n";
@@
-598,7
+606,7
@@
sub mangle_asm {
# Labels ending "_str": these are literal strings.
} elsif ( /^${T_US}([A-Za-z0-9_]+)_str${T_POST_LBL}$/ ) {
$chk[++$i] = $_;
# Labels ending "_str": these are literal strings.
} elsif ( /^${T_US}([A-Za-z0-9_]+)_str${T_POST_LBL}$/ ) {
$chk[++$i] = $_;
- $chkcat[$i] = 'rodata';
+ $chkcat[$i] = 'relrodata';
$chksymb[$i] = '';
} elsif ( $TargetPlatform =~ /-darwin/
&& (/^\s*\.subsections_via_symbols/
$chksymb[$i] = '';
} elsif ( $TargetPlatform =~ /-darwin/
&& (/^\s*\.subsections_via_symbols/