From 7096ba70c05eabfe96fd7e69d276b16ac1bd0bb9 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Thu, 8 Oct 2026 16:52:27 -0700 Subject: Support putting static data into ELF constant pool Mostly fcn inits in --- build-support/AllocMetrics.java.in | 1 + build-support/measure-alloc.py | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'build-support') diff --git a/build-support/AllocMetrics.java.in b/build-support/AllocMetrics.java.in index bcf97f0d..f9ee7772 100644 --- a/build-support/AllocMetrics.java.in +++ b/build-support/AllocMetrics.java.in @@ -20,6 +20,7 @@ public class Measure { } static byte[] image(CodeGen c) throws Exception { c.encode(); + EXTERNFUNCTIONS var externalField=Encoding.class.getDeclaredField("_externals");externalField.setAccessible(true); @SuppressWarnings("unchecked") var externals=(Map)externalField.get(c._encoding); var extra=new LinkedHashMap(); diff --git a/build-support/measure-alloc.py b/build-support/measure-alloc.py index 61ae31e2..ed899713 100644 --- a/build-support/measure-alloc.py +++ b/build-support/measure-alloc.py @@ -9,6 +9,10 @@ subs={'CHAPTER':str(ch),'OPSTART':'e.opStart(n)' if ch==25 else 'e._opStart[n._n 'OPLEN':'e.opLen(n)' if ch==25 else 'e._opLen[n._nid]', 'CONSTRUCTOR':'new CodeGen(src,123L,true)' if ch==25 else 'new CodeGen(src,TypeInteger.BOT,123L,true)', 'EXPORT':'c.exportELF(true,false)' if ch==25 else 'c.exportELF(null)', + 'EXTERNFUNCTIONS':'''var functionField=CodeGen.class.getDeclaredField("_externFunc");functionField.setAccessible(true); + @SuppressWarnings("unchecked") var functionNames=(Map)functionField.get(c); + for(String name:functionNames.values()) + c._encoding._externalAddresses.put(name,name.equals("calloc")?-4:name.equals("write")?-8:name.equals("read")?-12:-16);''' if ch==25 else '', 'EXTERNDATA':'c._externDataAddresses.put("counter",0x3800);c._externDataAddresses.put("errno",0x3808);' if ch==25 else '', 'RESUME':'return c.loopTree().instSelect(cpu,"SystemV").GCM().localSched();' if ch==21 else 'return c.driver(CodeGen.Phase.LocalSched,cpu,"SystemV");', 'COPYPOOLS':'''int cp=(e._bits.size()+15)&-16,sd=(cp+e._cpool.size()+15)&-16; -- cgit v1.2.3