summaryrefslogtreecommitdiff
path: root/rts/linker
diff options
context:
space:
mode:
authorGHC GitLab CI <ghc-ci@gitlab-haskell.org>2022-01-20 13:53:16 -0500
committerBen Gamari <ben@smart-cactus.org>2022-04-06 15:18:26 -0400
commitf601f00246ffe3e4fcd1fc333c1d41e0dc738fc1 (patch)
treefefce49cec01141f0e0648171efdbda4f4edd8cb /rts/linker
parent88d610317a707eb33fe8f1a1a8ab6456279861f2 (diff)
downloadhaskell-f601f00246ffe3e4fcd1fc333c1d41e0dc738fc1.tar.gz
rts: Eliminate use of nested functions
This is a gcc-specific extension.
Diffstat (limited to 'rts/linker')
-rw-r--r--rts/linker/PEi386.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/rts/linker/PEi386.c b/rts/linker/PEi386.c
index b0be4efad4..2a90779142 100644
--- a/rts/linker/PEi386.c
+++ b/rts/linker/PEi386.c
@@ -2179,6 +2179,17 @@ addCopySection (ObjectCode *oc, Section *s, SectionKind kind,
* Debugging operations.
*/
+typedef struct _SymX { SymbolName* name; uintptr_t loc; } SymX;
+
+static int comp (const void * elem1, const void * elem2)
+{
+ SymX f = *((SymX*)elem1);
+ SymX s = *((SymX*)elem2);
+ if (f.loc > s.loc) return 1;
+ if (f.loc < s.loc) return -1;
+ return 0;
+}
+
pathchar*
resolveSymbolAddr_PEi386 (pathchar* buffer, int size,
SymbolAddr* symbol, uintptr_t* top ){
@@ -2304,7 +2315,6 @@ resolveSymbolAddr_PEi386 (pathchar* buffer, int size,
else if (obj)
{
/* Try to calculate from information inside the rts. */
- typedef struct _SymX { SymbolName* name; uintptr_t loc; } SymX;
SymX* locs = stgCallocBytes (sizeof(SymX), obj->n_symbols,
"resolveSymbolAddr");
int blanks = 0;
@@ -2324,14 +2334,6 @@ resolveSymbolAddr_PEi386 (pathchar* buffer, int size,
locs[i] = sx;
}
}
- int comp (const void * elem1, const void * elem2)
- {
- SymX f = *((SymX*)elem1);
- SymX s = *((SymX*)elem2);
- if (f.loc > s.loc) return 1;
- if (f.loc < s.loc) return -1;
- return 0;
- }
qsort (locs, obj->n_symbols, sizeof (SymX), comp);
uintptr_t key = (uintptr_t)symbol;
SymX* res = NULL;