From 352c6927252137a252ab942c83695890fb332004 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Wed, 19 Mar 2025 09:54:38 -0700 Subject: ELF exporting takes a target file --- .../src/main/java/com/seaofnodes/simple/codegen/CodeGen.java | 7 +++---- .../src/main/java/com/seaofnodes/simple/codegen/ElfFile.java | 12 ++++-------- 2 files changed, 7 insertions(+), 12 deletions(-) (limited to 'chapter21/src/main/java/com/seaofnodes') diff --git a/chapter21/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java b/chapter21/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java index 88144a1d..8788d109 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/codegen/CodeGen.java @@ -2,11 +2,10 @@ package com.seaofnodes.simple.codegen; import com.seaofnodes.simple.*; import com.seaofnodes.simple.node.*; - import com.seaofnodes.simple.print.*; import com.seaofnodes.simple.type.*; - import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.util.BitSet; import java.util.HashMap; import java.util.IdentityHashMap; @@ -323,11 +322,11 @@ public class CodeGen { // --------------------------- // Exporting to external formats - public CodeGen exportELF() { + public CodeGen exportELF(String fname) throws IOException { assert _phase == Phase.Encoding; _phase = Phase.Export; ElfFile obj = new ElfFile(this); - obj.export(); + obj.export(fname); return this; } diff --git a/chapter21/src/main/java/com/seaofnodes/simple/codegen/ElfFile.java b/chapter21/src/main/java/com/seaofnodes/simple/codegen/ElfFile.java index c39c5dc2..019cdf90 100644 --- a/chapter21/src/main/java/com/seaofnodes/simple/codegen/ElfFile.java +++ b/chapter21/src/main/java/com/seaofnodes/simple/codegen/ElfFile.java @@ -258,7 +258,7 @@ public class ElfFile { } } - public void export() { + public void export(String fname) throws IOException { DataSection strtab = new DataSection(".strtab", 3 /* SHT_SYMTAB */); // first byte is reserved for an empty string strtab._contents.write(0); @@ -375,13 +375,9 @@ public class ElfFile { } assert out.position() == size; - try { - BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("a.o")); - bos.write(out.array()); - bos.close(); - } catch (IOException e) { - e.printStackTrace(); - } + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fname)); + bos.write(out.array()); + bos.close(); } } -- cgit v1.2.3